为了使我们的数据符合一定的规则
约束有五种类型,主键约束,外键约束,非空约束,唯一性约束,检查约束
约束有两种定义方法:第一种是在定义列的时候定义约束,叫做列级定义。
第二种是所有列全部定义完后,在定义约束,该约束叫做表级定义(注意 not null只能在列级中定义),对于多个属性构成的码只能使用表级定义此约束
非空约束 NN_表名_列名
唯一约束 UK_表名_列名
主键约束 PK_表名
外键约束 FK_表名_列名
条件约束 CK_表名_列名
默认约束 DF_表名_列名
定义了非空约束后,插入数据的时候此列不能为空
列级语法格式:
create table table_name(column data_type not null,.............);
增加:create table table_name modify column not null;
定义了唯一性约束后,此列的值不能重复,但是可以为空
列级语法格式:
create table table_name(column data_type constraint constrint_name(约束名) unique,.............);
增加约束:alter table table_name add constrint constraint(约束名) unique(列名);
表级定义:create table table_name(column data_type,.............,constrint constraint(约束名) unique(列名));
定义该列符合某种规则
列级语法格式:
create table table_name(column data_type constraint constrint_name(约束名) check(规则 ),.............);
增加约束:alter table table_name add constrint constraint(约束名) check(规则);
表级定义:create table table_name(column data_type,.............,constraint constrint_name(约束名) check(列名 规则));
唯一的表示一行数据,定义了主键约束后,改行不能为空,也不能重复
列级定义语法格式:create table table_name(column data_type constraint constrint_name(约束名) primary key,.............);
增加约束:alter table table_name add constrint constraint(约束名) primary key;
表级定义:create table table_name(column data_type,.............,constraint constrint_name(约束名) primary key(列名));
用于定义主表和从表之间的关系,外键约束定义在从表上,对应的在主表上必须有主键约束或unique约束
在定义外键约束后,要求外键约束的列必须在主表的主键列存在或者为null
列级定义语法格式:create table table_name(column data_type constraint constrint_name(约束名)foreign key (从表 从表的主键名)references (主表,主表的主键),.............);
增加约束:alter table table_name add constrint constraint(约束名) foreign key (主表 主表的主键名);
表级定义:create table table_name(column data_type ,.............,constraint constrint_name(约束名)foreign key (主表 主表的主键名)references (主表,主表的主键));
1.如果在设置外键时没有加 on delete set null 或者on delete cascade ,那么删除有被从表中引用的主表中的数据时,将无法删除该数据。
2.在设置外键时加上on delete cascade,就可以之间删除主表中的数据,并且从表中的数据也一块删除
3.在设置外键时加上on delete set null,就可以之间删除主表中的数据,从表中的此项数据被置为空值
直接查询 user_constraints就可以看到有哪些约束
语法格式;
SELECT owner,constraint_name,table_name FROM user_constraints;这个约束只告诉了名字,而并没有告诉在哪个字段上有此约束,这就需要查看另外一张数据字典表“user_cons_columns”;
语法格式;
SELECT owner,constraint_name,table_name,column_name FROM user_cons_columns;
alter table table_name drop constraint 约束名