MySQL Alter table,添加具有唯一随机值的列

标签 mysql alter

我有一个表,我添加了一个名为 phone 的列 - 该表还有一个 id 设置为 auto_increments 的主键。如何在电话列中插入一个随机值,该值不会被复制。以下 UPDATE 语句确实插入了随机值,但并非所有值都是唯一的。另外,我不卖我也正确地转换了 phone 字段,但是在尝试将它设置为带有 ALTER TABLE 命令的 int(11) 时遇到了问题(主要是,它运行正确,但是当添加带有新电话号码的行时,插入的值被转换为不同的号码)。

UPDATE Ballot SET phone = FLOOR(50000000 * RAND()) + 1;

表格规范

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| phone      | varchar(11)  | NO   |     | NULL    |                |
| age        | tinyint(3)   | NO   |     | NULL    |                |
| test       | tinyint(4)   | NO   |     | 0       |                |
| note       | varchar(100) | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

最佳答案

-- tbl_name: Table
-- column_name: Column
-- chars_str: String containing acceptable characters
-- n: Length of the random string
-- dummy_tbl: Not a parameter, leave as is!
UPDATE tbl_name SET column_name = (
  SELECT GROUP_CONCAT(SUBSTRING(chars_str , 1+ FLOOR(RAND()*LENGTH(chars_str)) ,1) SEPARATOR '')
  FROM (SELECT 1 /* UNION SELECT 2 ... UNION SELECT n */) AS dummy_tbl
);

-- Example
UPDATE tickets SET code = (
  SELECT GROUP_CONCAT(SUBSTRING('123abcABC-_$@' , 1+ FLOOR(RAND()*LENGTH('123abcABC-_$@'))     ,1) SEPARATOR '')
  FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) AS dummy_tbl
);

Random string in MySQL

关于MySQL Alter table,添加具有唯一随机值的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4661144/

相关文章:

Mysql Count查询优化

php - 字符 : ' (single quotation) when trying to save to mySql 的问题

MySQL触发器,每分钟总结

c# - 从代码调用时Mysql存储过程结果不同

mysql - 如何将我数据库中的所有表更改为 UTF8 字符集?

mysql - 计算具有特定列的所有行并按周分组

node.js - Sails.js 迁移 - 更改(不更新表列)

Oracle Alter命令重命名现有列错误环

sql - 如何更改 SQL 中表中列的默认值设置?

mysql - 用很少的可用磁盘空间改变巨大的 MySQL 表