Mendefinisikan Kunci Komposit dengan Peningkatan Auto dalam MySQL: Satu Cabaran
Mencipta kunci komposit dengan lajur kenaikan automatik boleh memberikan cabaran dalam MySQL. Ini adalah benar terutamanya untuk jadual InnoDB, yang mengenakan sekatan tertentu.
Senario dan Ralat:
Pertimbangkan skema jadual berikut:
CREATE TABLE `issue_log` ( `sr_no` INT NOT NULL AUTO_INCREMENT , `app_id` INT NOT NULL , `test_id` INT NOT NULL , `issue_name` VARCHAR(255) NOT NULL , primary key (app_id, test_id,sr_no) );
Percubaan untuk melaksanakan pertanyaan ini boleh mengakibatkan ralat berikut:
ERROR 1075: Incorrect table definition; there can be only one auto column and it must be defined as a key
Matlamat:
Tingkah laku yang diingini adalah untuk lajur sr_no meningkat secara automatik untuk kombinasi unik daripada app_id dan test_id.
Batasan dan Penyelesaian:
Jadual InnoDB membenarkan hanya satu lajur autokenaikan tunggal. Oleh itu, tingkah laku yang diingini tidak boleh dicapai secara langsung melalui definisi skema.
Alternatif:
Satu penyelesaian untuk mengatasi had ini ialah menggunakan pencetus atau prosedur untuk meningkatkan secara manual lajur sr_no berdasarkan kriteria. Contohnya, pencetus berikut boleh digunakan:
DELIMITER $$ CREATE TRIGGER xxx BEFORE INSERT ON issue_log FOR EACH ROW BEGIN SET NEW.sr_no = ( SELECT IFNULL(MAX(sr_no), 0) + 1 FROM issue_log WHERE app_id = NEW.app_id AND test_id = NEW.test_id ); END $$ DELIMITER ;
Pertimbangan Lain:
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Peningkatan Auto dalam Kunci Komposit dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!