在另一列更改后重置的自动递增字段 MYSQL
Auto-increment field that resets after a change in another column MYSQL
您能否提供一个非常简单的 MYSQL 示例,说明如何创建一个 "count" 或 "order" 字段,该字段将自动递增,但在每次更改不同字段后重新启动?在下面的 table 中,每当 "Meal" 字段发生变化时,"Order" 字段将从“1”重新开始。谢谢
Meal Time Order
Lunch 10:30 1
Lunch 11:00 2
Lunch 11:15 3
Dinner 4:30 1
Dinner 4:45 2
Dinner 5:00 3
Dinner 5:30 4
自动增量总是根据table,你不能让它特定于某些列或索引。
如果你想要每列自增id,你需要手动完成。 IE。插入新项目时,select id 最大值通过 select MAX(id) FROM ... WHERE name = 'Dinner'
然后插入 maximum+1
.
要在某些报告的 Select 语句中执行此操作,您需要通过会话变量和 case 语句来实现它。参见 this tutorial。
该功能在 MyISAM 引擎中可用,但在 InnoDB 中不可用。它可以被模拟。请参阅 MyISAM to InnoDB 并搜索 'abc'。这是它的要点:
BEGIN;
SELECT @id := IFNULL(MAX(id),0) + 1 FROM foo WHERE other = 123 FOR UPDATE;
INSERT INTO foo
(other, id, ...)
VALUES
(123, @id, ...);
COMMIT;
您能否提供一个非常简单的 MYSQL 示例,说明如何创建一个 "count" 或 "order" 字段,该字段将自动递增,但在每次更改不同字段后重新启动?在下面的 table 中,每当 "Meal" 字段发生变化时,"Order" 字段将从“1”重新开始。谢谢
Meal Time Order
Lunch 10:30 1
Lunch 11:00 2
Lunch 11:15 3
Dinner 4:30 1
Dinner 4:45 2
Dinner 5:00 3
Dinner 5:30 4
自动增量总是根据table,你不能让它特定于某些列或索引。
如果你想要每列自增id,你需要手动完成。 IE。插入新项目时,select id 最大值通过 select MAX(id) FROM ... WHERE name = 'Dinner'
然后插入 maximum+1
.
要在某些报告的 Select 语句中执行此操作,您需要通过会话变量和 case 语句来实现它。参见 this tutorial。
该功能在 MyISAM 引擎中可用,但在 InnoDB 中不可用。它可以被模拟。请参阅 MyISAM to InnoDB 并搜索 'abc'。这是它的要点:
BEGIN;
SELECT @id := IFNULL(MAX(id),0) + 1 FROM foo WHERE other = 123 FOR UPDATE;
INSERT INTO foo
(other, id, ...)
VALUES
(123, @id, ...);
COMMIT;