数据库基础知识

来源:互联网 发布:qsv转换mp4软件 编辑:程序博客网 时间:2024/05/22 07:44

1.MySQL 数据库怎样把一个表的数据插入到另一个表   本文出自 “夜狼” 博客http://yangfei520.blog.51cto.com/1041581/381568

如果2张表的字段一致,并且希望插入全部数据,可以用这种方法:
  INSERT INTO 目标表 SELECT * FROM 来源表;
insert into insertTestselect *from insertTest2;

如果只希望导入指定字段,可以用这种方法:
 INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表;
 注意字段的顺序必须一致。
insert into insertTest2(id)select idfrom insertTest2;

如果您需要只导入目标表中不存在的记录,可以使用这种方法:
 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);                                                                                                                                               


 

2.MySQL创建并调用存储过程
带输入参数的存储过程
create procedure proc2(in a int,in b VARCHAR(255))
begin
select * from ss as s where s.user_id = a and s.username = b;
end

//第一种调用方式
call proc2(3,'c');

//第二种调用方式
set @a = 3;
set @b = 'c';
call proc2(@a,@b);


带输出参数的存储过程
create procedure proc3(out a INT)
begin
select count(*) from ss into a;
end

call proc3(@b);
select @b as 'bbb';

3.MySQL中case when的一些用法
//end后跟的为列名,如果没有else的话条件没有达到的值会设为NULL

select user_id,
case
when username ='a'  then 'aa'
when username ='c' then 'cc'
else username
end username
from ss

select user_id,
case username
when 'a'  then 'aa'
when 'c' then 'cc'
else username
end username
from ss


4.游标的概念
游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。

5.union和union all区别

在数据库中,unionunion all关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。

union在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。

如: 
 select * from test_union1 
   union 
 select * from test_union2 
     这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。 
    而union all只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。 
     从效率上说,union all要比union快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用union all

向表中快速插入数据

INSERT into ss(username,password,email)
select username,password,email from ss  union all
select username,password,email from ss  union all
select username,password,email from ss  union all
select username,password,email from ss




原创粉丝点击