发布网友 发布时间:2022-04-30 08:04
共3个回答
懂视网 时间:2022-04-30 12:25
* from teacher_grade; select * into outfile ‘d:/testmysql/result‘ from teacher_grade;注意:
可以自动创建文件,但是不能重写已有文件。
生成的文件格式:默认的采用行来区分记录,制表符区分字段。
为了满足某种特别的需求,会采用不同的分割方式。支持在导出数据时,设置记录与字段的分隔符。
通过如下的选项:
fields:设置字段选项
lines:设置行选项(记录选项)
默认值:
字段:fields terminated by ‘ ‘ enclosed by ‘‘ escaped by ‘\‘
记录:lines terminated by ‘
‘ starting by ‘‘
也可以根据实际情况自己设定。
select * into outfile ‘d:/testmysql/result‘
fields terminated by ‘ ‘ enclosed by ‘*‘
lines terminated by ‘
‘ starting by ‘start:‘
from teacher_grade;
注意:
常规的所有的记录,应该通过行来显示。
但是也有例外,例如保存二进制数据: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;
版权声明:本文为博主原创文章,未经博主允许不得转载。
MySQL增加,删除,更新,导出数据
标签:mysql 导入 增加 修改 删除
热心网友 时间:2022-04-30 09:33
你作这样的操作无非是因为误删了数据,要进行恢复原数据,又不想冲掉后来更新的新数据,按下面方法来做吧:热心网友 时间:2022-04-30 10:51
先把数据导入临时表,再按照你的要求用sql联合查询导入吧