2017-03-27 3 views
0

に基づいて、第2列のAUTO_INCREMENT:私は「POS」のためではなく、「親」値のに対し、スレッドセーフ&速いAUTO_INCREMENTを追加することができますどのようにMySQLの:私はMySQLの表のように持って3列目

CREATE TABLE `tab` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `pos` INT(10) UNSIGNED NOT NULL, 
    `parent` INT(10) UNSIGNED NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 

。例えば

insert parent 1 -> id=1/pos=1/parent=1 
insert parent 1 -> id=2/pos=2/parent=1 
insert parent 2 -> id=3/pos=1/parent=2 
insert parent 2 -> id=4/pos=2/parent=2 
insert parent 1 -> id=5/pos=3/parent=1 
+0

おそらく、このためにトリガーを使用する必要があります。 –

+0

私はあなたが解決策を見つけたことを知っていますが、私は「ORDER BY」があなたの問題を解決できたと思います。 'ORDER BY親ASC、pos ASC ' – Ibu

答えて

-1

いくつか検索した後は、私は解決策を見つけたが、これは最高の一つですか?

スレッドセーフですか? 速い?

デリミタを削除できますか?

DELIMITER $$ 
CREATE TRIGGER tab_trigger 
BEFORE INSERT ON tab 
FOR EACH ROW BEGIN 
    SET NEW.`pos` = (SELECT IFNULL(MAX(pos), 0) + 1 FROM tab WHERE parent = NEW.parent); 
END $$ 
DELIMITER ; 
関連する問題