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

ite_IDがnullではなく、トリガーでnullに設定したい場合は、自動インクリメントであることに加えて、そのフィールドに割り当てるすべての値を「制御」することはできません。つまり、値を上書きしません。

于 2012-06-25T17:55:05.360 に答える
0

自動インクリメントされた主キー フィールドの場合、挿入中に NULL 値を渡すことができます。MySQL は、自動生成された値を自動的に割り当てます。BEFORE insertに NULL を設定するのはエラーではありません。したがって、トリガーはエラーを発生させませんでした。

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

ite_idフィールドは自動インクリメントの主キーであるため、上記のステートメントは有効で機能します。

于 2012-06-25T17:50:05.360 に答える
0

だろう

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

また、 として設定ite_idしているNOT NULLため、 を使用することはできませんset new.ite_id = null;

于 2012-06-25T17:24:54.650 に答える