mysql中约束_mysql中约束

约束是用来限定表中数据准确性、完整性、一致性、联动性的一套规则。

约束是在表上强制执行的数据校验规则.

约束主要用于保证数据库的完整性。

当表中数据有相互依赖性时,可以保护相关的数据不被删除.

常见的约束类型

非空 not null

唯一性 unique

自增长 auto_increment

默认值 default

主键  primary key

外键 foreign key

约束 Check

约束作为数据库对象,存放在系统表中,也有自己的名字

创建约束的时机

在建表的同时创建

建表后创建(修改表)

可定义列级或表级约束

有单列约束和多列约束

非空约束

列级约束,只能使用列级约束语法定义。

NULL,字段允许为空。默认为NULL

NOT NULL,字段禁止为空。

所有数据类型的值都可以是NULL。

空字符串,0都不等于NULL。

CREATE TABLE stu2 (

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(18) NOT NULL

);

insert into tb (name) values ("abc");

唯一性

unique

唯一性约束条件确保所在的字段或者字段组合不出现重复值.

唯一约束可以是空值(NULL),且可以为多个null

每张表可以有多个唯一约束

唯一约束可由多列组合而成

建唯一约束时MySQL会为之建立对应的索引。

如果不给唯一约束起名,该唯一约束默认与列名相同

CREATE TABLE stu3 (

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(18) UNIQUE NOT NULL

)

自增长

auto_increment

自动编号,必须与主键组合使用

默认情况下,从1开始,每次增长为1

默认值

当插入记录时,如未给字段赋值,则自动赋予默认值

主键

primary key

主键从功能上看相当于非空且唯一

主键自动定义为非空约束

主键自动定义为唯一性约束

每张表最多只能有一个主键

主键字段可以是单字段或者是多字段的组合

当建立主键约束时, MySQL为主键创建对应的索引

主键约束名总为PRIMARY

CREATE TABLE stu4(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(18)

)

外键

foreign key

保证数据的一致性,完整性。

实现一对一或一对多的关系。

当前表内,指向其他表的主键的字段,称之为外键!

外键是构建于一个表的两个字段或者两个表的两个字段之间的关系

外键确保了相关的两个字段的两个关系:

子(从)表外键列的值必须在主表参照列值的范围内,或者为空(也

可以加非空约束,强制不允许为空)。

当主表的记录被子表参照时,主表记录不允许被删除。

外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录。

格式FOREIGN KEY (外键列名)REFERENCES 主表(参照列)

只有InnoDB类型的表才可以使用外键, mysql默认是

MyISAM,这种类型不支持外键约束.

程序设计时不要使用外键,在代码中控制两中的一至性。

CREATE TABLE tb_dept(

dept_id INT PRIMARY KEY,

NAME VARCHAR(18),

description VARCHAR(255)

);

CREATE TABLE tb_employee(

employee_id INT PRIMARY KEY,

NAME VARCHAR(18),

gender VARCHAR(10),

dept_id INT REFERENCES tb_dept(dept_id),

address VARCHAR(255)

);

Check 约束

既可作为列级约束,也可作为表级约束

定义在字段上的每一记录都要满足的条件

在check中定义检查的条件表达式,数据需要符合设置的条件

条件表达式不允许使用

–参照其他记录的值

CREATE TABLE tb_student(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(18),

age INT CHECK(age > 18 AND age < 60)

);

列级约束与表级约束

列级约束直接跟在列后定义,不再需要指定列名,与列定义之间用空格分开

表级约束通常放在所有的列定义之后定义,要显式指定对哪些列建立列级约束。与列定义之间采

用英语逗号,隔开。

如果是对多列建联合约束,只能使用表级约束语法

增加约束

可增加或删除约束,但不能直接修改

可使约束启用和禁用

非空约束必须使用MODIFY子句增加

只要是可以使用列级约束语法来定义的约束,都可以通过modify来增加该约束。

–ALTER TABLE table

–ADD [CONSTRAINT constraint] type

(column);

删除约束

约束可被删除,删除约束不会对数据产生影响

当删除被外键参照的主键时候,应该采用

CASCADE关键字来级联删除外键,否则无法删除主键

语法如下

–alter table 表名drop constraint 约束名

非空约束可以通过modify来增加非空约束,或删除非空约束

–增加: alter table 表名modify 列名not null

–删除: alter table 表名modify 列名null

但add constraint 的用法不能用来增加非空约束

可以采用drop constraint 约束名的用法来删除非空约束

欢迎关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值