【问题标题】:MySQL create an integer column that auto-updates to increment valueMySQL创建一个自动更新以增加值的整数列
【发布时间】:2017-08-23 19:20:06
【问题描述】:

我想知道我是否可以在没有触发器的情况下执行此操作:

我想要一个INT,它会自动更新以增加整数值。

这与TIMESTAMPDATETIME 列上的ON UPDATE CURRENT_TIMESTAMP 相似但不同。

我在文档中读到 ON UPDATE 是不可能的,因为我只能使用文字值,除非列是 TIMESTAMP

MySQL default and on update

MySQL timestamp initialization

我可以做其他事情来代替触发器吗?

[更新 1]

这个例子是我想要实现的:

CREATE TABLE myTable (
    stuff VARCHAR (100),
    special_col INT DEFAULT 123456789
);

INSERT INTO myTable (stuff) VALUES ('something or other');

SELECT * FROM myTable;

stuff                 | special_col
----------------------------------------------------
something or other    | 123456789

UPDATE myTable SET stuff = 'new info';

SELECT * FROM myTable;

stuff                 | special_col
----------------------------------------------------
new info              | 123456790

列增加的值不必是 1。它必须比以前更高。

[更新 2]

我认为我可以使用一些很酷的 mySQL 语法 - 它执行了很多非 ANSI SQL,我认为可能有一种自定义方式来执行它。

反正我已经放弃了,我正在实现一个触发器:

CREATE TRIGGER trg_data_update BEFORE UPDATE ON myTable
    FOR EACH ROW SET NEW.special_col = OLD.special_col + 1;

【问题讨论】:

  • 你的意思是自动更新增量值?你能给我们举个例子吗?
  • 我添加了一个示例并强调了几点,以说明为什么这不是一个骗局。如果您能取消欺骗标志,将不胜感激。
  • 你不能,你需要一个触发器。
  • 未来的某一天,mySQL 可能会推出一个允许这样做的版本。

标签: mysql ddl


【解决方案1】:

按照docs在UPDATE中的special_col中添加一个

UPDATE myTable SET stuff = 'new info', special_col=special_col+1;

【讨论】:

  • 这是无法执行的。
  • 要强制执行,它必须是触发器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2019-10-01
相关资源
最近更新 更多