扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
在利用数据库开发时,常常会将一些表之间的数据互相导入。当然可以编写程序实现,但是,程序常常需要开发环境,不方便。最方便是利用sql语言直接导入。既方便而修改也简单。以下就是导入的方法。
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比禅城网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式禅城网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖禅城地区。费用合理售后完善,十载实体公司更值得信赖。
1、 表结构相同的表,且在同一数据库(如,table1,table2)
Sql :
复制代码代码如下:
insert into table1 select * from table2 (完全复制)
insert into table1 select distinct * from table2(不复制重复纪录)
insert into table1 select top 5 * from table2 (前五条纪录)
2、不在同一数据库中(如,db1 table1,db2 table2)
sql:
[code]
insert into db1.table1 select * from db2.table2 (完全复制)
insert into db1.table1 select distinct * from db2table2(不复制重复纪录)
insert into tdb1.able1 select top 5 * from db2table2 (前五条纪录)
3、表结构不同的表或复制部分纪录(如,dn_user,dn_user2)
a. 建一个新表[DN_UserTemp](在老表dn_user上增加一列)
mysql无论如何也做不到用一条语句给两张表插入数据。
理由:一个insert语句仅能在一个表中插入,这是语法的规定。
工具:mysql 5.6
步骤(即插入数据举例):
1、如user表有如下数据:
2、要将一条新数据,id为6,name为lilei插入表中,用如下语句:
insert into user(id,name) values (5,'lilei');
3、插入后结果:
一条语句同时插入两个表是做不到的
可以考虑在A表上建一个触发器,当向A表插入数据时,同时插入一条记录到B表
以mysql数据库为例分情况一一说明:两张表:insertTest和insertTest2,前者中有测试数据
create table insertTest(id int(4),name varchar(12));
insert into insertTest values(100,'liudehua');
insert into insertTest values(101,'zhourunfa');
insert into insertTest values(102,'zhouhuajian');
1.如果2张表的字段一致,并且希望插入全部数据,可以用这种方法:
INSERT INTO 目标表 SELECT * FROM 来源表;
insert into insertTest select * from insertTest2;
2.如果只希望导入指定字段,可以用这种方法:
INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表;
注意字段的顺序必须一致。
insert into insertTest2(id) select id from insertTest2;
3.如果您需要只导入目标表中不存在的记录,可以使用这种方法:
INSERT INTO 目标表
(字段1, 字段2, ...)
SELECT 字段1, 字段2, ...
FROM 来源表
WHERE not exists (select * from 目标表
where 目标表.比较字段 = 来源表.比较字段);
1.插入多条记录:
insert into insertTest2
(id,name)
select id,name
from insertTest
where not exists (select * from insertTest2
where insertTest2.id=insertTest.id);
2.插入一条记录:
insert into insertTest
(id, name)
SELECT 100, 'liudehua'
FROM dual
WHERE not exists (select * from insertTest
where insertTest.id = 100);
使用 dual 作表名,select 语句后面直接跟上要插入的字段的值。
4.将查询出来的数据并同其他变量一起插入新的数据表中
insert into t_supp_PurchPlan_s(PurPlanCode,itemcode,Speccode) select 'hello'as PurPlanCode,itemcode,speccode from b_item where id=8
直接将变量放到相应的位置即可(如上将固定的变量或动态变量放入即可)
insert all
into A (a,b,c)
values(value-a,value-b,value-c)
into B(d,e,f)
values(value-d,value-e,value-f)
select value-a,value-b,value-c,value-d,value-e,value-f
from TableX
where ...;
在数据库中创建存储过程,比如存储过程的名字叫做 test
在java中和正常使用sql的方法一样, sql = "call test(B1,B2)", B1和B2是假设你将要插入b表中的数据
假设b表的结构是(ID int auto_incremet, B1 int, B2 int)
假设a表的结构是(ID int)
CREATE test(B1 int, B2 int) #假设A1和A2是将要插入b表中的数据
BEGIN
declare new_id as int; #声明自增长所添加的ID
insert into b(B1,B2) values(B1,B2); #给b插入新的记录
select last_insert_id() into new_id; #取得新插入记录的ID
insert into a(ID) values(new_id); #把新插入的ID写入a表
select new_id; #如果需要的话存储过程返回新得到的ID给客户端
END
注意: 为什么推荐使用存储过程,而不是直接在java程序中使用select last_insert_id(); 因为这个函数是打开当前端口时,返回最后一个插入的自增长的ID, 如果不用存储过程,可能当前链接关闭,或有其他的应用也在其他有自增长ID的表中插入新的记录, 这时你取回的ID就是错误的。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流