MySQL增加,删除,更新,导出数据

来源:转载


导出数据

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

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

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

注意:
可以自动创建文件,但是不能重写已有文件。
生成的文件格式:默认的采用行来区分记录,制表符区分字段。

为了满足某种特别的需求,会采用不同的分割方式。支持在导出数据时,设置记录与字段的分隔符。
通过如下的选项:
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;

<http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxjb2RlIGNsYXNzPQ=="hljs sql">注意:
常规的所有的记录,应该通过行来显示。
但是也有例外,例如保存二进制数据: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;

增加数据

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;

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;


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

删除表所有数据
delete from test;

清空表
truncate teacher;
重建自定增长的主键,不会返回删除的记录数。

delete与truncate的区别
delete:逐行删除。
truncate:删除表,新建表。

更新数据

replace
insert onduplicate key update
条件更新,排序更新,限制条数
update ... where ... order by ... limit ...

多表更新

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

 



分享给朋友:
您可能感兴趣的文章:
随机阅读: