0

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

4

4 回答 4

1

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

CREATE TABLE 语法

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上工作

于 2013-03-22T22:47:34.467 回答
1

使用触发器:

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

没有测试它。

于 2013-03-22T22:52:49.960 回答
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')在不创建新行的情况下产生。

于 2013-03-22T22:50:53.170 回答
0

触发器是正确的方法,但塞巴斯蒂安完全错了。

您不会UPDATE在触发器内运行,只需将值分配给new传递给触发器的记录。此外,它必须是一个触发器(因为在AFTER触发器中对记录BEFORE UPDATE的更改不会被持久化)。new

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

于 2013-11-03T09:57:48.877 回答