有一张桌子。 Parent_id引用相同的表id。如果parent_id = id,如何插入raw?我不知道id(在插入之前),如果没有parent_id则无法插入。 没有获得最后一个INCREMENT id并创建临时表的最佳方法是什么?
CREATE TABLE `test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` int(11) unsigned NOT NULL,
`someotherfield` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY `constr_catalog_guid_id` (`parent_id`) REFERENCES `test` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这不起作用:
Insert into 'test' values (parent_id = test.id, "NOt matter");
答案 0 :(得分:2)
CREATE TRIGGER trigger_increment_id_for_another_field BEFORE INSERT ON test FOR EACH ROW
BEGIN
DECLARE next_id INT;
SET next_id = (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='test');
SET NEW.parent_id=next_id;
END
此触发器应根据行的每个插入的auto_increment值复制parent_id值。
答案 1 :(得分:0)
您可以暂时禁用外键的强制执行,例如:
SET foreign_key_checks = 0;
INSERT INTO 'test' VALUES (NULL, NULL, "foo");
UPDATE 'test' SET parent_id = id WHERE parent_id IS NULL;
SET foreign_key_checks = 1;
我不确定,但您可能需要让列允许NULL才能生效。
http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_foreign_key_checks