快捷搜索:
来自 网络数据库 2019-06-20 08:31 的文章
当前位置: 67677新澳门手机版 > 网络数据库 > 正文

DDL之常见的约束

一、 约束的含义和分类
1.1约束的含义:是一种限制,用于限制表中的数据,保证数据的完整性和一致性。
1.2约束的分类:
①not null:非空,保证字段不能为空。违反约束不会报错,但是会有警告,适用于说有的类型。
②default:默认约束,当数据插入的时候,指定的字段如果没有数据插入,即插入默认值。
③primary key:主键,保证字段具有唯一性,并且非空,等价于唯一 非空的组合。
④unique:唯一,用于保证字段的唯一性,可以为空。
⑤check:检查约束,mysql不支持。
⑥foreign key:外键约束,用于约束两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。在从表的添加的外键约束,用于引用主表中某列的值。
1.3添加约束
列级约束:语法上六大约束都支持,但是外键约束没有效果。【mysql不支持检查约束】
表级约束:除了非空和默认,其他都支持。
添加时机:创建表时、修改表时。
二、 唯一约束和主键约束比较、外键解析
1.主键唯一键的比较
图片 1
2.外键解析
①在从表设置外键关系
②从表的外键列的类型和主表的关联列类型要求一致或者兼容
③主表的关联列必须是一个key,主键或者是唯一键
④插入数据的时候,先插入主表,然后插入从表
⑤删除数据的时候,先删除从表,再删除主表
三、 创建表时添加约束
语法概述:
Create table 表名(
字段名 字段类型 列级约束,
字段名 字段类型,
表级约束
)
1.添加列级约束
①在字段类型之后直接添加,可以有多个直接加空格隔开
②支持:默认、主键、唯一、非空
图片 2
图片 3
列级约束不能将外键约束添加成功。
2.添加表级约束
【constraint 约束名】 添加约束名字,是可选的。
图片 4
图片 5
图片 6
①主键的命名失效,主键名字只能是primary
②外键添加成功,别名也成功添加
③check 检查约束,mysql不支持
3.约束的通用写法
图片 7
图片 8
四、修改表时添加约束
1.添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束
2.添加表级约束a
alter table 表名 add [constraint 约束名] 约束类型(字段名) [外键的引用]
图片 9
图片 10
图片 11
[1]添加非空约束
alter table userchen modify column userchen varchar(20) not null;
图片 12
[2]添加默认约束
图片 13
[3]添加主键
图片 14
[4]添加唯一约束
图片 15
[5]添加外键【表级约束】
图片 16
五、删除约束
[1]删除非空约束
图片 17
[2]删除默认约束
图片 18
[3]删除主键
图片 19
[4]删除唯一键
图片 20
[5]删除外键
图片 21
六、级联删除
图片 22
图片 23
情况一、当删除父类数据时,对应从表的数据也将被删除
图片 24
图片 25
情况二、级联删除置null
图片 26
图片 27

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

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

DEFAULT:默认,该字段的值不用手动插入有默认值

PRIMARY KEY:主键,该字段的值不可重复并且非空 unique not null

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

1、区别:

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

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

2、相同点

都具有唯一性

都支持组合键,但不推荐

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

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

3、主表的被引用列要求是一个key

4、插入数据,先插入主表

5、删除数据,先删除从表

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

#方式一:级联删除

ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY REFERENCES major ON DELETE CASCADE;

#方式二:级联置空

ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY REFERENCES major ON DELETE SET NULL;

create table 表名(

字段名 字段类型 not null,#非空

字段名 字段类型 primary key,#主键

字段名 字段类型 unique,#唯一

字段名 字段类型 default 值,#默认

constraint 约束名 foreign key references 主表

);

注意:

列级约束: 除了外键其他类型都支持,不可以起约束名;

表级约束:除了非空和默认其他类型都支持,可以起约束名,但对主键无效。

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

添加非空

alter table 表名 modify column 字段名 字段类型 not null;

删除非空

alter table 表名 modify column 字段名 字段类型 ;

添加默认

alter table 表名 modify column 字段名 字段类型 default 值;

删除默认

alter table 表名 modify column 字段名 字段类型 ;

添加主键

alter table 表名 add【 constraint 约束名】 primary key;

删除主键

alter table 表名 drop primary key;

添加唯一

alter table 表名 add【 constraint 约束名】 unique;

删除唯一

alter table 表名 drop index 索引名;

添加外键

alter table 表名 add【 constraint 约束名】 foreign key references 主表;

删除外键

alter table 表名 drop foreign key 约束名;

特点:

图片 28

1、不用手动插入值,可以自动提供序列值,默认从1开始,步长为1

auto_increment_increment

如果要更改起始值:手动插入值

本文由67677新澳门手机版发布于网络数据库,转载请注明出处:DDL之常见的约束

关键词: