mysql图形界面建表,如何才能添加check约束?例如给sex添加“男”、“女”和“保密”。
4条回答 默认 最新
- 狂龙骄子 2022-08-21 18:03关注
根据多年使用MySQL经验,不建议使用 枚举类,至少我接触过的几个大项目没有见过。
建议统一在 应用层进行校验,减少不必要的 数据库I/O开支。
另外,字段定义为枚举类,也有一定的局限性,使用 汉字 和 0~9 的数字 有很大不同,枚举字段类型中如果使用0,则会赋 null 值。
CREATE TABLE `tmp_user_detail_t`( `id` BIGINT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增长主键', `user_name` VARCHAR(100) NOT NULL COMMENT '姓名', `sex1` ENUM('男','女','秘密') NOT NULL COMMENT '性别', `sex2` ENUM('1','2','3') NOT NULL COMMENT '性别(0:女、1:男、2:秘密)', `sex3` VARCHAR(4) NOT NULL COMMENT '性别(女、男、秘密)', `sex4` TINYINT NOT NULL COMMENT '性别(0:女、1:男、2:秘密)', PRIMARY KEY (`id`) USING BTREE ) COMMENT='用户信息基表' COLLATE='utf8mb4_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ; INSERT INTO `tmp_user_detail_t`(user_name, sex1, sex2, sex3, sex4) VALUES("小王", '女', '1', '男', 1); INSERT INTO `tmp_user_detail_t`(user_name, sex1, sex2, sex3, sex4) VALUES("小王", '男', '2', '男', 2); INSERT INTO `tmp_user_detail_t`(user_name, sex1, sex2, sex3, sex4) VALUES("小王", '秘密', '3', '男', 3); -- 插入失败:SQL错误(1265):Data truncated for column 'sex2' at row 1 INSERT INTO `tmp_user_detail_t`(user_name, sex1, sex2, sex3, sex4) VALUES("小王", '未知', '3', '男', 3); INSERT INTO `tmp_user_detail_t`(user_name, sex1, sex2, sex3, sex4) VALUES("小王", '男', '1', '男', 1); INSERT INTO `tmp_user_detail_t`(user_name, sex1, sex2, sex3, sex4) VALUES("小王", '男', '2', '男', 2); INSERT INTO `tmp_user_detail_t`(user_name, sex1, sex2, sex3, sex4) VALUES("小王", '男', '3', '男', 3); -- 插入成功,但 sex2 为 null INSERT INTO `tmp_user_detail_t`(user_name, sex1, sex2, sex3, sex4) VALUES("小王", '男', '0', '男', 2); -- 插入失败:SQL错误(1265):Data truncated for column 'sex2' at row 1 INSERT INTO `tmp_user_detail_t`(user_name, sex1, sex2, sex3, sex4) VALUES("小王", '男', '4', '男', 2); INSERT INTO `tmp_user_detail_t`(user_name, sex1, sex2, sex3, sex4) VALUES("小王", '男', '2', '女', 1); INSERT INTO `tmp_user_detail_t`(user_name, sex1, sex2, sex3, sex4) VALUES("小王", '男', '2', '男', 2); INSERT INTO `tmp_user_detail_t`(user_name, sex1, sex2, sex3, sex4) VALUES("小王", '男', '2', '秘密', 3); INSERT INTO `tmp_user_detail_t`(user_name, sex1, sex2, sex3, sex4) VALUES("小王", '男', '2', '未知', 3);
2、对于MySQL 8.0.15之前的版本,不支持CHECK约束
马克社区,马克吐温社区,马克java社区MySQL 8.0 新特性之检查约束(CHECK); mysql check 检查约束 mysql 8.0 新特性 马克社区,马克吐温社区,马克java社区MySQL 8.0 新特性之检查约束(CHECK); mysql check 检查约束 mysql 8.0 新特性 http://www.mark-to-win.com/tutorial/51585.html3、如果一定要在MySQL服务端校验,可使用 trigger 触发器
MySQL CHECK约束功能如何实现_Mr.路痴的博客-CSDN博客_mysqlcheck约束怎么写 CHECK 检查约束在我们使用 MySQL 插入数据时,假如我们插入性别,就只能插入‘男’、‘女’,或者插入数据控制在一定范围内,我们都会使用 CHECK 检查约束来实现。问题:MySQL 所有的存储引擎都不支持 CHECK 约束,MySQL中可以写 CHECK 约束,但会忽略它的作用,因此 CHECK 并不起作用,因此实现对数据约束有两种方法:在 MySQL 种约束,如使用 ENUM ... https://blog.csdn.net/weixin_43054397/article/details/93020765本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 请分析一下这个电路设计的优点🙏
- ¥15 求视频摘要youtube和ovp数据集
- ¥15 怎么改成输入一个要删除的数后现实剩余的数再输入一个删除的数再现实剩余的数用yes表示继续no结束程序
- ¥15 在启动roslaunch时出现如下问题
- ¥15 汇编语言实现加减法计算器的功能
- ¥20 关于多单片机模块化的一些问题
- ¥30 seata使用出现报错,其他服务找不到seata
- ¥35 引用csv数据文件(4列1800行),通过高斯-赛德尔法拟合曲线,在选取(每五十点取1点)数据,求该数据点的曲率中心。
- ¥20 程序只发送0X01,串口助手显示不正确,配置看了没有问题115200-8-1-no,如何解决?
- ¥15 Google speech command 数据集获取