0

テーブルが1つあります。Parent_idは同じテーブルIDを参照します。parent_id = idの場合、どのようにrawを挿入しますか?id(挿入前)がわからないので、parent_idがないと挿入できません。最後のINCREMENTIDを取得して一時テーブルを作成せずに、最適な方法は何ですか?

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");
4

2 に答える 2

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値を複製します。

于 2012-06-21T05:50:42.450 に答える
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

于 2012-06-21T05:46:52.403 に答える