有没有一种方法可以在每当该行更新而不使用PHP或将其明确包含在我的查询中时将字段设置为0?在更新时将MySQL字段设置为0
回答
定义表格时,可以设置默认值= 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
这似乎是在第一个奇怪的要求我,但实际上有可能在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')
而无需创建一个新的行。
使用触发器:
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-22 22:54:32
我会如何去更新那一行?这好像会更新所有行。我看到了WHERE子句,但是如何将'WHERE id =“只更新行的ID”' – 2013-03-22 22:58:43
我不知道!但我发现这个线程:http://stackoverflow.com/questions/2334478/mysql-triggers-cannot-update-rows-in-same-table-the-trigger-is-assigned-to-sugg它说,我的代码以上将导致无限递归,这是真的。它也有一个解决方案。另一个线程http://stackoverflow.com/questions/9227382/cant-update-table-that-trigger-is-executed-on-in-after-insert说使用'BEFORE'可以做到这一点。 – Sebastian 2013-03-22 23:01:59
触发器是正确的选择,但塞巴斯蒂安把这一切都弄错了。
您不会在触发器内运行UPDATE
,只需将该值分配给传递给触发器的new
记录即可。此外,它已将设置为BEFORE UPDATE
触发器(因为之后之后的记录触发器将不会被保留)。
CREATE TRIGGER set_zero
BEFORE UPDATE ON table_name
FOR EACH ROW
BEGIN
SET new.col_name = 0;
END;
请注意,您仍然可以插入即使默认值定义中提供一个非零值。如果你不想,要么,你还需要一个INSERT触发器
下面是一个SQLFiddle例如:http://sqlfiddle.com/#!2/cebe82/1
- 1. 在MySQL字段设置的所有值设置为0
- 2. 将MySQL字段设置为另一个
- 3. 将MySQL字段设置为auto_increment
- 4. 为MySQL设置当前时间字段
- 5. 更新表设置字段
- 6. 当值为空时,MySQL将字段设置为当前日期
- 7. MySQL查询将字段设置为0而不是空白字符串
- 8. 更新查询不起作用,并将字段更改为0
- 9. 将-1设置为0,同时在MySQL中添加
- 10. mysql的更新,如果字段值为0的心不是
- 11. 将小数点字段的Mysql更新语句设置为NULL或空白
- 12. mySQL,将字段设置为另一个字段的值
- 13. 设置笨MySQL的日期时间列时间()始终将其设置为0
- 14. MySQL View:如何将计算字段的默认值设置为0?
- 15. 将字符串设置为'\ 0'
- 16. SQL Server:将全部空字段更新为0
- 17. 将空字段更新为空,但NullIF或len失败(trim())= 0
- 18. MySQL的更新设置的所有字段相同
- 19. 更新的PHP MongoDB未设置字段
- 20. MySQL |如何预先将字符串设置为字段值?
- 21. 如何在MySQL中更新:将网站设置为www.website.com/"partnumber“
- 22. 只有同时存在两个字段为空的Mysql更新字段
- 23. 将ToolStripSplitButton.DropDownButtonWidth设置为0
- 24. 更新为空白字段条目,MySql将其显示为零
- 25. selectOneMenu在更改后将字段设置为空
- 26. Mysql更新很多字段
- 27. MySQL更新字段不同
- 28. mysql/PHP:更新空int字段插入值0
- 29. PHP MySQL更新表设置....?
- 30. MySQL更新设置值
领域已经有默认值设定。我需要的是该字段的值将变回0(如果它已更新为其他内容之前),如果有更新完成该行。 – 2013-03-22 22:50:27
啊,我明白了。那么,这是一个触发器的问题,就像@塞巴斯蒂安所暗示的那样。希望混合的答案可以帮助你。 – fedorqui 2013-03-22 22:54:44