导出数据

将检索到的数据,保存到服务器的文件内。

通过:select * into outfile '文件地址' from xxx;

select * from teacher_grade; select * into outfile 'd:/testmysql/result' from teacher_grade;

40d99d49825f6248e2afe6b13e473b68.png

注意:

可以自动创建文件,但是不能重写已有文件。

生成的文件格式:默认的采用行来区分记录,制表符区分字段。

为了满足某种特别的需求,会采用不同的分割方式。支持在导出数据时,设置记录与字段的分隔符。

通过如下的选项:

fields:设置字段选项

lines:设置行选项(记录选项)

默认值:

字段:fields terminated by '/t' enclosed by '' escaped by '//'

记录:lines terminated by '/n' starting by ''

也可以根据实际情况自己设定。

select * into outfile 'd:/testmysql/result' fields terminated by '/t' enclosed by '*' lines terminated by '/n' starting by 'start:' from teacher_grade;

51d02a7ec85a86ee899bc2f0222eece6.png

注意:

常规的所有的记录,应该通过行来显示。

但是也有例外,例如保存二进制数据:Blob binary使用into dumpfile

select * into dumpfile 'd:/testmysql/resultbin' from teacher_grade limit 1; select * into outfile 'd:/testmysql/result' from teacher_grade limit 1;

49bedaeaa9d4ad7e2f3c310d0333d52b.png

增加数据

insert into tbl_name (字段列表) values (值列表)

可以不将所有的字段都插入数据。

如果说需要完成部分字段的插入,需要必须存在字段列表。

没有插入部分字段,可以使用下面的set语句。

insert into teacher_grade (name) values ('黄继光'); insert into teacher_grade set name='黄继光'; insert into teacher_grade set t_name='张三丰',c_name='太极拳'; insert into teacher_grade (t_name,c_name) values ('黄继光','射击'),('黄飞鸿','飞毛腿');

插入数据时,如果主键冲突会如何?

默认有主键约束,不会插入成功;

但是可以在insert语法内,可以进行控制。

在主键冲突时,改成执行更新操作。

insert into teacher_grade (id,t_name,c_name) values (13,'张无忌','太极拳') on duplicate key update t_name='张无忌',c_name='太极拳';

注意:这里update后面不跟set。

流程:

先判断是否插入成功?

如果失败(主键冲突|唯一索引冲突),则进行更新操作。

插入(失败) 更新 更新完毕

插入数据源:

除了使用自定义的数据外,还可以使用select语句查询到数据,作为插入的数据源。

insert into teacher_grade (t_name,c_name) select t_name,c_name from teacher_grade;

数据可以来源于其他数据表,要求字段数量和类型一致即可。

insert into teacher_grade (t_name,c_name) select t_name,class_name from teacher;

通过强制使用default关键字或者default()函数使用默认值。

alter table teacher modify days tinyint(3) unsigned default 10; insert into teacher values (10,'xxx','yyy',default), (11,'xxx','yyy',default(days));

replace

主键或唯一索引冲突,则替换,否则插入。

insert into teacher values(1,'老子','儒家',30);

如果插入冲突,先删除旧记录,再插入新纪录。

replace into teacher values(1,'老子','儒家',30);

主键不冲突,直接插入。

replace into teacher values(15,'老子','儒家',30);

导入select * into outfile 'file'命令导出的内容

load data infile 'file' into table tbl_name;

注意:

导入时,涉及到数据增加,需要考虑是否冲突的情况。

通常可以在导出时,将主键导出成null。在导入时,利用自动增长的特性,可以形成新的主键。

select null,t_name,class_name,days from teacher;

desc teacher; alter table teacher modify t_id int auto_increment; alter table teacher drop primary key; alter table teacher modify t_id int primary key auto_increment;

load data infile 'd:/testmysql/result' into table teacher;

删除数据

允许使用条件:删除符合条件的数据。

允许使用limit:限制删除的记录数,limit n;

常见场景:

limit配合order by来使用。(先将结果排序,再删除固定数量的记录数。)

delete from teacher order by days limit 10;

如果只有order by是没有意义的。

允许连接删除

允许使用类似的join语法,同时删除多个表内的记录。

create table one( one_id int, one_data char, public_field int ); create table two( two_id int, two_data char, public_field int ); insert into one values(1,'a',10); insert into one values(2,'b',20); insert into one values(3,'c',30); insert into two values(2,'b',20); insert into two values(3,'c',30); insert into two values(4,'d',40); select * from one; select * from two;

02165224d8ae0c1a861e33f6d6ef5075.png

select * from one join two using(public_field);

先提供表名,再提供连接条件。

delete from one,two using one join two on one.public_field=two.public_field where one_id=2;

30f5cabdaa41702ecad5c8f7c36ee456.png

如果不使用连接,则需要分别删除。

delete one

delete two

删除表所有数据

delete from test;

清空表

truncate teacher;

重建自定增长的主键,不会返回删除的记录数。

b783e4f86c6e486c5f4723a0186dd1fb.png

delete与truncate的区别

delete:逐行删除。

truncate:删除表,新建表。

更新数据

replace

insert onduplicate key update

条件更新,排序更新,限制条数

update ... where ... order by ... limit ...

09be0194ff069b6e1fdf23bb497f9f5d.png

多表更新

fe5e8bc8cd12fe6217efd95f722ed17b.png

update one join two on one.public_field = two.public_field set one_data='x',two_data= 'y' where one_id=3;

e4ec9865cb42acfe78abd7db5526f2d0.png

评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!