1、Oracle数据库介绍mysql
一、基本介绍sql
Oracle数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。数据库
二、Oracle数据库的体系结构安全
①数据库:database服务器
Oracle数据库是数据的物理存储。这包括(数据文件ORA或DBF、控制文件、联机日志、参数文件)。Oracle数据的概念和其余数据库不同,这里的数据库是一个操做系统只有一个库。能够看作是Oracle就只有一个大数据库。session
②实例数据结构
一个Oracle实例(Oracle Instance)有一系列的后台进程和内存结果组成。一个数据库能够有N个实例。分布式
③数据文件(dbf)ide
数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。而一个表空间能够由一个或多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入某个表空间后,就不能删除这个文件,若是要删除某个数据文件,只能删除其所属与的表空间才行。大数据
④表空间
表空间是Oracle对物理数据库上相关数据文件(ORA或者DBF文件)的逻辑映射。一个数据库在逻辑上被划分红一到若干个表空间,每一个表空间包含了在逻辑上相关联的一组结构。每一个数据库至少有一个表空间(称之为system表空间)。
每一个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件(datafile)。一个数据文件只能属于一个表空间。
⑤用户
用户是在实例下创建的。不一样实例中能够建相同名字的用户。
注:表的数据,是有用户放入某个表空间的,而这个表空间会随机吧这些表数据放到一个或者多个数据文件中。
因为Oracle的数据库不是普通的概念,Oracle是由用户和表空间对数据进行管理和存放的。可是表不是有表空间去查询的,而是由用户去查的。由于不一样用户能够在同一个表空间创建同一个名字的表,这里区分就是用户了。
Oracle数据库【地球】能够有多个实例【亚洲、欧洲等等】,而每一个实例【亚洲】能够分为多个表空间(逻辑上,人为的)【中国、印度、巴基斯坦等等】,每一个表空间能够存在多个用户【中国(表空间),省政府(用户)】,每一个用户【【省政府】管理该表空间下的指定数据文件【下辖土地】。
2、Oracle数据库基本操做
DDL ( Data Definition Language 数据定义语言)语句:用来定义数据库对象(库、表、列等),建立、删除、修改库、表结构。
DML(Data Manipulation Language 数据操做语言 ) 语言:用来定义数据库记录(数据),增、删、改表记录;
DCL(Data Control Language 数据控制语言)语言:用来调用访问权限和安全级别;
DQL(Data Query Language 数据查询语言)语言:用来查询记录(数据);
(一)DDL语句管理表
假设要开发一个项目: 1. 建立表空间 2. 建立用户(受权) 3. 用户去建表
一、建立表空间(由管理员帐号建立)
语法:
create tablespace 表空间的名称 datafile '存放的位置' //指定表空间对应的数据文件存放位置 size 初始大小 autoextend on //自动增加,当表空间存储都占满时,自动增加 next 每次增加多少
示例:
create tablespace mallproject datafile 'c:\mallproject.dbf' size 100m autoextend on next 10m;
--删除表空间 drop tablespace mallproject;
二、建立用户
①建立用户语法:
create user 用户名 identified by 密码 default tablespace mallproject
密码必须不能以数字及特殊开头。
示例:
create user zhansan identified by zs123 default tablespace mallproject;
②用户受权:
--受权DCL:grant --受权zhansan拥有建立会话权限 grant create session to zhansan;
Oracle 中已存在三个重要的角色:connect角色(是授予最终用户的典型权利,最基本的),resource角色(是授予开发人员的),dba角色(拥有所有特权,是系统最高权限,只有DBA才能够建立数据结构,而且系统权限也须要DBA授出,且DBA用户能够操做全体用户的任意基表,包括删除)。
-- 授予角色 grant dba to zhansan; -- 登陆zhansan帐号,可操做任意用户的表 select * from scott.emp;
③撤销已经授予的权限语法
revoke {system privilege | role | all [privileges] } [,{system privilege | role | all [privileges] }...] from {user | role} [,{{user | role}}]...;
④删除用户及用户下的数据
drop user 用户名 cascade; -- 删除zhansan用户及其下的数据 drop user ZHANSAN cascade;
三、建立表
①语法:
create table 表名( 列名 列的类型 [列的约束], 列名 列的类型 [列的约束] );
②列的类型:
③示例:
create table person( pid number, pname vachar2(20), age number, sal number(10,2) );
④使用子查询建立表
--使用子查询建立表 --至关因而复制表,结构和表中的数据 create table emp as select * from scott.emp;--只复制表结构 create table emp1 as select * from scott.emp where 1=2;
四、修改表
①添加语法:
alter table 表名称 add(列名1 类型 [default 默认值],列名2 类型 [default 默认值]....)
②修改语法:
alter table 表名称 modify(列名1 类型 [default 默认值],列名2 类型 [default 默认值]....)
③修改列名:
alter table 表名称 rename column 列名1 to 列名2;
④示例:
-- 添加列 alter table person add sex VARCHAR2(10); -- 同时添加多列 ALTER TABLE person ADD( mobile VARCHAR2(10), adddress VARCHAR2(100) ); -- 重定义列 alter table person modify mobile number; -- 修改列名 alter table person rename column sex to gerder; -- 删除列 delete table person drop column address; -- 修改表名 rename person to p;
⑤添加与删除外键约束语法
1 -- 添加外键语法 2 alter table t_student1 add constraint 外键名 foreign key(做为外键的列名) references t_class1(主键的列名); 3 -- Oracle 语法 4 alter table t_student1 drop constraint 外键名;
五、删除表
-- 删除表 drop table p;
六、约束
①表的五大约束:
②示例:
create table person( pid number primary key, pname varchar2(20) unique, age number not null, gender varchar2(10) check(gender in('男','女')) ); -- 报 ORA-02290: check constraint (ZHANSAN.SYS_C005421) violated 错 insert into person values(1,'zs',18,'妖');
/* 外键约束: 约束从表中记录必须是参考主表中的记录 商品表 -----> 分类表ID */ -- 分类表 create table category( cid number primary key, cname varchar2(20) ); -- 商品表 create table product( pid number primary key, pname varchar2(20), cno number );
-- 添加外键约束
alter table product add foreign key(cno) references category(cid);
insert into category values(1,'手机数码');
insert into product values(1,'锤子手机',1);
-- 强制删除category表(不建议使用)
-- 先解除外键约束,而后再删除本身
drop table category cascade constraint;
-- 级联删除
alter table product add foreign key(cno) references category(cid) on delete cascade;
insert into category values(1,'手机数码');
insert into category values(2,'鞋靴箱包');
insert into product values(1,'锤子手机',1);
insert into product values(2,'耐克跑鞋',2);
-- 级联删除:删除category 中的1号记录,级联删除
-- 删除主表中记录的时候,会先去删除从表中对应的记录,而后再删除主表中记录
delete from category where cid = 1;
(二)DML(详细请参考MySQL基本操做篇)
一、插入记录
-- 使用子查询插入记录 insert into emp select * from scott.emp where deptno=10;
二、更新记录
语法:
update 表名 set 列名 = 列的值 [where 条件]
三、删除记录
delete和truncate的区别:
delete | truncate |
逐条删除数据 | 先删除表而后再建立表 |
DML | DDL |
支持事务 | 不支持事务 |
删除数据能够回滚 | 不能回滚 |
删除全部记录,执行效率高 |
四、事务
①事务的概念:一组SQL操做,要么都成功,要么都失败。
②事务的特型:ACID
③若不考虑事务的隔离级别,会出现什么问题: 脏读, 不可重复读, 虚读/幻读
④隔离级别:
mysql:
Oracle:
⑤事务的保存点: savepoint 保存点的名称
事务回滚到保存点: rollback to 保存点
应用场景——数据迁移: 1000万条 1--50万设置保存点--100万 事务
示例:
create table louceng( lou number primary key ); BEGIN -- 业务层 INSERT INTO louceng VALUES(1) ; INSERT INTO louceng VALUES(2) ; INSERT INTO louceng VALUES(3) ; SAVEPOINT sanlou ; INSERT INTO louceng VALUES(4) ; INSERT INTO louceng VALUES(4) ; INSERT INTO louceng VALUES(5) ; COMMIT ; EXCEPTION -- 处理异常 WHEN others THEN ROLLBACK TO sanlou ; COMMIT; END ; select * from louceng;