目录
1.数据完整性约束作用
2.数据完整性约束的分类
3.完整性约束的状态
4.域完整性的实现
(1)check约束
①可视化方式创建check约束
②命令方式创建约束
③修改表创建的约束
④删除约束
(2)实体完整性约束实现
①primary key和unique的区别
②primary key和unique的相同点
③可视化方式创建主键和唯一性约束
④命令方式创建主键与唯一性约束
⑤修改创建的约束
⑥删除约束
(3)参照完整性约束
①创建foreign key时考虑的因素
②可视化方式创建参照关系
③命令方式创建参照
④修改外键约束
⑤删除表之间的参照关系
Oracle数据库中索引的基本使用
Oracle学习的相关知识点(汇总)
1.数据完整性约束作用
- 在数据应用的代码中增强了商业规则;
- 使用存储过程,可完整控制对数据的访问;
- 增强了触发存储数据库过程的商业规则;
2.数据完整性约束的分类
- 域完整性约束(或者列完成性)
- 指的是一个数据集对某一列是否有效和确定是否允许空值;如使用check限制某一列的值只能在某一个范围内
- 实体完整性(行完整性)
- 要求表中每一行都有一个唯一的标识符;如主键约束
- 参照完整性(引用完整性)
- 保证主表与从表(被参照表)之间中数据的一致性;如建立主键和外键
- 参照完整性的要求
- 从表中不能引用不存在的键值
- 如果主表中的键值更改了,那么在整个数据库中,对从表中该键值的所有引用都要进行一致性更改
- 如果主表中没有关联的记录,则不能将记录添加到从表中
- 如果要删除主表中的某一条记录,应该先删除从表中与该记录匹配的相关记录。
- 参照完整性的要求
- 保证主表与从表(被参照表)之间中数据的一致性;如建立主键和外键
- 完整性约束是通过限制列数据,行数据和表之间数据来保证数据完整性的有效方法,约束是保证完整性的标准方法,每一种数据完整性都由不同的约束类型来保证,约束能确保有效的数据输入到列中并维护表与表之间的关系。
3.完整性约束的状态
- 禁止的非校验状态:该约束不起作用,但是依然存在数据字典中;
- 禁止的校验状态:对约束列的任何修改都是禁止的。
- 允许的非校验状态或者强制状态:可以向表中添加数据,但是与约束有冲突的数据不能添加;
- 允许的校验状态:约束处于正常的状态。
4.域完整性的实现
(1)check约束
①可视化方式创建check约束
②命令方式创建约束
CREATE TABLE <表名>
( <列名> <数据类型> [DEFAULT <默认值>] [NOT NULL | NULL]
[CONSTRAINT <CHECK约束名>] CHECK(<CHECK约束表达式>) /*定义为列的约束*/
[,…n]
[CONSTRAINT <CHECK约束名>] CHECK(<CHECK约束表达式>) /*定义为表的约束*/
)
- 说明:
- CONSTRAINT关键字用于为CHECK约束定义一个名称,如果省略则系统自动为其定义一个名称。
- CHECK表示定义CHECK约束,其后表达式为逻辑表达式,称为CHECK约束表达式。如果直接在某列的定义后 面定义CHECK约束,则CHECK约束表达式中只能引用该列,不能引用其他列。如果需要引用不同的列,则必 须在所有的列定义完之后再定义CHECK约束。
例如:创建一个表demo,并且为该表的属性score创建一个check约束条件。
create table demo(
sid VARCHAR(20) NOT NULL ,
sname VARCHAR(20) NOT NULL,
profession VARCHAR(20) NOT NULL,
score NUMBER(4) check(score>60 and score<80) NOT NULL
);
③修改表创建的约束
ALTER TABLE <表名>
ADD( CONSTRAINT <CHECK约束名> CHECK(<CHECK约束表达式>))
④删除约束
ALTER TABLE <表名>
DROP CONSTRAINT <CHECK约束
(2)实体完整性约束实现
- 一个表只能有一个primary key(主键)约束,而且primary key约束中的列不能取空值。
- primary key约束是由多列组合定义的,则某一列的值可以重复,但是primary key约束定义中所有列的组合值必须唯一。
- 如果要确保一个表中的非主键列不输入重复值,则在该列上定义一个唯一约束(UNIQUE)。
①primary key和unique的区别
- 一个表只能创建一个primary key约束,但是可以根据需要对不同的列创建若干个unique约束。
- primary key字段的值不能为NULL,而unique字段的值可以为NULL。
②primary key和unique的相同点
- 它们都不允许表中对应字段存在重复值。
- 在创建primary key和unique约束时都会自动产生索引。
③可视化方式创建主键和唯一性约束
④命令方式创建主键与唯一性约束
CREATE TABLE <表名> /*指定表名*/
(<列名> <数据类型> [NULL |NOT NULL] /*定义字段*/
{[CONSTRAINT <约束名>] /*定义约束名*/
PRIMARY KEY | UNIQUE } /*定义约束类型*/
[,…n]
[, [CONSTRAINT <约束名>] {PRIMARY KEY | UNIQUE}(<列名>,[,…n]) ]]
)
例:1:为表deptments创建主键约束。
例子2:位表student创建unique约束。
create table student(
sid VARCHAR(20) NOT NULL constraint demo02 primary key,
status VARCHAR(20) NOT NULL constraint stdemo02 UNIQUE,
sname VARCHAR(20) NOT NULL,
profession VARCHAR(20) NOT NULL,
score NUMBER(4)
);
⑤修改创建的约束
ALTER TABLE <表名>
ADD([CONSTRAINT <约束名>] {PRIMARY KEY | UNIQUE} (<列名>[,…n])
例子:为表deptments表的deptname创建一个唯一性约束。
⑥删除约束
ALTER TABLE <表名>
DROP CONSTRAINT <约束名>[,…n]
(3)参照完整性约束
对于两个相关联的表(主表与从表)进行数据插入和删除时,通过参照完整性保证它们之间的数据一致性。主要使用foreign key定义从表外键,primary key定义主表主键,实现主表和从表之间的关联。
①创建foreign key时考虑的因素
- 删除主表之前,必须删除从表(foreign key)约束;
- 如果不删除或者禁止foreign key约束,则不能删除主表;
- 删除包含主表的表空间之前,必须删除foreign key约束。
②可视化方式创建参照关系
③命令方式创建参照
CREATE TABLE <从表名>
( <列定义> [ CONSTRAINT <约束名> ] REFERENCES <主表名>[ ( <列名> [ ,...n ] ) ]
[,…n]
[ [ CONSTRAINT <约束名> ] [ FOREIGN KEY ( <列名> [,...n ] ) [<参照表达式>]]
);
<参照表达式>::=
REFERENCES <主表名>[ ( <列名> [ ,...n ] ) ]
[ ON DELETE { CASCADE | SET NULL }
例子1:为表Employee中的deptmentid建立外键 (参照表deptments为表employee建立外键)
例子2:当删除表CJB中的记录时,同时删除XSB表中的记录。
create table XSB(
sid VARCHAR(20) NOT NULL constraint demo02 primary key,
status VARCHAR(20) NOT NULL constraint stdemo02 UNIQUE,
sname VARCHAR(20) NOT NULL,
profession VARCHAR(20) NOT NULL,
score NUMBER(4),
constraint fk_xsb FOREIGN key(sid) reference cjb(sid)
on delete cascade
);
④修改外键约束
ALTER TABLE <表名>
ADD CONSTRAINT <约束名>
FOREIGN KEY( <列名>[,…n])
REFERENCES <主表名>(<列名>[,…n]) <参照表达式>
例子:假设XSCJ数据库中的KCB表为主表,KCB的“课程号”字段已定义为主键。CJB表为从表,如下示 例用于将CJB的“课程号”字段定义为外键。
ALTER TABLE CJB
ADD CONSTRAINT FK_KC FOREIGN KEY(课程号)
REFERENCES KCB(课程号)
⑤删除表之间的参照关系
删除表间的参照关系,实际上删除从表的外键约束即可。
ALTER TABLE <从表名>
DROP CONSTRAINT <约束名>
例子:删除以上对“CJB.课程号”字段定义的FK_KC外键约束。
ALTER TABLE CJB
DROP CONSTRAINT FK