事务处理语言(TCL)
1 什么是事务
指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
2 什么是事务特性
2.1 原子性(ATOMICITY)
事务中的操作要么都不做,要么就全做。
2.2 一致性(CONSISTENCY) 一个事务应该保护所有定义在数据上的不变的属性(例如完整性约束)。在完成了一个
成功的事务时,数据应处于一致的状态。
2.3 隔离性(ISOLATION) 一个事务的执行不能被其他事务干扰。
2.4 持久性(DURABILITY) 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
3 使用事务
commit.....事物提交
rollback....事物回滚
savepoint..设置回滚点
3.1 事务类型
3.1.1 显式事务
需要我们手动的提交或回滚。
DML 语言中的所有操作都是显示事务操作。
3.1.2 隐式事务
数据库自动提交不需要我们做任何处理,同时也不具备回滚性。
DDL、DCL 语言都是隐式事务操作
3.2 事务提交
Commit
当我们执行了一个 DML 语言后,此时的数据并不会持久化到数据文件中。需要使用
commit 来确认提交。
3.3 事务回滚
Rollback
当我们执行了一个 DML 语言后,也可以使用 rollback 来撤销当前对表的操作。
3.4 设置回滚点
Savepoint
Rollback to
九、 数据定义语言(DDL)
create.....创建数据库对象
drop.......删除数据库对象
arter......修改数据库对象
rename.....修改数据库对象名称
1 创建表(CREATE TABLE)
1.1 示例
create table dept(deptno NUMBER(2),dname
VARCHAR2(14),loc VARCHAR2(13));
1.2Oracle 数据库中的表
• 用户表:
– 由用户创建和维护的表的集合。
– 包含用户信息。
• 数据字典:
– 由 Oracle 服务器创建和维护的表的集合。
– 包含数据库信息。
1.2.1 常见的数据字典表
1.3 用查询创建表
1.3.1 示例
create table dept80 as select
employee_id,last_name name,salary,hire_date
from employees e where e.department_id = 80;
2 修改表(ALTER TABLE)
ALTER TABLE 语句可以修改表的信息。
• 添加一个新列
• 修改一个已存在的列
• 删除一个列
2.1 添加一个新的列
2.1.1 示例
alter table dept add(salary number(8,2));
2.2 修改一个列
2.2.1 示例一
修改数据类型
alter table dept modify(dname varchar2(40));
2.2.2 示例二
修改默认值
alter table dept modify(salary number(8,2)default 1000);
alter table dept modify(salary number(8,2) default null);
2.2.3 示例三
修改列名
alter table dept rename column dname to name;
2.3 删除一个列
2.3.1 示例
alter table dept drop column salary;
3 修改名称(RENAME)
3.1 示例
rename dept80 to dept90;
4 截断表(TRUNCATE TABLE)
特点:
删除表中的所有的数据,但是保留表结
构。在截断表时不能给定条件截断表时隐
式事务。
4.1 示例
truncate table dept90;
5 删除表(DROP TABLE)
5.1 示例
drop table dept90;
定义约束
1 数据库中的约束类型
非空约束(NOT NULL)
唯一性约束(UNIQUE)
主键约束(PRIMARY KEY)
外键约束(FOREIGN KEY)
用户自定义约束(CHECK)
约束 | 说明 |
---|---|
not null | 指定列不能包含空值 |
unique | 指定列的值或者列的组合的值对于表中所有的行必须是唯一的 |
primary key | 表的每行的唯一性标识 |
foreign key | 在列和引用表的一个列之间建立并强制一个外键关系 |
check | 指定一个必须为真的条件 |
1.1 定义约束原则
创建一个约束:在创建表的同时,或者在创建表之后都可以定义约束。可以给约束起名字,但是约束名不能相同,必须是唯一的。如果没有为约束起名字,Oracle 服务器将用默认格式 SYS_Cn 产生一个名字,这里 n 是一个唯一的整数,所以约束名是唯一的。
2 定义 NOT NULL 约束
2.1 创建表时定义 NOT NULL 约束
2.1.1 示例
create table dept80(id number,name varchar2(20) not null, salary number
constraint dept80_notn not null);
2.2 修改表定义 NOT NULL 约束
2.2.1 示例
alter table dept80 modify id not null;
3 定义 UNIQUE 约束
3.1 创建表时定义 UNIQUE 约束
3.1.1 示例
create table dept90(id number constraint
dept90_uk unique,name varchar2(20));
3.2 修改表定义 UNIQUE 约束
3.2.1 示例
alter table dept90 modify(name unique);
4 定义 PRIMARY KEY 约束
4.1 创建表时定义 PRIMARY KEY 约束
4.1.1 示例
create table dept70(id number
constraint dept70_pk primary key, name varchar2(20));
4.2 修改表定义 PRIMARY KEY 约束
4.2.1 示例
alter table dept60 modify(id constraint
dept60_pk primary key);
4.3 创建联合主键
4.3.1 示例
create table dept50(id number,name
varchar2(20),constraint dept50_pk primary
key(id,name));
5 定义 FOREIGN KEY 约束
5.1 创建表时定义 FOREIGN KEY
5.1.1 示例
create table dept40(id number,d_id
number,constraint dept40_fk foreign
key(d_id) references dept60(id));
5.2 修改表定义 FOREIGN KEY
5.2.1 示例
alter table dept50 add constraint
dept50_fk foreign key(id) references
dept60(id);
6 定义 CHECK 约束
6.1 创建表时定义 CHECK 约束
6.1.1 示例
create table dept30(id number,salary
number(8,2) constraint dept30_ck check
(salary > 1000));
6.2 修改表定义 CHECK 约束
6.2.1 示例
alter table dept50 add salary number(2,8) constraint
dept50_ck check(salary > 1000);
7 禁用与启用约束
7.1 查看约束
7.1.1 示例
select constraint_name,constraint_type,search_condition
from user_constraints where
table_name = 'DEPT40';
7.2 禁用约束
7.2.1 示例
alter table dept40 disable constraint
dept40_fk;
级联禁用
alter table dept60 disable constraint
dept60_pk cascade;
7.3 启用约束
7.3.1 示例
alter table dept40 enable constraint
dept40_fk;