MySQL使用check约束的方法:1、如果要设置CHECK约束的字段范围小,并且比较容易列举全部的值,可以将该字段的类型设置为enum类型或set类型。2、如果需要设置CHECK约束的字段范围大,且列举全部值比较困难,使用触发器来代替约束实现数据的有效性了。

在一些情况下,我们需要字段在指定范围的输入,

例如:性别只能输入 '男'或者'女',余额只能大于0等条件,

例如:可以要求 authors 表的 postcode 列只允许输入六位数字的邮政编码。

我们除了在程序上控制以外,我们还能使用 CHECK 约束 来规范数据。

然而:

mysql所有的存储引擎均不支持check约束,MySQL会对check子句进行分析,但是在插入数据时会忽略,因此check并不起作用。

解决这个问题的两种方式:

1、如果要设置CHECK约束的字段范围小,并且比较容易列举全部的值,就可以考虑将该字段的类型设置为枚举类型 enum()或集合类型set()。

比如性别字段可以这样设置,插入枚举值以外值的操作将不被允许。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约束的字段范围大,且列举全部值比较困难,比如整数或者某一区间,那就只能使用触发器来代替约束实现数据的有效性了。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 ;

测试: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怎么使用check约束相关推荐

  1. mysql的check约束怎么设置_MySQL检查约束(CHECK)

    MySQL 检查约束(CHECK)是用来检查数据表中字段值有效性的一种手段,可以通过 CREATE TABLE 或 ALTER TABLE 语句实现.设置检查约束时要根据实际情况进行设置,这样能够减少 ...

  2. mysql 唯一约束 多字段_mysql多字段唯一约束

    MySQL唯一约束(Unique Key)要求该列唯一,允许为空,但只能出现一个空值.唯一约束可以确保一列或者几列不出现重复值. 在创建表时设置唯一约束 在定义完列之后直接使用 UNIQUE 关键字指 ...

  3. mysql中索引约束有哪些_Mysql中索引和约束的示例语句

    外键 查询一个表的主键是哪些表的外键 SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCE ...

  4. mysql 约束 和索引_Mysql中索引和约束的示例语句

    外键 查询一个表的主键是哪些表的外键 SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCE ...

  5. MySQL慢日志超时时间设置_Mysql的慢日志

    一.开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 二.慢日志参数: slow_query_log 慢查询开启状态 slow_q ...

  6. mysql的check约束怎么设置_mysql 的 check约束

    mysql的check约束在当前mysql版本中依然是个摆设(mysql版本5.7.9) 那么要怎么取现救国,实现类似check约束的功能呢? 解决方案: 1.使用触发器,来完成类似check的约束验 ...

  7. mysql的check约束怎么设置_Mysql中怎样实现check约束?

    现在要说的是在列这一层次过滤的基于表定义之前就规范好的 CHECK 约束.(MySQL 版本 >= 8.0.16)mysql> create table f1 (r1 int constr ...

  8. mysql怎么写主外键_mysql主外键约束怎么写?

    mysql主键约束的写法:"CREATE TABLE 表名(字段名 数据类型 PRIMARY KEY)":mysql外键约束的写法:"CREATE TABLE 表名(FO ...

  9. mysql添加外键约束的语法_Mysql添加外键约束.

    最近学习遇到一条添加外键约束的语句,记录下来. alter table selection add constraint FK_Reference_1 foreign key(course) refe ...

最新文章

  1. SQL some any all
  2. 林肯焊接机器人的安装与接线_林肯焊接系统解读.ppt
  3. 中国移动短信网关CMPP3.0 C#源代码:使用示例
  4. ACM入门之【ST表/RMQ】
  5. 13道Python数组练习题
  6. C++入门经典-例8.1-类的继承
  7. c语言 函数调用 传值调用 引用调用 传地址调用,C语言中的传值调用和引用调用...
  8. 白云区五措施扶持服务外包及呼叫中心产业发展
  9. C#调用天气查询服务
  10. iBATIS的自定义类型处理器TypeHandlerCallback解决乱码
  11. c++输入回车结束循环,C++ cin如何输入回车停止
  12. 脚本的使用与修改Tampermonkey(油猴)
  13. nii、npz、npy、dcm、mhd 的数据互转处理,及多目标分割处理汇总
  14. 贪心算法-会议安排问题
  15. Character.isAlphabetic()方法判断中文字符时,返回值为true
  16. 写作小技能:知识工作者的全套手艺
  17. linux相关图形与相关命令
  18. word文件太大如何变小?
  19. 整理 | 计算机听觉领域可以考虑发哪些期刊会议
  20. 期货反向跟单-聊点感悟

热门文章

  1. Kubenetes1.13.1集群部署 --01基于Kubeadm搭建Kubernetes
  2. 如何做好抖音短视频?
  3. 1--100以内的质数(只能被1和其本身整除的数就是质数,1不是质数)
  4. 全国计算机二级抵免自考,自考计算机可以抵免吗?
  5. 苹果手机微信语音没声音怎么回事_iphonexs没声音,iphonexs扬声器没声怎么回事?...
  6. python登录网易163邮箱,爬取邮件
  7. 文献 | 从生物、医学和社会角度谈社恐
  8. DS博客大作业--树 (陈梓灿组)
  9. C++ 算法设计与分析 地图着色问题(中国+美国)
  10. java电脑类_计算机类在Java中的设计于实现码