MySQL中check的用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL中check的用法相关的知识,希望对你有一定的参考价值。
在性别用check会出现一个问题,就是如果插入的数据不是男,也不是女的话,它会默认的插入NULL,这是为什么,怎么才能使用check
现在要说的是在列这一层次过滤的基于表定义之前就规范好的 CHECK 约束。(mysql 版本 >= 8.0.16)
mysql> create table f1 (r1 int constraint tb_f1_r1_chk1 check (mod(r1,3)=0));
Query OK, 0 rows affected (0.03 sec)
mysql> create table f2 (r1 int constraint tb_f2_r1_chk1 check (mod(r1,3)=0) not enforced);
Query OK, 0 rows affected (0.02 sec)
这里 CHECK 约束的相关限制如下:
1. constraint 名字在每个数据库中唯一。
也就是说单个数据库里不存在相同的两个 constraint,如果不定义,系统自动生成一个唯一的约束名字。
2. check 约束针对语句 insert/update/replace/load data/load xml 生效;针对对应的 ignore 语句失效。
3. 并非每个函数都可以使用,比如函数结果不确定的:NOW(),CONNECTION_ID(),CURRENT_USER()。
4. 不适用于存储过程和存储函数。
5. 系统变量不适用。
6. 子查询不适用。
7. 外键动作(比如 ON UPDATE, ON DELETE) 不适用。
8. enforced 默认启用,如果单独加上 not enforced ,check 约束失效。
修改该字段为非空且默认值为“男”或“女”。
not null default="男"
这样可以达到同样的效果吧。 参考技术B 不用写语句,直接双击CHECK控件,指定两个值即可.即FALSE时为空格,TRUE时为"V"即可.
Nagios下自带的check_mysql_query插件说明
如果是在系统中有安装过MySQL后,在安装好Nagios的plugins时,则会有2个自带用于监控MySQL的插件check_mysql和check_mysql_query。其中check_mysql不用说使用的最多了,可用于监控 MySQL的运行状态包括主从复制的状态,这个平时使用的也比较多,记得之前有找到一篇不错的Nagios默认插件介绍里面有详细的说明,需要可以看:http://jim123.blog.51cto.com/4763600/1955618,但是其中还有一个默认的插件check_mysql_query,它总体的参数都和check_mysql差不多,但是其中有一条:
-q, --query=STRING SQL query to run. Only first column in first row will be read
很多人都没有对它做比较详细的解释,而从官方的帮助信息写的太简单了,从中看到的说明就有点容易造成混淆:只读第一行的第一列。一般我们去查SQL都会有很多信息,它只能读取第一行第一列的内容吗?其实不是的,它其实是用于返回SQL查询中一张表中记录的多少条,用于验证表中是否有N条记录,如果定义好warning和critical的值时,当记录条数大与或者等于时就会告警,举一个例子:
在所使用的MySQL中总共有7个用户,可以通过查询系统表mysql.user得到结果
mysql> SELECT COUNT(1) FROM mysql.user; +----------+ | COUNT(1) | +----------+ | 7 | +----------+ 1 row in set (0.00 sec)
注意这里必须使用super用户不然是看不到mysql.user表的,定义好在所使用的MySQL数据库中最多只能有7个用户,当出现第8个用户时就发告警,就这样使用:
[[email protected] libexec]# ./check_mysql_query -H localhost -u root -p ‘youpassword‘ -q "SELECT COUNT(1) FROM mysql.user;" -w 8
这样当MySQL中创建了第8个用户时就会发送告警信息。
总之Nagios自带的check_mysql_query插件是用于监控如用户表或错误信息表之类的记录数较为恒定的表中记录数的,但是如果是要进一步的监控MySQL中表信息可以通过自行编写的脚本或者是官方提供的Perl脚本check_mysql_health来实现。
本文出自 “Jim的技术随笔” 博客,谢绝转载!
以上是关于MySQL中check的用法的主要内容,如果未能解决你的问题,请参考以下文章