Mysql插入数据的多种方式

最近复习mysql的时候,看到一些以前不曾看到数据插入方式,于是我这些进行了一些总结

1.插入单条数据

方式一:

INSERT INTO 

[表名]([列名],[列名]) 

 VALUES

([列值],[列值]));

INSERT INTO 

[表名]

 VALUES

([列值],[列值]));--这样写列值的个数要与表中字段的个数一样

扫描二维码关注公众号,回复: 4564045 查看本文章
insert into login(username,password,role,sno) values('好汉3','123',1,'0004');

2.插入多条

方式一:

一条INSERT语句插入批量数据的写法:

INSERT INTO 

[表名]([列名],[列名]) 

 VALUES

([列值],[列值])),

([列值],[列值])),

([列值],[列值]));

注意:这并不是标准的SQL语法,因此只能在MySQL中使用

 insert into login(username,password,role,sno) values('suan','123',1,'0002'),('好汉1','123',1,'0003');

建议:

在程序中,插入批量数据时,最好使用这种通过一条INSERT语句来一次性插入的方式。这样可以避免程序和数据库建立多次连接,从而增加服务器负荷。

方式二:

insert into login(username,password,role,sno) select '好汉4','123',1,'0005' union all select '好汉5','123',1,'0006';

方式三: 

通过存储过程的方式,来一次性插入多条语句

例如:

drop procedure if exists myproc;--如果存在,则删了这个存储过程

--创建存储过程 myproc
delimiter $$ --定义分割符
create procedure myproc()
BEGIN	
 declare num int;--声明变量
 set num=1;  --设置初始值
 while num<100 do
   insert into login(username,password,role,sno)
   values(concat('108好汉',num),'123456',1,CONCAT('00',num));
 set num=num+1;
END
while ;
end$$


--查询存储过程
--如果是在命令终端用一下的这个语句,因为定义了结束符为这个$$
call myproc()$$
--mysql工具中使用
call myproc();

--查询表
select * from login$$--终端中使用

select * from login;--mysql工具中使用 

--删除存储过程
drop procedure myproc$$ --终端


3.判断数据是否存在的,插入数据方式

语法为:

 INSERT INTO table ( field1 , field2 , fieldn ) SELECT 'field1' , 'field2' , 'fieldn' FROM DUAL WHERE NOT EXISTS ( SELECT field FROM table WHERE field = ? )

insert into login(username,password,role,sno) 
select '好汉6','123',1,'0007' 
from dual where not exists (select sno from login where sno = '0007');

注意:其中dual是虚拟表,不要物理创建

参考:https://blog.csdn.net/u012660464/article/details/75529216

        https://blog.csdn.net/tomcat_2014/article/details/53377924?utm_source=blogxgwz0

猜你喜欢

转载自blog.csdn.net/wangli1281/article/details/83506793