【数据库篇3】MySQL约束

约束是作为一种防止往数据表中插入错误的数据,维护数据完整性的规则


MySQL定义了六种约束

主键约束,唯一约束,自增,非空约束,默认值,外键约束


主键约束

关键字

PRIMARY KEY

设置方式

   建表时添加

CREATE TABLE manage(

PID int(4) not null AUTO_INCREMENT PRIMARY KEY,

--其他字段定义

)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

//--------------------------------------------------------------------------------

CREATE TABLE manage(

PID int(4) not null AUTO_INCREMENT,
Sname varchar(30) not null,

--其他字段定义

PRIMARY KEY(PID,Sname)  //复合主键

)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

   修改表

ALTER TABLE manage ADD PRIMARY KEY(PID);

ALTER TABLE manage ADD PRIMARY KEY(PID,Sname); //或复合主键

特点

保证主键数据唯一,且不可为空,一个表只能有一个主键,可以是复合主键,复合主键保证联合数据不重复(只要有一个字段不重复就可以)



唯一约束

关键字

UNIQUE

设置方式

   建表时添加

CREATE TABLE manage(

PID int(4) not null AUTO_INCREMENT PRIMARY KEY,

Sname varchar(30) UNIQUE,

--其他字段定义

)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

//--------------------------------------------------------------------------------

CREATE TABLE manage(

PID int(4) not null AUTO_INCREMENT,
Sname varchar(30) not null,

--其他字段定义

PRIMARY KEY(PID),

UNIQUE(Sname)

)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

   修改表

ALTER TABLE manage ADD UNIQUE(Sage);

特点

数据不能重复, 可以为null(允许多个null数据),UNIQUE约束可以有多个。



自增

关键字

AUTO_INCREMENT

设置方式

  建表时添加

如上

  修改表

ALTER TABLE manage MODIFY PID int AUTO_INCREMENT;

特点

只能作用于主键字段或复合主键中第一个字段,数据升序保存。


非空约束

关键字

not null

特点

约束该字段是否允许null值


默认值约束

关键字

default 

设置方式

CREATE TABLE manage(

Sex enum('女','男') DEFAULT '女' not null,
Signon_at datetime DEFAULT CURRENT_TIMESTAMP

-- 其他字段定义

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

特点

默认值约束将自动填充默认数据


外键约束

MYSQL有两种常用的存储引擎类型:MyISAM和InnoDB,目前只有InnoDB引擎类型支持外键约束

关键字

CONSTRAINT 给外键取名,可以省略,默认外键字段名

FOREIGN KEY(外键字段)

REFERENCES 主表(主键) 不可省略

设置方式

 建表时添加

CREATE TABLE book(
PID int not null,

CONSTRAINT book_manage FOREIGN KEY(PID) REFERENCES manage(PID)

-- 其他字段定义

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

 修改表时

ALTER TABLE book ADD CONSTRAINT book_manage FOREIGN KEY(PID) REFERENCES manage(PID)

特点

保证多个表引用完整性,注意,外键和主键必须具有相同的数据类型,子表和主表必须都是InnoDB表。

外键约束动作

解释一下四种动作

CASCADE :子表和主表做出相同的动作

NO ACTION :主表试图更新和删除,但是子表不做出反应(可以认为子表不准主表动),导致主表更新或删除数据失败

                         适用场景:当用户存在订单信息时,不允许修改用户的关键信息以及删除用户(防止误删)。

RESTRICT:和NO ACTION作用一样,拒绝主表更新和删除数据(默认动作)

SET NULL:主表更新或删除数据时,子表将数据置NULL

                     适用场景:比如用户注销自己的账户,默认放弃该用户的订单。

设置方式(建表时(这里就略过吧),修改表)

ALTER TABLE book ADD 
CONSTRAINT book_manage 
FOREIGN KEY(PID) 
REFERENCES manage(PID)
ON DELETE CASCADE   --或其他三种动作
ON UPDATE CASCADE   --或其他三种动作

简单演示一下CASCADE

manage准备数据,看一下建立PID外键约束的book,可以看到book中PID只允许插入1,2,3的数据

然后我们试图更新manage中PID为2的数据,将其改为4,可以发现book中PID为2的数据也被修改为4

然后我们尝试删除manage中PID为4的数据行记录,可以发现book表中PID为4的数据也被删除了

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值