DDL语句(五) -- 约束

一、常见约束

NOT NULL:非空,该字段的值必填

UNIQUE:唯一,该字段的值不可重复

DEFAULT:默认,该字段的值当没有插入时有默认值

CHECK:检查,mysql 不支持

PRIMARY KEY:主键,该字段的值不可重复并且非空   UNIQUE + NOT NULL

FOREIGN KEY:外键,该字段的值引用了另外的表的字段

主键约束和唯一约束 

1、区别

① 一个表至多有一个主键约束,但可以有多个唯一约束

② 主键约束不允许为空 ,唯一约束可以为空

2、相同点

都具有唯一性

都支持组合键,但不推荐

外键:

1、用于限制两个表的关系,从表的字段值引用了主表的某字段值;

2、外键列和主表的被引用列要求类型一致,意义一样,名称无要求;

3、主表的被引用列要求时一个 key(一般就是主键);

4、插入数据时,先在主表中插入,再在从表中插入

 删除数据是,先从从表中删除数据,再从主表中删除数据。

可以通过以下两种方式来删除主表的记录

方式一:级联删除

ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(maiorid) REFERENCES major(id) ON DELETE CASCADE;

方式二:级联置空

ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(maiorid) REFERENCES major(id) ON DELETE SET NULL;

二、创建表时添加约束

CREATE TABLE 表名(
  字段名 字段类型 PRIMARY KEY, #主键约束
  字段名 字段类型 NOT NULL, #非空约束
  字段名 字段类型 UNIQUE, #唯一约束
  字段名 字段类型 DEFAULT 值, #默认约束
  字段名 字段类型,
  CONSTRAINT 约束名 FOREIGN KEY(字段名) REFERENCES 主表(被引用列)
)

注意:

      支持类型          约束名

列级约束  除了主键约束        可以重新设置

表级约束  除了非空约束和默认约束   可以重新设置,但对主键约束无效

列级约束可以在一个字段上追加多个,中间用空格隔开,没有顺序要求

三、修改表时添加或删除约束

1、非空约束

添加非空约束

ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型  NOT NULL;

删除非空约束

ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 ;

2、默认约束

添加默认约束

ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 DEFAULT 值;

删除默认约束

ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 ;

3、主键约束

添加主键约束

ALTER TABLE 表名 ADD 【CONSTRAINT 自定义的约束名称】 PRIMARY KEY(字段名);

删除主键约束

ALTER TABLE 表名 DROP PRIMARY KEY;

4、唯一约束

添加唯一约束

ALTER TABLE 表名MODIFY COLUMN UNIQUE(字段名);

删除主键唯一约束

ALTER TABLE 表名 DROP INDEX 索引名;

5、外键约束

添加外键约束

ALTER TABLE 表名 ADD  【CONSTRAINT 自定义的约束名称】 CONSTRAINT (字段名) REFERENCES 主表(被引用列); 

删除外键约束

ALTER TABLE 表名DROP FOREIGN KEY 自定义的约束名称;

猜你喜欢

转载自www.cnblogs.com/xifengbuqi/p/9219063.html