两个主键&自动递增

时间:2012-01-09 11:15:16

标签: mysql primary-key auto-increment

我有一个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

我的配置有什么问题?我该如何解决这个问题?

谢谢!

2 个答案:

答案 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