首页 文章

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

提问于
浏览
4

我有一个表,我添加了一个名为 phone 的列 - 该表还将id设置为auto_increments的主键 . 如何在电话列中插入随机值,赢得't be duplicated. The following UPDATE statement did insert random values, but not all of them unique. Also, I' m未售出我也正确地转换了 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    |                |
+------------+--------------+------+-----+---------+----------------+

4 回答

  • 0

    我将通过生成一个(临时)表来解决这个问题,该表包含您需要的范围内的数字,然后循环遍历您希望提供随机数的表中的每个记录 . 从临时表中选择一个随机元素,用该表更新表,然后将其从临时表中删除 . 不漂亮,也不快......但易于开发且易于测试 .

  • 5

    试试这个

    UPDATE Ballot SET phone = FLOOR(50000000 * RAND()) * id;
    
  • 2

    您是否尝试过创建手机,然后检查该列中是否已存在该值?

  • 0
    -- 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

相关问题