在MySQL 中定義具有自動增量的複合鍵:一個挑戰
建立具有自動增量列的組合鍵可能會帶來以下挑戰: MySQL。對於 InnoDB 表尤其如此,它施加了某些限制。
場景和錯誤:
考慮以下表架構:
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) );
嘗試執行此查詢可能會導致以下錯誤:
ERROR 1075: Incorrect table definition; there can be only one auto column and it must be defined as a key
目標:
所需的行為是sr_no 欄位針對唯一組合自動遞增app_id 和test_id。
限制與解:
InnoDB 表只允許單一自增列。因此,無法直接透過模式定義來實現所需的行為。
替代方案:
克服此限制的一種解決方案是使用觸發器或過程手動遞增基於條件的 sr_no 列。例如,可以使用下列觸發器:
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 ;
其他注意事項:
以上是MySQL中如何實現組合鍵自增?的詳細內容。更多資訊請關注PHP中文網其他相關文章!