我有一个MySQL表,其中两个字段作为主键(ID& Account),ID具有AUTO_INCREMENT。 这导致以下MySQL表:
ID | Account
------------------
1 | 1
2 | 1
3 | 2
4 | 3
但是,我预计会有以下结果(每个帐户重启AUTO_INCREMENT
):
ID | Account
------------------
1 | 1
2 | 1
1 | 2
1 | 3
我的配置有什么问题?我该如何解决这个问题?
谢谢!
答案 0 :(得分:1)
您所描述的功能仅适用于MyISAM
引擎。您需要指定CREATE TABLE
语句,如下所示:
CREATE TABLE your_table (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
account_id INT UNSIGNED NOT NULL,
PRIMARY KEY(account_id, id)
) ENGINE = MyISAM;
答案 1 :(得分:0)
如果您使用innoDB引擎,则可以使用如下触发器:
CREATE TRIGGER `your_table_before_ins_trig` BEFORE INSERT ON `your_table`
FOR EACH ROW
begin
declare next_id int unsigned default 1;
-- get the next ID for your Account Number
select max(ID) + 1 into next_id from your_table where Account = new.Account;
-- if there is no Account number yet, set the ID to 1 by default
IF next_id IS NULL THEN SET next_id = 1; END IF;
set new.ID= next_id;
end#
注意!你的分隔符列在上面的sql语句中是#!
如果您在没有任何auto_increment功能的情况下创建此解决方案,此解决方案适用于您的表:
CREATE TABLE IF NOT EXISTS `your_table` (
`ID` int(11) NOT NULL,
`Account` int(11) NOT NULL,
PRIMARY KEY (`ID`,`Account`)
);
现在您可以插入以下值:
INSERT INTO your_table (`Account`) VALUES (1);
INSERT INTO your_table (`Account`, `ID`) VALUES (1, 5);
INSERT INTO your_table (`Account`) VALUES (2);
INSERT INTO your_table (`Account`, `ID`) VALUES (3, 10205);
这将导致:
ID | Account
------------------
1 | 1
2 | 1
1 | 2
1 | 3