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();

希望它能让你入门。