时间:2021-07-01 10:21:17 帮助过:607人阅读
在一些情况下,我们需要字段在指定范围的输入,
例如:性别只能输入 '男'或者'女',余额只能大于0等条件,
例如:可以要求 authors 表的 postcode 列只允许输入六位数字的邮政编码。
我们除了在程序上控制以外,我们还能使用 CHECK 约束 来规范数据。
然而:
mysql所有的存储引擎均不支持check约束,MySQL会对check子句进行分析,但是在插入数据时会忽略,因此check并不起作用,因此实现对数据约束有两种方法:
1.在mysql种约束,如使用enum类型或者触发器等。
2.在应用程序里面对数据进行检查再插入。
使用 ENUM 限制插入的值,但是这种方式只能用于离散型数据,对于范围数据则无能为力
-- 创建一张测试表,规定sex字段只能是 ‘男’ 或者 ‘女’ CREATE TABLE `user` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(18) COLLATE utf8_estonian_ci NOT NULL, `sex` ENUM('男','女') COLLATE utf8_estonian_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_estonian_ci 测试: INSERT INTO `user`(`name`,`sex`) VALUES('秀吉','秀吉'); 结果: 错误代码: 1265 Data truncated for column 'sex' at row 1
如果我们需要限制范围内数据,例如:余额只能大于100这样的条件,我们可以使用触发器来实现。
DELIMITER $$ CREATE TRIGGER `test`.`remaining_BeforeInsert` BEFORE INSERT ON `test`.`user` FOR EACH ROW BEGIN IF `user`.`remaining` < 100 THEN SET `user`.`remaining` = 100; END IF; END$$ DELIMITER ;
以上就是MySQL怎么使用check约束的详细内容,更多请关注Gxl网其它相关文章!