假设我有一张表。
CREATE TABLE IF NOT EXISTS Test (
Id int(11) NOT NULL AUTO_INCREMENT,
Foo tinyint(1) unsigned NOT NULL DEFAULT 0,
Bar varchar(255) NOT NULL,
PRIMARY KEY (Id)
);
在插入触发之前:
DROP TRIGGER IF EXISTS `test_update`;
DELIMITER //
CREATE TRIGGER `test_update` BEFORE UPDATE ON `Test`
FOR EACH ROW BEGIN
IF NEW.Foo IS NULL THEN
-- do something
END IF;
END
//
DELIMITER ;
通过触发器,我检查Foo
列是否真的传递到了update语句中。否则我会做点什么。
我的查询:
UPDATE Test
SET Bar = '23'
WHERE Id = 1;
如何正确检测Foo未设置?
您已经创建了具有以下属性的表:
Foo tinyint(1) unsigned NOT NULL DEFAULT 0,
因此,由于[tinyint][1]: 1 byte, -128 to +127 / 0 to 255 (unsigned)
,在"Foo"处永远不会得到NULL
只是快速测试:
mysql> INSERT INTO `Test` (`Id`, `Foo`, `Bar`) VALUES (1, 'ttt', 'La-la-la');
ERROR 1366 (HY000): Incorrect integer value: 'ttt' for column 'Foo' at row 1