0

表:项目创建表:

CREATE TABLE `items` (
  `ite_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `itemName` varchar(40) DEFAULT NULL,
  `itemNumber` int(10) unsigned NOT NULL,
  PRIMARY KEY (`ite_id`),
  UNIQUE KEY `itemName` (`itemName`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1


delimiter |

create trigger item_beforeinsert before insert on items
    for each row begin
    if new.itemNumber < 50 then
        set new.ite_id = null;
    end if;
end;
|

现在以下命令不会触发

insert items( itemname, itemnumber) values ( 'xyz', 1 );

任何帮助将不胜感激,谢谢!

4

3 回答 3

0

会是

insert INTO items( itemname, itemnumber) values ( 'xyz', 1 );

另外,由于您已设置ite_idNOT NULL,因此您不能使用 aset new.ite_id = null;

于 2012-06-25T17:24:54.650 回答
0

对于自动递增的主键字段,您可以在插入时传递 NULL 值。MySQL 自动分配自动生成的值。在 insert 之前设置 NULL 不是错误。因此触发器没有触发错误。

示例

insert into items( ite_id, ... ) values ( null, ... );

上述语句有效且有效,因为ite_id字段是具有自动增量的主键。

于 2012-06-25T17:50:05.360 回答
0

您的 ite_ID 不为空,并且您想使用触发器将其设置为空,除了它是自动递增的,因此您将无法“控制”分配给该字段的所有值,即它不会覆盖值

于 2012-06-25T17:55:05.360 回答