我有解决方案,我需要一个表中的id从1开始每月。我正在考虑将月份名称作为主键与id auto incerement一起使用。我错了吗?有人有什么想法吗?
答案 0 :(得分:3)
MYISAM表示例:
CREATE TABLE table1(
yearmonth_id INT(11) NOT NULL, -- combination of year and month
id INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (yearmonth_id, id)
)
ENGINE = MYISAM;
INSERT INTO table1 VALUES(201110, NULL);
INSERT INTO table1 VALUES(201110, NULL);
INSERT INTO table1 VALUES(201110, NULL);
INSERT INTO table1 VALUES(201112, NULL);
INSERT INTO table1 VALUES(201112, NULL);
INSERT INTO table1 VALUES(201112, NULL);
INSERT INTO table1 VALUES(201201, NULL);
INSERT INTO table1 VALUES(201201, NULL);
INSERT INTO table1 VALUES(201201, NULL);
SELECT * FROM table1;
+--------------+----+
| yearmonth_id | id |
+--------------+----+
| 201110 | 1 |
| 201110 | 2 |
| 201110 | 3 |
| 201112 | 1 |
| 201112 | 2 |
| 201112 | 3 |
| 201201 | 1 |
| 201201 | 2 |
| 201201 | 3 |
+--------------+----+
答案 1 :(得分:1)
我错了吗?
完全。
N.B.的评论应该是一个答案。在这里引用它:
为什么每个人都想篡改auto_increment而不是创建自己的触发器并按照自己的方式实现逻辑..只是不要篡改主键,从多个角度来看这是一个坏主意。创建一个触发器以增加其他列中的数字,让主键执行它的操作。
每个新手网络程序员都应该将它刻在桌子上,每天大声朗读3次。
答案 2 :(得分:0)
主键是通常需要简单。大多数系统使用数字的原因是因为在代码中,您只需传递数字来表示数据,如果您不需要,则不必请求所有数据。
您可以拥有一个多列主键,其中一列是月 - 年字符串,另一列是数字自动增量,然后自动增量将在月份更改时自动重复使用数字。这样做的好处是可以直接绑定到表定义中,这样可以更轻松地移动系统。