mysql - 如何调用函数并在 SELECT 查询中复制返回值?
问题描述
我已经定义了一个CREATE_UUID()
生成 UUID 的函数。我想 INSERT INTO...SELECT 复制一个表,但有两个具有相同值的新列。
INSERT INTO Table (id, uuid1, uuid2)
SELECT ROWID, CREATE_UUID(), CREATE_UUID()
FROM AnotherTable
但是这样做会以不同的值调用该函数两次。我应该如何修改此查询,以便同一行中的两列不会有不同的值,但会为每一行生成一个新的 UUID?
解决方案
变体 1。
INSERT INTO `Table` (id, uuid1, uuid2)
SELECT ROWID, generate_uuid.new_uuid, generate_uuid.new_uuid
FROM AnotherTable
CROSS JOIN ( SELECT CREATE_UUID() new_uuid ) generate_uuid
但是,如果您插入大量行,则服务器可能会“优化”执行,并且所有行都可能获得相同的 UUID。
变体 2。
INSERT INTO `Table` (id, uuid1, uuid2)
SELECT ROWID, new_uuid, new_uuid
FROM ( SELECT ROWID, CREATE_UUID() new_uuid
FROM AnotherTable ) source_data;
在这种情况下,服务器可能会向后为每个插入的 value调用 new generation 。
变体 3。
INSERT INTO `Table` (id, uuid1, uuid2)
SELECT ROWID, @new_uuid := CREATE_UUID(), @new_uuid
FROM AnotherTable;
似乎是最安全的。但是不推荐使用用户定义的变量赋值。
这一切应有尽有。
推荐阅读
- mysql - Mysql:查询(子查询)中的查询不起作用
- amazon-web-services - 通过 Flutter App 的 PreSigned URL 将文件上传到 S3。但是当我下载它时文件已损坏
- java - 如何配置注释以映射 servlet?
- php - Laravel Bouncer 包示例代码不起作用
- sed - 使用 sed 替换所有匹配项的所有行匹配后的第一次出现
- pandas - python pandas plot 折线图在 pandas.plot hbar
- postgresql - Docker-compose 服务(sonarqube)无法访问其他服务(postgres)
- java - 下载管理器无法在真实设备上运行
- json - 以字符串形式检索 JSON 数据
- php - Wordpress wp_query - 我的 date_query 不适用于过滤即将发生的事件