MySQL怎么使用check约束


当前第2页 返回上一页

比如性别字段可以这样设置,插入枚举值以外值的操作将不被允许。

1

2

3

4

5

6

7

8

9

10

CREATE TABLE `Student` (

  `Sno` char(8) NOT NULL,

  `Sname` varchar(10) NOT NULL,

  `Sex` enum('男','女') NOT NULL DEFAULT '男',

  `Age` tinyint(4) NOT NULL DEFAULT '20',

  `Phonenumber` char(12) DEFAULT NULL,

  `Sdept` varchar(20) NOT NULL,

  PRIMARY KEY (`Sno`),

  UNIQUE KEY `Phonenumber` (`Phonenumber`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、如果需要设置CHECK约束的字段范围大,且列举全部值比较困难,比如整数或者某一区间,那就只能使用触发器来代替约束实现数据的有效性了。

1

2

3

4

5

6

DELIMITER $

create trigger studentcheck before insert on Student for each row

begin

if new.Age<15 or new.Age>30 then set new.Age=20;end if;

end $

DELIMITER ;

测试:

1

2

3

4

5

6

7

8

9

10

11

12

13

mysql> insert into Student(Sno,Sname,Sex,Age,Phonenumber,Sdept) values('5','Joe','m',0,'12345243912','CS');

ERROR 1265 (01000): Data truncated for column 'Sex' at row 1

mysql> insert into Student(Sno,Sname,Sex,Age,Phonenumber,Sdept) values('5','Joe','男',0,'12345243912','CS');

Query OK, 1 row affected (0.00 sec)

 

mysql> select * from Student;

+-----+-------+-----+-----+-------------+-------+

| Sno | Sname | Sex | Age | Phonenumber | Sdept |

+-----+-------+-----+-----+-------------+-------+

| 4   | nancy | m   |   0 | 12345243965 | CS    |

| 5   | Joe   | 男  |  20 | 12345243912 | CS    |

+-----+-------+-----+-----+-------------+-------+

2 rows in set (0.00 sec)

可以看出,现在Sex必须在“男”和“女”中选择,否则插入失败;当年龄不合规范时,由于触发器的存在,会将其自动设置为默认的20。

由此可以解决check约束无效的问题。

以上就是MySQL怎么使用check约束的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

mysql基础教程mysql5.7.18安装和连接

mysql中有哪些函数

详解mysql8.0&#8203; 字典表增强

mysql多表联合查询

mysql如何在cmd登录

对于mysql在保存时间信息上的建议

phpmyadmin #1045错误无法登录mysql服务器怎么办?

mysql子查询的使用详解上篇

mysql访问控制系统入门

mysql中修改存储过程的命令是什么?

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...