有沒有一種方法可以在每當該行更新而不使用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. PDO更新設置字段值爲0?
- 2. MySQL更新CASE更新字段爲「0」
- 3. SQL更新後,字段設置爲0 [PHP/MySQL]
- 4. MySQL語句總是將值設置爲0當更新設置
- 5. 在MySQL字段設置的所有值設置爲0
- 6. 爲什麼我的MySQL字段在更新時重置爲空?
- 7. 將MySQL字段設置爲auto_increment
- 8. 將MySQL字段設置爲另一個
- 9. 爲MySQL設置當前時間字段
- 10. 更新表設置字段
- 11. 當值爲空時,MySQL將字段設置爲當前日期
- 12. MySQL查詢將字段設置爲0而不是空白字符串
- 13. 將mysql值從'0'更新爲'1'?
- 14. 將-1設置爲0,同時在MySQL中添加
- 15. 更新查詢不起作用,並將字段更改爲0
- 16. 更新行=行 - 1行設置爲0
- 17. 將小數點字段的Mysql更新語句設置爲NULL或空白
- 18. mysql的更新,如果字段值爲0的心不是
- 19. 更新時間戳字段在MySQL
- 20. mySQL,將字段設置爲另一個字段的值
- 21. 在mysql數據庫配置中將命令超時更新爲0
- 22. 流星 - 將文檔設置字段更新爲undefined
- 23. solrj原子更新 - 如何將字段設置爲空?
- 24. mysql:如何在字段更新時自動更新時間戳
- 25. 密碼字段更新爲空時,設置保存php和ajax
- 26. 無法更新Django的日期時間字段設置爲null
- 27. mysql字段更新
- 28. 設置笨MySQL的日期時間列時間()始終將其設置爲0
- 29. 重新設置所有用戶點字段爲0
- 30. MySQL View:如何將計算字段的默認值設置爲0?
領域已經有默認值設定。我需要的是該字段的值將變回0(如果它已更新爲其他內容之前),如果有更新完成該行。 – 2013-03-22 22:50:27
啊,我明白了。那麼,這是一個觸發器的問題,就像@塞巴斯蒂安所暗示的那樣。希望混合的答案可以幫助你。 – fedorqui 2013-03-22 22:54:44