4

そのうちの1つを自動インクリメントして複合キーを実行しようとしていますが、新しい行を入力しようとすると、シーケンシャルが続行されます。

何が起こるかの例を次に示します。

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 に答える