2011-03-09 44 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' 
相关问题