MySQL字段在更新时设置为0

时间:2013-03-22 22:41:53

标签: mysql

有没有办法在不使用PHP或在查询中明确包含该行的情况下更新该行时将字段设置为0?

4 个答案:

答案 0 :(得分:1)

您可以在定义表时设置默认值= 0

来自CREATE TABLE Syntax

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
   .../...
column_definition:
    data_type [NOT NULL | NULL] [DEFAULT default_value]

让我们说

CREATE TABLE test (
a INT,
b INT DEFAULT 0);

如果我们这样做

INSERT INTO test (a) values (1),(2),(3);

然后当我们

SELECT * FROM test

我们会得到

a  |  b
1     0
2     0
3     0

请参阅SQL Fiddle

答案 1 :(得分:1)

使用触发器:

CREATE TRIGGER set_zero AFTER UPDATE ON table_name
   FOR EACH ROW
      UPDATE table_name SET col_name=0 WHERE xyz=cond_xyz;
;

没试过。

答案 2 :(得分:0)

这对我来说似乎是一个奇怪的要求,但实际上它在MySQL中是可能的。如果您指定0作为该字段的默认值,则可以利用REPLACE INTO对未指定但现有列使用默认值的事实。

INSERT INTO t1 (id, numToZero, value) VALUES (1, 1345, 'value');

稍后,当您想要更新时:

REPLACE INTO t1 (id, value) VALUES (1, 'new value');

这将产生(1, 0, 'new value')而不创建新行。

答案 3 :(得分:0)

一个触发器是正确的方法,但塞巴斯蒂安一切都错了。

您不会在触发器中运行UPDATE,只需将值分配给传递给触发器的new记录。此外, BEFORE UPDATE触发器(因为 AFTER 触发器中new记录的更改将不会保留。< / p>

CREATE TRIGGER set_zero 
  BEFORE UPDATE ON table_name
  FOR EACH ROW
BEGIN
  SET new.col_name = 0; 
END;

请注意,即使定义了默认值,您仍可在插入期间提供非零值。如果您不想要,也需要插入触发器

这是一个SQLFiddle示例:http://sqlfiddle.com/#!2/cebe82/1