有没有办法在不使用 PHP 或在我的查询中明确包含该行更新时将字段设置为 0?
问问题
128 次
4 回答
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上工作
于 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 回答