一些mysql数据库的操作

  1. 导入数据库
    LOAD DATA INFILE 'C:\\Users\\Administrator\\Desktop\\phone.txt' REPLACE into table phonelist FIELDS TERMINATED BY '\t' (phone);

  2. 建立索引
    CREATE INDEX weiboindex ON shujuku (phone);

  3. 暂停,恢复某表的索引
    禁用:ALTER TABLE 表名 DISABLE KEYS;
    启用:ALTER TABLE 表名 ENABLE KEYS;

常用操作

复制并插入新表
insert into newtable (字段1,字段2) select 字段1,字段2 from oldtable;

导出表内容
SELECT 字段1,字段2 FROM table INTO OUTFILE ‘D:\mysql\table.txt’ character set utf8 ;

使用load语句导入数据。

最近在看有关SQL常用优化的方案,涉及到使用load语句导入大量数据到数据库,按照官方的说法:使用load语句要比使用insert语句将近快20倍的速度,平时开发中很少涉及导入大量数据,所以,平时都是使用insert语句导入。这里对load命令进行简单的总结。

进入MySQL后,使用命令:load data local infile ‘S:/tab_user.txt’ into table tab_user lines terminated by ‘\r\n’ ignore 1 lines;

该语句的语法如下:

基本语法:
load data [low_priority] [local] infile ‘file_name txt’ [replace | ignore]
into table tbl_name
[fields
[terminated by’t’]
[OPTIONALLY] enclosed by ‘’]
[escaped by’’ ]]
[lines terminated by’n’]
[ignore number lines]
[(col_name, )]

语法部分说明:load data infile语句从一个文本文件中以很高的速度读入一个表中。使用这个命令之前,mysqld进程(服务)必须已经在运行。为了安全原因,当读取位于服务器上的文本文件时,文件必须处于数据库目录或可被所有人读取。另外,为了对服务器上文件使用load data infile,在服务器主机上你必须有file的权限。

(1)、如果你指定关键词low_priority,那么MySQL将会等到没有其他人读这个表的时候,才把插入数据。可以使用如下的命令:
load data low_priority infile “S:/tab_user.txt” into table tab_user;

(2)、如果指定local关键词,则表明从客户主机读文件。如果local没指定,文件必须位于服务器上。

(3)、replace和ignore关键词控制对现有的唯一键记录的重复的处理。如果你指定replace,新行将代替有相同的唯一键值的现有行。如果你指定ignore,跳过有唯一键的现有行的重复行的输入。如果你不指定任何一个选项,当找到重复键时,出现一个错误,并且文本文件的余下部分被忽略。例如:

load data low_priority infile “S:/tab_user.txt” replace into table tab_user;
(4)、分隔符
(a) fields关键字指定了文件记段的分割格式,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项:

terminated by分隔符:意思是以什么字符作为分隔符
enclosed by字段括起字符
escaped by转义字符
terminated by描述字段的分隔符,默认情况下是tab字符(\t) 
enclosed by描述的是字段的括起字符。
escaped by描述的转义字符。默认的是反斜杠(backslash:\ )  

例如:load data infile "S:/tab_user.txt" replace into table tab_user (id,name) terminated by',' ignore 1 lines;(,作为分隔符)
(b)lines 关键字指定了每条记录的分隔符默认为’\n’即为换行符
如果两个字段都指定了那fields必须在lines之前。如果不指定fields关键字缺省值与如果你这样写的相同: fields terminated by’\t’ enclosed by ’ ‘’ ‘ escaped by’\’
如果你不指定一个lines子句,缺省值与如果你这样写的相同: lines terminated by’\n’
例如:load data infile “s:/tab_user.txt” replace into table test fields terminated by ‘,’ lines terminated by ‘/n’;
(5)、load data infile 可以按指定的列把文件导入到数据库中。 当我们要把数据的一部分内容导入的时候,需要加入一些栏目(列/字段/field)到MySQL数据库中,以适应一些额外的需要。比方说,我们要从Access数据库升级到MySQL数据库的时候
下面的例子显示了如何向指定的栏目(field)中导入数据:
load data infile “s:/tab_user.txt” into table tab_user(id, name);
(6)、当在服务器主机上寻找文件时,服务器使用下列规则:
(a)如果给出一个绝对路径名,服务器使用该路径名。
(b)如果给出一个有一个或多个前置部件的相对路径名,服务器相对服务器的数据目录搜索文件。
(c)如果给出一个没有前置部件的一个文件名,服务器在当前数据库的数据库目录寻找文件。
例如: /myfile txt”给出的文件是从服务器的数据目录读取,而作为“myfile txt”给出的一个文件是从当前数据库的数据库目录下读取。
注意:字段中的空值用\N表示

如下面例子所示:创建数据表tab_user,有两个属性。如下所示:

在S盘下,tab_user.txt文件如下:

进入数据库后:使用命令:

load data local infile 'S:/tab_user.txt' into table tab_user lines terminated by '\r\n' ignore 1 lines;

以上命令的解释:从客户主机上S盘下读取tab_user.txt文件数据,每行以回车换行作为分隔符,同时忽略第一行的数据,
插入数据表tab_user。(这里的属性没有知道,默认是以\t作为分隔符)。
也可以这样指定:fields terminated by ‘\t’,说明,txt文件中,各属性以\t作为分割。命令如下:
load data local infile ‘S:/tab_user.txt’ into table tab_userfields terminated by '\t’lines terminated by ‘\r\n’ ignore 1 lines;

mysqlimport

mysql 命令中有 load data ,mysql还有一个可执行文件 mysqlimport,这两个命令可以从文件中把格式化的数据导入数据库,如果有一个包含大数据量的文件,可以实现快速的数据导入。

mysqlimport 可以看做是为 LOAD DATA INFILE SQL语句提供了一个命令行界面,他们大部分的参数选项是一致的,由 SELECT into outfile 导出的文件,也可以由 mysqlimport 导入。

mysqlimport 需要的文件格式与 load data 差不多,有兴趣的同学可以去研究一下。这里给出它的基本语法:

mysqlimport -u root -pPassword [–local] dbname filename.txt [OPTION]
其中,“Password”参数是root用户的密码,必须与-p选项紧挨着;“–local”是在本地计算机中查找文本文件时使用的(指定 --local 后,文本文件可以放在任何地方进行导入,否则只能放在mysql的data目录下);“dbname”参数表示数据库的名称;“filename.txt”参数指定了文本文件的路径和称,文件里的数据插入到文件名去掉后缀后剩余名字对应的表中;“OPTION”为可选参数选项,其常见的取值有:

–fields-terminated-by=字符串:设置字符串为字段之间的分隔符,可以为单个或多个字符。默认值为制表符“\t”。

–fields-enclosed-by=字符:设置字符来括住字段的值,只能为单个字符。

–fields-optionally-enclosed-by=字符:设置字符括住CHAR、VARCHAR和TEXT等字符型字段,只能为单个字符。

–fields-escaped-by=字符:设置转义字符,默认值为反斜线“\”。

–lines-terminated-by=字符串:设置每行数据结尾的字符,可以为单个或多个字符,默认值为“\n”。

–ignore-lines=n:表示可以忽略前n行。

总结:特别注意命令语法的说明,以及命令的解释。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值