Oracle数据库开发必备利器之SQL基础——约束
约束描述
定义规则,保证数据的完整;
约束分类
- 非空约束
- 检查约束
- 主键约束
- 外键约束
- 唯一约束
非空约束
在创建表时设置非空约束
语法:
CREATE TABLE table_name(
column_name datatype NOT NULL,...
);
在修改表时添加非空约束
语法:
ALTER TABLE table_name MODIFY column_name datatype NOT NULL;
注:添加非空约束的字段不能有null数据存在。可先删除表中的数据。DELETE FROMM table_name;
在修改表时去除非空约束
语法:
ALTER TABLE table_name MODIFY column_name datatype NULL;
主键约束
作用:确保表当中每一行数据的唯一性,非空
一张表只能设计一个主键约束
主键约束可以由多个字段构成(联合主键或复合主键)
创建表时设置主键约束(列级)
CREATE TABLE table_name(
column_name datatype PRIMARY KEY,...
)
创建表时设置主键约束(表级)
CONSTRAINT constraint_name
PRIMARY KEY(column_name1,...)
如果忘记了约束名字?
数据字典:user_constraints 可以查看某个表中的主键约束信息。desc user_constraints
查看约束名字:
表名要大写。
系统自动生成的约束名字:
修改表时添加主键约束
ALTER TABLE table_name
ADD CONSTRAINT constraint_name PRIMARY KEY(column_name1,...);
更改约束的名称
ALTER TABLE table_name
RENAME CONSTRAINT old_constraint_name TO new_constraint_name;
删除主键约束
禁用约束
ALTER TABLE table_name
DISABLE | ENABLE CONSTRAINT constraint_name
查看约束状态信息:
删除约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
还可以使用:
ALTER TABLE table_name DROP PRIMARY KEY [CASCADE];
[CASCADE]在级联操作中使用
外键约束
在创建表时设置外键约束(列级)
语法:
CREATE TABLE table1(
column_name datatype REFERENCES table2(column_name),...
);
其中table2为主表,table1为从表。
注意
(1)设置外键约束时,主表字段必须为该表的主键字段
(2)主从表中相应的字段必须是同一个数据类型
(3)从表中外键字段的值必须来自主表中相应字段的值,或者为null值
在创建表时设置外键约束(表级)
语法:
CREATE TABLE table_name(
column_name datatype,...,
CONSTRAINT constraint_name FOREIGN KEY(column_name)
REFERENCES table_name2(column_name)[ON DELETE CASCADE]
);
注意:
1、table_name2为主表名;
2、[ON DELETE CASCADE]表示级联删除的意思;
3、约束的名字也是唯一的。
在修改表时添加外键约束
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY(column_name)
REFERENCES table_name(column_name) [ON DELETE CASCADE]
禁用外键约束
查看约束
语法:
select constrain_name,constraint_type,status from user_constraints
where table_name='XXXX';
status P代表主键 R代表外键
语法:
ALTER TABLE table_name
DISABLE|ENABLE CONSTRAINT fk_name;(enable恢复使用)
删除外键约束
语法:
ALTER TABLE table_name DROP CONSTRAINT pk_name;
唯一约束
1、作用:保证设置唯一约束的字段值的唯一性
2、唯一约束与主键约束的区别:
(1)主键约束的字段为非空的,而唯一约束只允许有一个值为null
(2)一张表只能有一个主键约束,而唯一约束可以有多个
在创建表时设置唯一约束(列级)
语法:
CREATE TABLE table_name(column_name datatype UNIQUE,...);
在创建表时设置唯一约束(表级)
语法:
CREATE TABLE table_name(
column_name datatype,...,
CONSTRAINT u_name
UNIQUE(column_name)
);
注意:
(1)唯一约束的名称(u_name)必须唯一;
(2)如果想设置多个唯一约束字段,需要将子句(CONSTRAINT u_name UNIQUE(column_name))重复书写即可。
在修改表时添加唯一约束
语法:
ALTER TABLE table_name ADD CONSTRAINT u_name UNIQUE(column_name);
禁用唯一约束
语法:
ALTER TABLE table_name DISABLE|ENABLE CONSTRAINT u_name;
删除唯一约束
语法:
ALTER TABLE table_name DROP CONSTRAINT u_name;
检查约束
1、作用:让表中的值更具有实际意义。
注:检查约束在一张表中也是可以有多个的。
在创建表时设置检查约束(列级)
语法:
CREATE TABLE table_name(
column_name datatype CHECK(expressions),...
);
在创建表时设置检查约束(表级)
语法:
CREATE TABLE table_name(
column_name datatype,...,
CONSTRAINT c_name CHECK(expressions)
);
在修改表时添加检查约束
语法:
ALTER TABLE table_name ADD CONSTRAINT ck_name CHECK(expressions);
禁用检查约束
语法:
ALTER TABLE table_name DISABLE|ENABLE CONSTRAINT ck_name;
删除检查约束
语法:
ALTER TABLE table_name DROP CONSTRAINT ck_name;
约束小结
下一篇: Nginx笔记