Adm*_*onB 5 mysql auto-increment composite-primary-key
我对在 MySQL 中设置表很陌生,我想做一些比我能做的更先进的事情。
我有两列作为复合主键的一部分,一个是日期和一个 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 |
|-----------------|
Run Code Online (Sandbox Code Playgroud)
谢谢
在这里这应该有效。
CREATE TABLE `answer`(
`dates` DATE NOT NULL,
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`dates`,`id`)
) ENGINE=MyISAM;
Run Code Online (Sandbox Code Playgroud)
众所周知,它会导致 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
Run Code Online (Sandbox Code Playgroud)
在 php myadmin 上。
好吧,对我来说 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 |
+------------+----+
Run Code Online (Sandbox Code Playgroud)
不涉及魔法。
您可以创建一个插入前触发器。
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$$
Run Code Online (Sandbox Code Playgroud)
这样,如果当天 ID 已经存在,它就会递增。如果没有,则将其设置为 1。请注意,在这种情况下,ID 不在AUTO_INCREMENT表定义中。它只是通过触发器来完成。
| 归档时间: |
|
| 查看次数: |
9906 次 |
| 最近记录: |