Mysql为多行插入中的不同行设置不同的UUID

时间:2015-11-28 22:52:31

标签: mysql sql

我想在多次插入期间为每一行生成不同的uuid。

首先我创建了一个新表:

CREATE TABLE uuid_test(
    `id`       INTEGER      INTEGER AUTO_INCREMENT PRIMARY KEY,
    `col1`     VARCHAR(20)  DEFAULT '',
    `uuid_col` VARCHAR(200) DEFAULT '',
    `col2`     INTEGER      DEFAULT 0,
    `col3`     BIT(1) DEFAULT 1,
    UNIQUE (`col1`, `uuid_col`, `col2`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

然后我尝试添加触发器

DELIMITER $$
CREATE TRIGGER test_trigger
BEFORE INSERT ON uuid_test
FOR EACH  ROW  
BEGIN
    SET NEW.uuid_col := UUID() ;
END
$$

然后我尝试使用isert select

插入两列
INSERT INTO kudos_voting(col1, col2) select col1, col2 from table2;

结果:

mysql> select * from uuid_test;
+----+------------+--------------------------------------+------------+-------+
| id | col1       | uuid_col                             | col2       | col3  |
+----+------------+--------------------------------------+------------+-------+
|  3 | gjsfgjks   | 3205a742-961f-11e5-be40-086266261210 |          4 |     1 |
|  4 | gjsfgjks   | 3206ccaf-961f-11e5-be40-086266261210 |          4 |     1 |
+----+------------+--------------------------------------+------------+-------+

在这里,我面临两个疑问。

  1. 为什么每次都插入相同的uuid
  2. 虽然我添加了UNIQUE (col1uuid_colcol2),那么为什么它不会抛出任何错误 在插入相同的值时。

1 个答案:

答案 0 :(得分:1)

请更加小心:uuids是不同的(3205a742 vs 3206ccaf - 比较第一部分)。所以一切都像你建议的那样,不应该有任何错误。