• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

深入浅析MySQL中常见的6种约束类型

mysql 搞代码 4年前 (2022-01-09) 13次浏览 已收录 0个评论

约束的字面意思就是规定或者限制某个事该如何去做,在MySQL中,约束就是对数据表中数据指定规则,也就是对数据进行限制,以此来确保可靠性,比如不允许某列出现Null值,实际中我们会遇到以下类型的约束。

  • NOT NULL : 确保列不能有NULL值
  • CHECK : 确保列中的值满足特定条件
  • UNIQUE : 确保一列中的所有值都不同
  • PRIMARY KEYNOT NULLUNIQUE组合,唯一标识表中的每一行
  • FOREIGN KEY : 外键约束
  • DEFAULT : 如果未指定值,则为列设置默认值

【相关推荐:mysql视频教程】

约束

1.NULL

MySQL中通过使用NOT NULL来1源gaodai#ma#com搞*代#码1网确保列中不会出现Null值,创建表时候格式如下:

mysql> create table user(name varchar(255)not null);
Query OK, 0 rows affected (0.06 sec)

如果试图插入一个null值,则会抛出异常。

mysql> insert user values(null);
ERROR 1048 (23000): Column 'name' cannot be null

或者在现有表上新增NOT NULL约束。

mysql> alter table user modify name varchar(255) not null;
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

删除NOT NULL约束。

mysql> alter table user modify name varchar(255)  null;
Query OK, 0 rows affected (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 0

2.CHECK

如果想在列上定义条件约束,可以使用CHECK,比如下面,强制让年龄字段大于18,小于80,否则将会报错。

mysql> create table user(age int(11) check(age>18 and age <80));
Query OK, 0 rows affected, 1 warning (0.06 sec)

插入测试,可以发现9、81在插入的时候抛出异常。

mysql> insert user values(9);
ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated.

mysql> insert user values(19);
Query OK, 1 row affected (0.01 sec)

mysql> insert user values(81);
ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated.
mysql>

也可以进行多列约束,如年龄必须大于18,城市必须为中国。

mysql> create table user(age int(11),city varchar(255) ,check(age>18 and city='中国'));
Query OK, 0 rows affected, 1 warning (0.05 sec)

插入测试。

mysql> insert user values(81,'2');
ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated.
mysql> insert user values(8,'2');
ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated.
mysql> insert user values(20,'2');
ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated.
mysql> insert user values(20,'中国');
Query OK, 1 row affected (0.01 sec)

mysql> insert user values(20,'中国1');
ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated.
mysql> insert user values(85,'中国');
Query OK, 1 row affected (0.01 sec)

mysql> insert user values(9,'中国');
ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated.

还可以让列值必须在指定集合中,如性别必须在男、女、未知、人妖集合中。

mysql> create table user(sex varchar(255) check (sex in ('男','女','未知','人妖')));
Query OK, 0 rows affected (0.05 sec)

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:深入浅析MySQL中常见的6种约束类型

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址