有没有办法在不使用PHP或在查询中明确包含该行的情况下更新该行时将字段设置为0?
答案 0 :(得分:1)
您可以在定义表时设置默认值= 0
。
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