4

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

这是发生的情况的示例:

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;
}
4

1 回答 1

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_2Item_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);
于 2013-03-26T12:34:21.317 回答