频道栏目
首页 > 数据库 > MySQL > 正文
MySQL增加,删除,更新,导出数据
2015-08-12 10:02:32         来源:琴弦上、漫步  
收藏   我要投稿

导出数据

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

通过: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;

\<喎"/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;

\

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 数据
上一篇:创建IPC端口失败:拒绝访问
下一篇:mysql嵌套查询
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站