复合主键和Auto_Increment

时间:2013-03-26 12:27:17

标签: mysql key composite

我正在尝试使用其中一个自动递增来执行复合键,但是当我尝试输入新行时,它只是继续顺序。

以下是发生的事情的例子:

Item_1 | Item_2
1     |   1    
1     |   2
2     |   3
2     |   4
2     |   5

以下是我想要的例子:

Item_1 | Item_2
1     |   1    
1     |   2
2     |   1
2     |   2
2     |   3

我以这种方式创建表:

CREATE TABLE IF NOT EXISTS `usuarios` (
  `cod_user` int(11) NOT NULL AUTO_INCREMENT,
  `cod_user_emp` int(11) NOT NULL,
  PRIMARY KEY (`cod_user`,`cod_user_emp`),
  UNIQUE KEY `user` (`user`),
  KEY `cod_user` (`cod_user`)
  );

修改

我解决了服务器端php验证的问题。

$result = $db->query("SELECT * FROM usuarios WHERE cod_user_emp=\"$emp\" ORDER BY cod_user DESC LIMIT 1");
while($row=$result->fetch_array()){
   $cod2 = $row['cod_user']+1;
}

1 个答案:

答案 0 :(得分:2)

删除AUTO_INCREMENT列,

CREATE TABLE IF NOT EXISTS `usuarios` 
(
  `cod_user` int(11) NOT NULL,
  `cod_user_emp` int(11) NOT NULL,
  PRIMARY KEY (`cod_user`,`cod_user_emp`) -- <<== this is enough
);

并且可以为Stored Procedure创建Item_2,增加Item_1

DELIMITER $$
CREATE PROCEDURE InsertRecord(IN ItemA INT)
BEGIN
    SET @max_id =  (
                    SELECT COALESCE(MAX(Item_2), 0) + 1
                    FROM TableName
                    WHERE   Item_1 = ItemA
                    );
    INSERT INTO tableName(Item_1, Item_2)
    VALUES(ItemA, @max_id)
END $$
DELIMITER ;

并像这样称呼它,

CALL InsertRecord(2);