5

私はMySQLでテーブルを設定するのはまったく新しいので、やりたいことがありますが、それは私ができるよりも少し進んでいます。

複合主キーの一部として2つの列があります。1つは日付で、IDは自動インクリメント整数になります。日付ごとに、自動整数を0にリセットしたいので、次のようになります。

|-----------------|
|Date       | ID  |
|-----------------|
|2012-06-18 | 1   |
|2012-06-18 | 2   |
|2012-06-18 | 3   |
|2012-06-19 | 1   |
|2012-06-19 | 2   |
|2012-06-20 | 1   |
|-----------------|

ありがとう

4

4 に答える 4

6

ここでこれは機能するはずです。

CREATE TABLE  `answer`(
  `dates` DATE NOT NULL,
  `id` mediumint(9) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`dates`,`id`)
) ENGINE=MyISAM;

innoDBで問題を引き起こすことが知られています。これがお役に立てば幸いです。

編集:結果

2012-06-19  1
2012-06-19  2
2012-06-19  3
2012-07-19  1
2012-07-19  2
2012-08-19  1

phpmyadminで。

于 2012-06-19T12:10:53.413 に答える
5

ええと、私にとってmysqlはあなたが望むことを自動的に行います。

mysql> CREATE TABLE TestData(Date date not null, ID int unsigned not null auto_increment, PRIMARY KEY(Date, ID));

mysql> INSERT INTO TestData SET Date = "2012-06-18";
mysql> INSERT INTO TestData SET Date = "2012-06-18";
mysql> INSERT INTO TestData SET Date = "2012-06-18";
mysql> INSERT INTO TestData SET Date = "2012-06-19";
mysql> INSERT INTO TestData SET Date = "2012-06-19";
mysql> INSERT INTO TestData SET Date = "2012-06-20";

mysql> select * from TestData;
+------------+----+
| Date       | ID |
+------------+----+
| 2012-06-18 |  1 |
| 2012-06-18 |  2 |
| 2012-06-18 |  3 |
| 2012-06-19 |  1 |
| 2012-06-19 |  2 |
| 2012-06-20 |  1 |
+------------+----+

魔法は関係ありません。

于 2012-06-19T12:06:24.930 に答える
3

挿入前トリガーを作成できます。

DELIMITER $$
CREATE TRIGGER `composite_auto_increment` BEFORE INSERT ON `your_table`
FOR EACH ROW
BEGIN
    DECLARE max_id INT(11); -- add the appropriate column length from your table definition
    SELECT ID FROM `your_table` WHERE `Date` = DATE(NOW()) INTO max_id;
    SET NEW.ID = IF(ISNULL(max_id), 1, max_id + 1);
END$$

このように、その日のIDがすでに存在する場合、IDは増分されます。そうでない場合は、1に設定されます。このシナリオでは、IDがAUTO_INCREMENTテーブル定義に含まれていないことに注意してください。トリガーによって実行されます。

于 2012-06-19T11:34:16.790 に答える
0

トリガーの場合:SELECT ID FROM your_tableWHERE Date= DATE(NOW())INTO max_id; SELECT max(ID)FROM your_tableWHERE Date= NEW.key_field INTO max_id;

しかし、より良いのはキーによるロックです。これは、innodbでの同時挿入に適しています。

于 2013-08-06T11:24:22.803 に答える