Mysql 两个主键&;自动增量

Mysql 两个主键&;自动增量,mysql,primary-key,auto-increment,Mysql,Primary Key,Auto Increment,我有一个MySQL表,有两个字段作为主键(ID和Account),ID具有自动增量。 这将导致以下MySQL表: ID | Account ------------------ 1 | 1 2 | 1 3 | 2 4 | 3 但是,我预期会出现以下结果(重新启动每个帐户的自动增量): 我的配置有什么问题?我怎样才能解决这个问题 谢谢 您所描述的功能只能通过MyISAM引擎实现。您需要像下面这样指定CREATE T

我有一个MySQL表,有两个字段作为主键(ID和Account),ID具有自动增量。 这将导致以下MySQL表:

 ID    |  Account
------------------
 1     |     1
 2     |     1
 3     |     2
 4     |     3
但是,我预期会出现以下结果(重新启动每个帐户的
自动增量
):

我的配置有什么问题?我怎样才能解决这个问题


谢谢

您所描述的功能只能通过
MyISAM
引擎实现。您需要像下面这样指定
CREATE TABLE
语句:

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#
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 INT无符号非空自动增量,
帐户id INT未签名非空,
主键(帐户id,id)

)发动机=MyISAM

您所描述的功能仅在使用
MyISAM
引擎时才可能实现。您需要像下面这样指定
CREATE TABLE
语句:

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#
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 INT无符号非空自动增量,
帐户id INT未签名非空,
主键(帐户id,id)

)发动机=MyISAM

如果使用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#
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);
注意!您的分隔符列在上面的sql语句中是#

此解决方案适用于您这样的表,如果您创建它时没有任何自动增量功能,如:

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#
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);
现在,您可以按如下方式插入值:

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#
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

如果使用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#
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);
注意!您的分隔符列在上面的sql语句中是#

此解决方案适用于您这样的表,如果您创建它时没有任何自动增量功能,如:

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#
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);
现在,您可以按如下方式插入值:

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#
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

什么是CREATETABLE语句和您使用的引擎?什么是CREATETABLE语句和您使用的引擎?