(一)约束:oracle提供的自动保持数据库完整性的一种方法,他通过限制字段中数据,记录 中数据和表之间的数据来保证数据的完整性 (二)完整性约束语法格式: constraint constraint_name constraint_style 说明:约束不指定名称时,系统会给定一个名称 (三)oracle中约束的分类: (1)主键约束:定义表的主键,它是唯一确定表中每一条记录的标识符 特点:(1)唯一性,不能为null,不能重复,(以此来保证实体的完整性) (2)主键只能有一个,但可以由多个列构成 如:primary 可以(学号,科目编号) 例1:修改表结构,为表添加主键约束 创建学生信息表 create table student( sid number(8,0), name varchar2(20), sex char(2), birthday date, address varchar2(50) ); --修改表结构,为学生信息表添加主键约束 alter table student add constraint sid_pk primary key(sid); 例2:创建表时添加主键约束 --创建表时添加主键约束 (1)create table student( sid number(8,0) primary key, name varchar2(20), sex char(2), birthday date, address varchar2(50) ); (2)create table student( sid number(8,0), name varchar2(20), sex char(2), birthday date, address varchar2(50), constraint sid_pk primary key(sid) ); -------------------------------------------------------------------------------- Oracle的表操作--非空约束 (一)非空约束:确保列不能为空,当插入入数据时,必须为该列提供数据,更新数据市不能将其值设置为null 注:非空约束是列级约束 (1)列级约束语法格式:column constraint contraint_name constaint_type 说明:列级约束必须跟在列的定义后面 (2)表级约束语法格式:column,... constraint constraint_name constrain_type 说明:表级约束不与列一起,单独定义 非空约束训练 例1:修改表结构,添加非空约束 --创建学生信息表 (1)create table student( sid number(8,0) primary key, name varchar2(20), sex char(2), birthday date, address varchar2(50) ); (2)ALTER TABLE student modify (name varchar2(20) NOT NULL); ------------------------------------------------------------------------ 例2:创建表时添加非空约束 表级约束: 语法:constraint contraint_name constraint_type(colum_name) create table student( sid number(8,0), name varchar2(20) not null, sex char(2) constraint nn_sex not null, birthday date, address varchar2(50), constraint sid_pk primary key(sid) ); ------------------------------------------------------------------------ 例3:删除非空约束的方式 思路:将非空属性置空: alter......modify......null 语法:ALTER TABLE student modify 列名 数据类型 NULL(置空); ALTER TABLE student modify sex char(2) NULL; -------------------------------------------------------------------------- --禁用主键约束(无效化约束) 语法:alter......disable constraint constraint_name ALTER TABLE student disable CONSTRAINT sid_pk(约束名); --激活主键约束 语法:alter......enable constraint constraint_name ALTER TABLE student enable CONSTRAINT sid_pk(约束名); --删除主键约束(彻底删除) 语法:alter......drop constraint constraint_name 方法1:ALTER TABLE student DROP CONSTRAINT sid_pk(约束名); 方法2:ALTER TABLE student DROP PRIMARY KEY; (主键约束只有一个,所以也可如此操作) --------------------------------------------------------------------------------- oracle的表操作--唯一约束 (一)唯一性约束:指定一个或多个列的组合值具有唯一性,防止在列中输入重复的值 (二)唯一性特点: (1)唯一性约束的列允许为空 (2)一个表允许有多个唯一性约束 (3)可以把唯一性约束定义在多个列上, (如果是定义在多个列上,必须定义为表级约束) 例1:创建表时添加唯一性约束 --create table student ( -- sid number(8,0), -- name varchar2(20), -- sex char(2), -- birthday date, -- address varchar2(50), -- email varchar2(50) unique, -- cardid varchar2(18), -- constraint uk_cardid unique(cardid) --); ----------------------------------------------------------------------- 例2:修改表时添加唯一性约束 --创建学生信息表 --create table student ( -- sid number(8,0), -- name varchar2(20), -- sex char(2), -- birthday date, -- address varchar2(50), -- email varchar2(50) unique, -- cardid varchar2(18) --); --更改表结构,添加唯一性约束 --alter table student add constraint uk_student_cardid unique(cardid); -------------------------------------------------------------------------- --禁用约束 alter table student disable constraint uk_student_cardid; --彻底删除 alter table student drop constraint uk_student_cardid; ------------------------------------------------------------------------- Oracle的表操作--检查约束 检查约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性 --create table student ( -- sid number(8,0), -- name varchar2(20), -- sex char(2), -- birthday date, -- address varchar2(50) --); 例1:修改表添加检查约束的方式 --alter table student add constraint ck_sex check(sex='男' or sex='女'); --------------------------------------------------------------------------- 例2:创建表时设置检查约束的方式:(列级约束) -- create table student ( -- sid number(8,0), -- name varchar2(20), -- sex char(2) check(sex='男' or sex='女'), -- birthday date, -- address varchar2(50) --); ---------------------------------------------------------------------------- 例3:创建表时设置检查约束的方式:(表级约束) --create table student ( -- sid number(8,0), -- name varchar2(20), -- sex char(2), -- birthday date, -- address varchar2(50), -- constraint ck_sex check(sex='男' or sex='女') --); ---------------------------------------------------------------------------- --禁用约束 --alter table student disable constraint ck_sex; --彻底删除 alter table student drop constraint ck_sex; ----------------------------------------------------------------------------- 数据库表的操作--外键约束 (一)外键约束(foreign key):用来建立和加强两个表数据之间的链接的一列或多列,外键约束是唯一涉及两个表关系的约束 (二)语法格式: (三)实例 --主表 --create table department( -- depid varchar2(10) primary key, -- depname varchar2(30) --); --从表 --create table student ( -- sid number(8,0), -- name varchar2(20), -- sex char(2), -- birthday date, -- address varchar2(50), -- depid varchar2(10) --); --修改表时添加约束(外键约束) --alter table student add constraint fk_depid foreign key(depid) references department(depid) on delete cascade; --------------------------------------------------------------------------------- --创建列级约束 --create table student ( -- sid number(8,0), -- name varchar2(20), -- sex char(2), -- birthday date, -- address varchar2(50), -- depid varchar2(10) references department(depid) --); --------------------------------------------------------------------------- --创建表级约束 --create table student ( -- sid number(8,0), -- name varchar2(20), -- sex char(2), -- birthday date, -- address varchar2(50), -- depid varchar2(10), -- constraint fk_depid foreign key(depid) references department(depid) on delete cascade --); ---------------------------------------------------------------------------------- --禁用约束 --alter table student disable constraint fk_depid; --彻底删除 alter table student drop constraint fk_depid; -------------------------------------------------------------------------------- Oracle的表操作--事务 (一)事务:对数据库的若干操作组成的一个单元,这些操作要么都完成,要么都取消,从而保证数据满足一致性的要求 (二)事务的组成: 一条或多条DML(需要使用commit提交事务或使用rollback回滚事务) 一条DDL(自动提交事务) 一条DCL(自动提交事务) 当使用事务操作(DML语句)时,oracle会在被作用表上加表锁,防止其他用户改变表结构,同时会在被作用行上加上行锁,以防止其他事务在相应行上执行DML操作 (三)为什么要使用事务?(保证数据的安全有效) (四)事务的控制命令 (1)提交事务(commit) (2)通过commit语句可以提交事务,当执行了commit语句后,会确认事务的变化,结束事务,删除保存点,释放锁 (3)当使用commit语句结束事务之后,其他会话将可以查看到事务变化后的新数据 (4)回滚事务(rollback)savepoint (5)rollback只能对为提交的数据撤销,已经commit的数据是无法撤销的,因为commit之后已经持久化到数据库中 (6)保存点(savepoint)是事务中的一点,用于取消部分事务 (7)当结束事务时,会自动的删除该事务所定义的所有保存点 (8)当执行rollback时,通过指定保存点可以回退到指定的点 设置保存点:savepoint a; 回滚部分事务:rollback to a; 回滚全部事务:rollback; --update emp_bak set sal=6000 where empno=7369; --演示事务的三个语句(commit,savepoint,rollback)的作用 --delete from emp_bak where empno=7369; --commit; update emp_bak set sal=5555 where empno=7499; savepoint a; update emp_bak set sal=6666 where empno=7499; savepoint b; select * from emp_bak; rollback to a; rollback; -------------------------------------------------------------------------------- |
|