2

假设我有一张桌子。

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 Test
SET Bar = '23'
WHERE Id = 1;

如何正确检测 Foo 未设置?

4

1 回答 1

0

您已经创建了表:

Foo tinyint(1) unsigned NOT NULL DEFAULT 0,

因此,你永远不会在 'Foo' 处得到 NULL,因为[tinyint][1]: 1 byte, -128 to +127 / 0 to 255 (unsigned)

快速测试:

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
于 2015-12-25T07:33:33.447 回答