在 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中文网其他相关文章!