mysql 如何更新所有行的列并为每一行更新不同的列值
mysql how to update a column of all rows and for each row a different column value
这是一个示例 table:
id name code
----------------
1 n1
2 n2
3 n3
我想用不同的值更新每一行的代码列,所以对于 ID 1 的行,我想为代码 'zb6DXBfJ' 添加此值,对于行 ID 2 'NV6Nx4St',对于行 id 3,代码列的这个值 'q23ZMACc'。所以我的最终 table 应该是这样的:
id name code
----------------
1 n1 zb6DXBfJ
2 n2 NV6Nx4St
3 n3 q23ZMACc
试试这个
UPDATE Table_Name WHERE id = desired_id SET code = desired_code;
当然,您需要根据需要替换 Table_Name、desired_id 和 desired_code。
UPDATE TableName
SET Code = CASE
WHEN id = 1 THEN 'zb6DXBfJ'
WHEN id = 2 THEN 'NV6Nx4St'
WHEN id = 3 THEN 'q23ZMACc'
END;
根据您的代码来源,您可以尝试以下方法之一:
如果您的代码来自另一个 table,您可以创建一个程序来 "match" 两个 table 的每一行以更新代码。这是一个例子:
首先创建 tables(您已经拥有的,以及带有代码的)
CREATE TABLE table1 (
id INT(6) UNSIGNED PRIMARY KEY,
name VARCHAR(300) NOT NULL,
code VARCHAR(300));
CREATE TABLE table2 (
id INT(6) UNSIGNED PRIMARY KEY,
code VARCHAR(300) NOT NULL);
INSERT INTO table1 (id, name) VALUES
(1, 'n1'),
(2, 'n2'),
(3, 'n3');
INSERT INTO table2 (id, code) VALUES
(1, 'zb6DXBfJ'),
(2, 'NV6Nx4St'),
(3, 'q23ZMACc');
然后创建实际过程
delimiter //
CREATE PROCEDURE assign_strings()
BEGIN
DECLARE _id INT DEFAULT 0;
DECLARE str VARCHAR(300);
DECLARE cur CURSOR FOR SELECT id FROM table1;
open cur;
myloop:LOOP
fetch cur into _id;
SELECT code INTO str FROM table2 WHERE id = _id;
UPDATE table1 SET code = str WHERE id = _id;
end loop myloop;
close cur;
END //
delimiter ;
您现在可以调用程序
CALL assign_strings();
请注意,我不知道您检索这些代码的逻辑。这里我假设 table2.id 有 table1.id 的代码。有点笨,但你的逻辑可能更复杂。
如果您的代码只是随机字符串(非唯一),您可以只使用函数而不是像这样的过程:
DELIMITER //
CREATE FUNCTION get_random_string()
RETURNS VARCHAR(300)
BEGIN
RETURN 'Your_random_string';
END//
DELIMITER ;
请注意,您需要实施自己的随机字符串策略。您可以使用带有随机数和子字符串的 MD5 函数之类的东西……无论您需要什么。
您现在可以像这样在更新语句中直接调用此函数:
UPDATE table1 set code = get_random_string();
希望它能让你入门。
这是一个示例 table:
id name code
----------------
1 n1
2 n2
3 n3
我想用不同的值更新每一行的代码列,所以对于 ID 1 的行,我想为代码 'zb6DXBfJ' 添加此值,对于行 ID 2 'NV6Nx4St',对于行 id 3,代码列的这个值 'q23ZMACc'。所以我的最终 table 应该是这样的:
id name code
----------------
1 n1 zb6DXBfJ
2 n2 NV6Nx4St
3 n3 q23ZMACc
试试这个
UPDATE Table_Name WHERE id = desired_id SET code = desired_code;
当然,您需要根据需要替换 Table_Name、desired_id 和 desired_code。
UPDATE TableName
SET Code = CASE
WHEN id = 1 THEN 'zb6DXBfJ'
WHEN id = 2 THEN 'NV6Nx4St'
WHEN id = 3 THEN 'q23ZMACc'
END;
根据您的代码来源,您可以尝试以下方法之一:
如果您的代码来自另一个 table,您可以创建一个程序来 "match" 两个 table 的每一行以更新代码。这是一个例子:
首先创建 tables(您已经拥有的,以及带有代码的)
CREATE TABLE table1 (
id INT(6) UNSIGNED PRIMARY KEY,
name VARCHAR(300) NOT NULL,
code VARCHAR(300));
CREATE TABLE table2 (
id INT(6) UNSIGNED PRIMARY KEY,
code VARCHAR(300) NOT NULL);
INSERT INTO table1 (id, name) VALUES
(1, 'n1'),
(2, 'n2'),
(3, 'n3');
INSERT INTO table2 (id, code) VALUES
(1, 'zb6DXBfJ'),
(2, 'NV6Nx4St'),
(3, 'q23ZMACc');
然后创建实际过程
delimiter //
CREATE PROCEDURE assign_strings()
BEGIN
DECLARE _id INT DEFAULT 0;
DECLARE str VARCHAR(300);
DECLARE cur CURSOR FOR SELECT id FROM table1;
open cur;
myloop:LOOP
fetch cur into _id;
SELECT code INTO str FROM table2 WHERE id = _id;
UPDATE table1 SET code = str WHERE id = _id;
end loop myloop;
close cur;
END //
delimiter ;
您现在可以调用程序
CALL assign_strings();
请注意,我不知道您检索这些代码的逻辑。这里我假设 table2.id 有 table1.id 的代码。有点笨,但你的逻辑可能更复杂。
如果您的代码只是随机字符串(非唯一),您可以只使用函数而不是像这样的过程:
DELIMITER //
CREATE FUNCTION get_random_string()
RETURNS VARCHAR(300)
BEGIN
RETURN 'Your_random_string';
END//
DELIMITER ;
请注意,您需要实施自己的随机字符串策略。您可以使用带有随机数和子字符串的 MD5 函数之类的东西……无论您需要什么。
您现在可以像这样在更新语句中直接调用此函数:
UPDATE table1 set code = get_random_string();
希望它能让你入门。