带触发器的Mysql clone id

时间:2015-03-16 17:25:34

标签: mysql triggers

我有两张桌子:

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `username` varchar(45) NOT NULL,
  `password` varchar(200) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS `users_info` (
  `id` int(8) NOT NULL,
  `name` varchar(35) NOT NULL,
  `address` varchar(35) NOT NULL,  
  PRIMARY KEY (`id`),
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

我希望在用户users中插入用户时,自动在表users_info中插入一个新行,该行在id列中包含相同的ID,作为{ {1}}表。 当我执行插入操作时,我会这样做:users

我相信我应该看一下MySQL触发器。我确实看了一下,但我不知道如何从插入的每个最后一行的users表中检索密钥id,假设其他行可以在其他线程中并行插入。

2 个答案:

答案 0 :(得分:1)

如果您创建AFTER INSERT触发器,则可以使用NEW对象:

CREATE
    TRIGGER `aftInsert_users` AFTER INSERT ON `users` 
    FOR EACH ROW BEGIN
            INSERT INTO users_info (itemID) VALUES (NEW.id);
END;

答案 1 :(得分:0)

如果为定义为not null的列定义默认值,则插入后的触发器应该有效:

CREATE TRIGGER insert_users_info 
AFTER INSERT ON `users`
FOR EACH ROW INSERT INTO `users_info` (id) VALUES (NEW.id);

有关详细信息,请参阅MySQL documentation触发器。