你好,我有一个日期时间列,我想对它进行时间限制,我该怎么做?
例如,从3:00:00到15:00:00的时间范围,如果没有抛出和错误并且停止在列中输入数据,则存储符合此条件的所有数据
答案 0 :(得分:2)
在MySQL中,您必须使用INSERT和UPDATE上的触发器执行此操作,因此如果有人尝试输入的值不符合您的条件,则会引发SIGNAL。
mysql> CREATE TABLE MyTable (
my_datetime DATETIME
);
mysql> DELIMITER ;;
mysql> CREATE TRIGGER MyTable_ins BEFORE INSERT ON MyTable
FOR EACH ROW BEGIN
IF (NOT TIME(NEW.my_datetime) BETWEEN '03:00:00' AND '15:00:00') THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Time does not fall in the range allowed.'
END IF;
END;;
mysql> DELIMITER ;
如果尝试做一些我不应该做的事情,我会收到错误:
mysql> INSERT INTO MyTable SET my_datetime = '2017-01-13 18:00:00';
ERROR 1644 (45000): time does not fall in the range allowed
但如果我选择允许的时间,它就有效:
mysql> INSERT INTO MyTable SET my_datetime = '2017-01-13 11:00:00';
Query OK, 1 row affected (0.00 sec)
答案 1 :(得分:0)
我做了一些挖掘和一些阅读。我在自己的服务器上测试了一些东西。它不起作用。然后我找到了这个答案:
CHECK constraint in MySQL is not working
是的,它接受CHECK
约束作为有效语法,然后完全忽略它。
在我测试和写作的同时,Bill已经发布了MySQL的正确答案。做他说的。