2011-03-09 43 views
2

h是否有任何方法可以更新特定記錄的mysql表的所有列:一次轉到特定值。將mysql表的所有列設置爲一個特定值

例如,我有一個大約有70列的表,它們在創建表時默認設置爲0,當我通過PHPmyadmin添加一條新記錄時,只填寫一個或兩個值並提交所有其他字段設置爲0,但我想所有的字段設置爲1 很多次,所以我需要的所有列設置爲1,分別通過phpMyAdmin的

爲了加速連接起來的過程, 我試圖

UPDATE tablename SET * = '1' WHERE id = '2',但它不起作用。

如果任何人都可以在類似的路線上提供解決方案,那就太好了。

編輯:


有沒有在SQL語句中指定的所有70列的方式嗎?那我在找什麼。我知道如何正常更新SQL語句中的指定列。謝謝。

+0

如果它讓你指定所有列,你最終會id列更新爲1的!你不是更好的改變列的默認值爲1. – JohnC 2011-03-09 12:03:33

+0

你的意思是所有70列是相同的數據類型?這聽起來很不典型。 – 2011-03-09 12:05:43

+0

爲方便起見,您可以將id列作爲第71列。是的,除了id列以外,所有列都具有相同的數據類型。所有列都具有數據類型SMALLINT,除id列以外的所有列都只有值1或0。它是一個權限,ACL表。 – Amitabh 2011-03-09 12:08:10

回答

2

您必須在更新語句中命名每個列。

+0

嗨,謝謝,yep我知道我可以通過指定所需的列更新表 – Amitabh 2011-03-09 12:00:55

+0

意味着你必須指定所需的列,不存在UPDATE mytable SET DEFAULT VALUES WHERE ID = 12 – fredt 2011-03-09 12:36:17

3

如果您正在尋找一種方法來使用簡短的簡短語句將所有70列更新爲單個值,那麼我建議您編寫一個存儲過程來執行更新。這樣你只需要寫出完整的更新語法一次,並且可以通過調用存儲過程反覆使用它。

CREATE PROCEDURE update_all_columns (p_new_value SMALLINT, p_id INT) ... 

CALL update_all_columns(1,2); 

另一個訣竅是使用information_schema.columns表來生成更新語句,使編碼存儲過程的繁瑣。

事情是這樣的:

SELECT concat('UPDATE ', 
table_name, 
' SET ', 
group_concat(column_name separator ' = p_new_value, '), 
' = p_new_value', 
' WHERE id = p_id;') as sql_stmt 
FROM information_schema.columns 
WHERE table_schema = 'your_schema' 
AND table_name = 'tablename' 
AND column_name != 'id' 
相關問題