带有last_insert_id()的Mysql多行插入 – 选择语句
发布时间:2021-01-19 01:06:59 所属栏目:MsSql教程 来源:网络整理
导读:好.所以缺点是,我试图做一个INSERT SELECT,例如: START TRANSACTION; INSERT INTO dbNEW.entity (commonName,surname) SELECT namefirst,namelast FROM dbOLD.user; SET @key = LAST_INSERT_ID(); INSERT INTO dbNEW.user (userID,entityID,other) SELECT us
|
好.所以缺点是,我试图做一个INSERT SELECT,例如: START TRANSACTION; INSERT INTO dbNEW.entity (commonName,surname) SELECT namefirst,namelast FROM dbOLD.user; SET @key = LAST_INSERT_ID(); INSERT INTO dbNEW.user (userID,entityID,other) SELECT user_id,@key,other FROM dbOLD.user; COMMIT; 当然@key不会从每个插入返回每个后续的LAST_INSERT_ID(),而只返回最后一个插入的ID. 基本上,我将旧的USER表拆分为ENTITY和USER,如: dbOLD.user +-------------+---------------------+------+-----+------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+---------------------+------+-----+------------+----------------+ | user_id | int(10) unsigned | NO | PRI | NULL | auto_increment | | namefirst | varchar(20) | NO | | | | | namelast | varchar(20) | NO | | | | | other | varchar(10) | NO | | | | +-------------+---------------------+------+-----+------------+----------------+ dbNEW.user +-------------+---------------------+------+-----+------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+---------------------+------+-----+------------+----------------+ | userID | int(10) unsigned | NO | PRI | NULL | auto_increment | | entityID | int(10) unsigned | NO | MUL | 0 | | | other | varchar(10) | NO | | | | +-------------+---------------------+------+-----+------------+----------------+ dbNEW.entity +--------------+---------------------+------+-----+------------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------------------+------+-----+------------+----------------+ | entityID | int(10) unsigned | NO | PRI | NULL | auto_increment | | commonName | varchar(20) | NO | | | | | surname | varchar(20) | NO | | | | +--------------+---------------------+------+-----+------------+----------------+ 我为什么要这样做?基本上,我有一个“STORE”实体,它将拥有“USERS”共有的字段,例如地址和电话号码.因此,任何“ENTITY”可能没有多个地址(运输,计费,邮寄),也没有多个电话号码(传真,主要,小区,家庭)可能有其他方法可以实现这一点,但这是我的解决方案结束了. 来自旧数据库的STORE和USERS需要保留旧的PK并获得额外的ENTITY fk.如何在不进行转储和手动编辑的情况下执行此操作? 解决方法对于最后一个查询,请使用此选项INSERT INTO dbNEW.`user` (userID,other
FROM
(
SELECT user_id,@key + @rn entityID,other,@rn := @rn + 1
FROM (select @rn:=0) x,dbOLD.`user`
order by user_id
) y;
MySQL中的LAST_INSERT_ID()是批处理中创建的第一个ID,与SQL Server中的SCOPE_IDENTITY()不同,后者是最后一个ID.由于它是第一行,我们使用变量@rn递增每一行,从第一行的加法= 0开始. (编辑:潍坊站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Windows Server 2008 R2配置IIS7.5+PHP Manager+PHP5.3+Mys
- sql – Doctrine 2.1其中外键id =?,编辑:在Doctrine 2.2中
- sql-server – MERGE目标表的一个子集
- 微星nForce2主板K7N2G-ILSR面面观
- sql-server – 帮助安装SQL Server 2017 – VS Shell安装失
- Telnet是什么命令 Telnet命令的使用方法介绍
- sql – 在运行更高级的查询时关闭对象时不允许操作
- OP宽带网络娱乐旗舰,领航黄金周网上娱乐新生活
- sql-server – 收缩Sql Server数据库
- sql-server – 创建缓存(延迟假脱机)CTE结果的计划指南


