将列添加到表并根据另一列的值设置值

时间:2017-04-03 12:06:00

标签: php sql sql-server

我遇到了以下问题:我有一个包含多个列的表,现在我需要在此表中添加一个新列,然后用另一列的加密(md5)值填充它。

1)

ALTER TABLE myTable ADD md5_city VARCHAR(255);

2)

"UPDATE myTable SET md5_city = " . md5($cityValue) . ";"

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

您的方法实际上将列添加到表中。另一种方法是即时计算:

ALTER TABLE myTable ADD md5_city as md5(col);

仅在您需要时计算该值。

答案 1 :(得分:0)

看起来你在这里有3个单独的任务:

  1. 添加列
  2. 更新现有值
  3. 计算要插入的新值
  4. 任务1:允许存储MD5

    您的代码很好,但您应该限制列的大小,因为MD5的长度只有32个字符

    ALTER TABLE myTable ADD md5_city CHAR(32);
    

    任务2:更新现有行

    假设您使用的是MSSQL且col包含< 8000个字符(如果是NVARCHAR则为4000)

    以下SQL将为所有现有行计算col的MD5,并将其存储在md5_city列中。这应该直接在SQL中作为一次性运行,以更新表中已有的行:

    UPDATE myTable SET md5_city = CONVERT(VARCHAR(32), HashBytes('MD5', col), 2)
    

    任务3:从PHP执行对表的更新时保持列更新

    在您的PHP中,对于给定行的col的任何更新都应更新city_md5,例如:

    $sql = "UPDATE myTable SET col = '{$x}', MD5_city = '" .md5($x). "' WHERE ID = 1";