MySQL进阶讲义
这一章我们开始进一步探讨MySQL
的使用,从MySQL
的介绍开始,接触MySQL
的安装、命令行的操作以及基本数据库连接工具的使用等,全面的认识和学习使用MySQL
数据库。
MySQL的用户管理
新建用户
-
登录MYSQL:
@>mysql -u root -p Enter password: #mysql完整的语法 @>mysql -P 端口号 -h mysql主机名\ip -u 用户名 -p密码 #举例:连接172.31.95.189:3306的mysql,用户名/密码:demo/123456 @>mysql -P 3306 -h 172.31.95.189 -u demo -p 123456 #登录后查看当前登录用户名: mysql>select user();
-
创建用户:
mysql> insert into mysql.user(Host, User, Password) -> values("localhost", "test", password("123456"));
这样就创建了一个名为:test 密码为:123456 的用户。
注意:此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录。
用户的类型
host 注释 示例 localhost 用户能够在 localhost
访问MySQLroot@localhost % 用户能够在 非localhost
访问 MySQLroot@% ip(指定ip) 用户能够在 指定ip
访问MySQLroot@172.31.95.168 具体例子一:
创建用户 demo_l,让demo_l能够在本地进行访问 在本地,访问(localhost)
-- 1. 创建一个用户,这个用户名字是 demo_l, 密码是 123456 ,规定这个用户只能在 'localhost' 使用 INSERT INTO mysql.user (HOST, USER, PASSWORD) VALUES ( 'localhost', 'demo_l', PASSWORD("123456") ) ; -- 2. 授权 demo 访问 ranzhi 数据库的所有的权限 GRANT ALL PRIVILEGES ON ranzhi.* TO demo_l@'localhost' IDENTIFIED BY '123456'; -- 3. 刷新所有的授权(上述两条语句每执行一条,均需要执行此语句刷新权限) FLUSH PRIVILEGES;
具体例子二:
创建用户 demo_a,让demo_a能够在本地电脑之外的任何电脑进行访问 在本地,访问(172.31.xx.xx)
-- 1. 创建一个用户,这个用户名字是 demo_a, 密码是 123456 ,规定这个用户能在 '%' 使用 (%代表本地电脑之外的任何电脑) INSERT INTO mysql.user (HOST, USER, PASSWORD) VALUES ( '%', 'demo_a', PASSWORD("123456") ) ; -- 2. 授权 demo 访问 ranzhi 数据库的所有的权限 GRANT ALL PRIVILEGES ON ranzhi.* TO demo_a@'%' IDENTIFIED BY '123456'; -- 3. 刷新所有的授权 FLUSH PRIVILEGES;
具体例子三:
创建用户 demo_ip,让demo_ip只能够在 ip = 172.31.95.188 进行访问, 在本地以及其他任何电脑无访问权限
-- 1. 创建一个用户,这个用户名字是 demo_ip, 密码是 123456 ,规定这个用户只能在 '192.168.17.129' 使用 INSERT INTO mysql.`user` (HOST, USER, PASSWORD) VALUES ( '192.168.17.129', 'demo_ip', PASSWORD("123456") ) ; -- 2. 授权 demo 访问 ranzhi 数据库的所有的权限 GRANT ALL PRIVILEGES ON ranzhi.* TO demo_ip@'192.168.17.129' IDENTIFIED BY '123456'; -- 3. 刷新所有的授权 FLUSH PRIVILEGES;
-
登录用户
使用刚刚创建的用户进行登录
mysql> exit; @> mysql -u test -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 6 Server version: 10.1.9-MariaDB mariadb.org binary distribution Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
用户授权
授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by '密码';
-
登录MySQL,需要用有ROOT权限的用户
@>mysql -u root -p Enter password:
-
为用户创建一个数据库
mysql>create database testDB;
-
grant语法
mysql> GRANT <privileges> ON <what> -> TO <user> [IDENTIFIED BY "<password>"] -> [WITH GRANT OPTION];
-
授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限)
mysql>grant all privileges on testDB.* to test@localhost identified by '123456'; mysql>flush privileges; ## 刷新系统权限表
-
如果想指定部分权限给一用户,可以这样来写
mysql>grant select, update on testDB.* to test@localhost identified by '123456'; mysql>flush privileges; ## 刷新系统权限表
-
授权test用户拥有所有数据库的某些权限
mysql>grant select, delete, update, create, drop on . to test@'%' identified by '123456'; mysql>flush privileges; ## test用户对所有数据库都有select, delete, update, create, drop 权限。
@"%"
表示对所有非本地主机授权,不包括localhost。(localhost地址设为127.0.0.1)对localhost授权:加上一句
grant all privileges on testDB.* to test@'localhost' identified by '123456'
;即可。权限关键字说明:
数据库/数据表/数据列权限:
Alter: 修改已存在的数据表(例如增加/删除列)和索引。
Create: 建立新的数据库或数据表。
Delete: 删除表的记录。
Drop: 删除数据表或数据库。
INDEX: 建立或删除索引。
Insert: 增加表的记录。
Select: 显示/搜索表的记录。
Update: 修改表中已存在的记录。全局管理MySQL用户权限:
file: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。特别的权限:
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录--其它什么也不允许做。
-
权限查询
--直接查询mysql.user表 mysql>select * from mysql.user where host='localhost' and user='test'; --查询授权 mysql>show grants for test@'localhost'; --查询结果: GRANT USAGE ON *.* TO 'test'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' --具备登录权限 GRANT ALL PRIVILEGES ON `ranzhi`.* TO 'test'@'localhost' --具备ranzhi数据库的所有权限
-
权限回收
--回收test用户的ranzhi数据库所有权限 REVOKE ALL PRIVILEGES ON `ranzhi`.* FROM 'test'@'localhost'
完整的实例
如果你需要添加 MySQL 用户,你只需要在 mysql 数据库中的 user 表添加新用户即可。
以下为添加用户的的实例,用户名为hr,密码为123456,并授权用户可进行 SELECT, INSERT 和 UPDATE操作权限:
root@host# mysql -u root -p
Enter password:*******
--创建一个数据库hrdb,采用utf-8为默认字符编码
mysql>CREATE DATABASE hrdb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Database changed
--从user表添加用户,且用户具备所有数据库的增、改、查权限
mysql> INSERT INTO mysql.user
(host, user, password,
select_priv, insert_priv, update_priv)
VALUES ('localhost', 'hr',
PASSWORD('123456'), 'Y', 'Y', 'Y');
Query OK, 1 row affected (0.20 sec)
--提交权限
mysql> FLUSH PRIVILEGES;
--将hrdb的所有权限授予hr@localhost用户
mysql> grant all privileges on hrdb.* to hr@'localhost' identified by '123456'
--将登录权限授予hr@localhost用户
mysql> GRANT USAGE ON *.* TO 'hr'@'localhost' IDENTIFIED BY 'guest123'
--提交权限
mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0.01 sec)
--查询user表
mysql> SELECT host, user, password FROM user WHERE user = 'hr';
+-----------+---------+------------------+
| host | user | password |
+-----------+---------+------------------+
| localhost | hr | 6f8c114b58f2ce9e |
+-----------+---------+------------------+
1 row in set (0.00 sec)
--查询grants
mysql>show grants for hr@localhost
在添加用户时,请注意使用MySQL提供的 PASSWORD() 函数来对密码进行加密。 你可以在以上实例看到用户密码加密后为: 6f8c114b58f2ce9e.
注意:在 MySQL5.7 中 user 表的 password 已换成了authentication_string。
注意:在注意需要执行 FLUSH PRIVILEGES 语句。 这个命令执行后会重新载入授权表。
如果你不使用该命令,你就无法使用新创建的用户来连接mysql服务器,除非你重启mysql服务器。
删除用户
-
登录MySQL,需要用有ROOT权限的用户
@>mysql -u root -p Enter password:
-
删除指定的用户、数据库和权限
#drop user将会删除mysql.user表数据 + 用户数据库 + 权限数据 mysql>drop user test #默认删除:test@'%',如无会报错 mysql>drop user test@'localhost' mysql>drop user test@'ip' #如果用delete from user......,则只删除mysql.user表,其他需要手动再删除 #否则当之后创建同名的用户时,将继承之前用户的相关权限和数据库 mysql>delete from user where User='test' and Host='localhost'; mysql>flush privileges; mysql>drop database testDB; ## 删除用户的数据库 mysql>drop user test@'%'; mysql>drop user test@ localhost;
修改指定用户密码
- 首先登录,然后修改用户的密码
mysql>update mysql.user set password=password('新密码') where User='test' and Host='localhost'
mysql>flush privileges;
其他操作
-
列出所有数据库
mysql>show database;
-
切换数据库
mysql>use '数据库名';
-
列出所有表
mysql>show tables;
-
显示数据表结构
mysql>describe 表名;
-
删除数据库和数据表
mysql>drop database 数据库名; mysql>drop table 数据表名;
Linux/UNIX上安装MySQL
Linux平台上推荐使用RPM包来安装MySQL,MySQL AB提供了以下RPM包的下载地址:
- MySQL - MySQL服务器。你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器。
- MySQL-client - MySQL 客户端程序,用于连接并操作MySQL服务器。
- MySQL-devel - 库和包含文件,如果你想要编译其它MySQL客户端,例如Perl模块,则需要安装该RPM包。
- MySQL-shared - 该软件包包含某些语言和应用程序需要动态装载的共享库(libmysqlclient.so*),使用MySQL。
- MySQL-bench - MySQL数据库服务器的基准和性能测试工具。
以下安装MySQL RMP的实例是在SuSE Linux系统上进行,当然该安装步骤也适合应用于其他支持RPM的Linux系统,如: Centos。
安装步骤如下:
使用root用户登陆你的Linux系统。
下载MySQL RPM包,下载地址为:MySQL 下载。
通过以下命令执行MySQL安装,rpm包为你下载的rpm包:
[root@host]# rpm -i MySQL-5.0.9-0.i386.rpm
以上安装mysql服务器的过程会创建mysql用户,并创建一个mysql配置文件my.cnf。
你可以在/usr/bin和/usr/sbin中找到所有与MySQL相关的二进制文件。所有数据表和数据库将在/var/lib/mysql目录中创建。
以下是一些mysql可选包的安装过程,你可以根据自己的需要来安装:
[root@host]# rpm -i MySQL-client-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-devel-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-shared-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-bench-5.0.9-0.i386.rpm
MySQL 的查询
基本查询
查询语法
SELECT table1.column, table2.column,...
FROM table1
WHERE ...
LIMIT 0, 1000;
查询示例:
-- 查询工资高于5000且部门不是100号的雇员的所有信息
SELECT
e.*
FROM
hr.employees e
WHERE e.SALARY > 5000
AND e.DEPARTMENT_ID <> 100 ;
查询示例:
-- 按部门编号(department_id)统计工资高于5000且部门不是100号的雇员,
-- 统计结果包括每个部门的 人数,最高工资、最低工资,平均工资、工资总和
-- 按部门人数 降序排列
SELECT
e.DEPARTMENT_ID,
COUNT(e.EMPLOYEE_ID) ct,
AVG(e.SALARY) gs,
SUM(e.salary) us,
MAX(e.salary) ms,
MIN(e.salary) ns
FROM
hr.employees e
WHERE e.SALARY > 5000
AND e.DEPARTMENT_ID <> 100
GROUP BY e.DEPARTMENT_ID
HAVING ct > 1
ORDER BY ct DESC ;
查询示例:
-- 按雇员经理(manager_id)和部门(department_id)统计
-- 工资高于5000且部门不是100号的雇员,统计每一组的人数和平均工资
-- 并按照人数降序,平均工资降序排列
SELECT
e.DEPARTMENT_ID,
e.MANAGER_ID,
COUNT(*) ct,
AVG(e.SALARY) gs
FROM
hr.employees e
WHERE e.SALARY > 5000
AND e.DEPARTMENT_ID <> 100
GROUP BY e.DEPARTMENT_ID,
e.MANAGER_ID
HAVING ct > 1
ORDER BY ct DESC,
gs DESC ;
多表查询
查询语法
SELECT table1.column, table2.column,...
FROM table1
INNER JOIN table2
ON table1.column1 = table2.column2;
查询示例
-- 查询每个雇员的编号、姓名和部门名称
SELECT
e.`EMPLOYEE_ID`,
e.`FIRST_NAME`,
d.`DEPARTMENT_NAME`
FROM
hr.`employees` e
INNER JOIN hr.`departments` d
ON e.`DEPARTMENT_ID` = d.`DEPARTMENT_ID` ;
多表相当于合作,就是一个表的数据内容不缺,缺乏了一部分存储在别的表中的字段。那么需要这些表精诚合作,谈好条件,得出结论。
INNER JOIN
连接谈判的各方(注意,这里不只是可以用 inner join
,还有 left join
, right join
, full join
。
ON
是谈判的条件。
查询示例:
-- 查询每个部门的具体信息:
-- 部门编号、部门名称、所在城市、所在州(省份)、邮编、街道
-- department_id, department_name,
-- city, state_province, postal_code, street_address
SELECT
d.`DEPARTMENT_ID`,
d.`DEPARTMENT_NAME`,
l.`CITY`,
l.`STATE_PROVINCE`,
l.`POSTAL_CODE`,
l.`STREET_ADDRESS`
FROM
hr.`departments` d
INNER JOIN hr.`locations` l
ON d.`LOCATION_ID` = l.`LOCATION_ID` ;
TOP-N 分析
TOP-N分析在MySQL中用 LIMIT
语句
示例1:
-- 查询所有雇员,按照雇员的工资进行降序排序,
-- 并从高到底列出前5名雇员信息。
SELECT
e.*
FROM
hr.`employees` e
ORDER BY e.`SALARY` DESC
LIMIT 5;
LIMIT 5
就是取出结果的前五条记录。
示例2:
-- 查询所有雇员,按照雇员的工资进行降序排序,
-- 并从高到底列出第9-13名雇员信息。
SELECT
e.*
FROM
hr.`employees` e
ORDER BY e.`SALARY` DESC
LIMIT 8, 5;
LIMIT 8,5
意思是 从第 8+1 条数据开始,连续取出5条。
这里,第一条开始,取10条,是LIMIT 0, 10
,注意,LIMIT
从0开始取记录。
综合练习示例
-- 按雇员经理(manager_id)和部门(department_id)统计
-- 工资高于5000且部门不是100号的雇员,统计每一组的人数和平均工资
-- 并按照人数降序,平均工资降序排列
-- 列出来 经理姓名,部门的名称,部门的城市,人数,平均工资
-- 列出 第2-6条
SELECT
CONCAT(M.FIRST_NAME, ' ', M.LAST_NAME) MANAGER_NAME,
d.DEPARTMENT_NAME,
l.CITY,
s.ct,
s.gs
FROM
(SELECT
e.DEPARTMENT_ID,
e.MANAGER_ID,
COUNT(*) ct,
AVG(e.SALARY) gs
FROM
hr.employees e
WHERE e.SALARY > 5000
AND e.DEPARTMENT_ID <> 100
GROUP BY e.DEPARTMENT_ID,
e.MANAGER_ID
HAVING ct > 1) S
/* S作为子查询,是一个拥有一堆ID的主表*/
INNER JOIN hr.departments d
ON s.DEPARTMENT_ID = d.DEPARTMENT_ID
/* 拉上 departments表,取出部门名称 */
INNER JOIN hr.locations l
ON d.location_id = l.location_id
/* 拉上 locations 表,取出城市 */
INNER JOIN hr.employees m
ON s.manager_id = m.EMPLOYEE_ID
/* 经理也是员工,大家想一下nancy怎么找出来的? 雇员的经理id,等于经理的 员工id */
ORDER BY ct DESC,
gs DESC
LIMIT 1, 5 ;
MySQL 导出数据
MySQL中你可以使用SELECT...INTO OUTFILE语句来简单的导出数据到文本文件上。
使用 SELECT ... INTO OUTFILE 语句导出数据
以下实例中我们将数据表 hrdb.employees 数据导出到 /tmp/tutorials.txt 文件中:
mysql> SELECT * FROM hrdb.employees INTO OUTFILE
->'d:\\xampp826\\mysql\\bin\\data\\empData.txt';
你可以通过命令选项来设置数据输出的指定格式,以下实例为导出 CSV 格式:
mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n';
在下面的例子中,生成一个文件,各值用逗号隔开。这种格式可以被许多程序使用。
SELECT a,b,a+b INTO OUTFILE '/tmp/result.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;
SELECT ... INTO OUTFILE 语句有以下属性:
- LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作,SELECT句法。为了将一个数据库的数据写入一个文件,使用SELECT ... INTO OUTFILE,为了将文件读回数据库,使用LOAD DATA INFILE。
- SELECT...INTO OUTFILE 'file_name'形式的SELECT可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此您必须拥有FILE权限,才能使用此语法。
- 输出不能是一个已存在的文件。防止文件数据被篡改。
- 你需要有一个登陆服务器的账号来检索文件。否则 SELECT ... INTO OUTFILE 不会起任何作用。
- 在UNIX中,该文件被创建后是可读的,权限由MySQL服务器所拥有。这意味着,虽然你就可以读取该文件,但可能无法将其删除。
导出表作为原始数据
mysqldump是mysql用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等。
使用mysqldump导出数据需要使用 --tab 选项来指定导出文件指定的目录,该目标必须是可写的。
以下实例将数据表 runoob_tbl 导出到 /tmp 目录中:
$ mysqldump -u root -p --no-create-info \
--tab=/tmp RUNOOB runoob_tbl
password ******
导出SQL格式的数据
导出SQL格式的数据到指定文件,如下所示:
$ mysqldump -u root -p RUNOOB runoob_tbl > dump.txt
password ******
以上命令创建的文件内容如下:
-- MySQL dump 8.23
--
-- Host: localhost Database: RUNOOB
---------------------------------------------------------
-- Server version 3.23.58
--
-- Table structure for table `runoob_tbl`
--
CREATE TABLE runoob_tbl (
runoob_id int(11) NOT NULL auto_increment,
runoob_title varchar(100) NOT NULL default '',
runoob_author varchar(40) NOT NULL default '',
submission_date date default NULL,
PRIMARY KEY (runoob_id),
UNIQUE KEY AUTHOR_INDEX (runoob_author)
) TYPE=MyISAM;
--
-- Dumping data for table `runoob_tbl`
--
INSERT INTO runoob_tbl
VALUES (1,'Learn PHP','John Poul','2007-05-24');
INSERT INTO runoob_tbl
VALUES (2,'Learn MySQL','Abdul S','2007-05-24');
INSERT INTO runoob_tbl
VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');
如果你需要导出整个数据库的数据,可以使用以下命令:
$ mysqldump -u root -p RUNOOB > database_dump.txt
password ******
如果需要备份所有数据库,可以使用以下命令:
$ mysqldump -u root -p --all-databases > database_dump.txt
password ******
--all-databases 选项在 MySQL 3.23.12 及以后版本加入。
该方法可用于实现数据库的备份策略。
将数据表及数据库拷贝至其他主机
如果你需要将数据拷贝至其他的 MySQL 服务器上, 你可以在 mysqldump 命令中指定数据库名及数据表。
在源主机上执行以下命令,将数据备份至 dump.txt 文件中:
$ mysqldump -u root -p database_name table_name > dump.txt
password *****
如果完整备份数据库,则无需使用特定的表名称。
如果你需要将备份的数据库导入到MySQL服务器中,可以使用以下命令,使用以下命令你需要确认数据库已经创建:
$ mysql -u root -p database_name < dump.txt
password *****
你也可以使用以下命令将导出的数据直接导入到远程的服务器上,但请确保两台服务器是相通的,是可以相互访问的:</p>
$ mysqldump -u root -p database_name \
| mysql -h other-host.com database_name
以上命令中使用了管道来将导出的数据导入到指定的远程主机上。
MySQL 导入数据
MySQL中可以使用两种简单的方式来导入MySQL导出的数据。
使用 LOAD DATA 导入数据
MySQL 中提供了LOAD DATA INFILE语句来插入数据。 以下实例中将从当前目录中读取文件 dump.txt ,将该文件中的数据插入到当前数据库的 mytbl 表中。
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
如果指定LOCAL关键词,则表明从客户主机上按路径读取文件。如果没有指定,则文件在服务器上按路径读取文件。
你能明确地在LOAD DATA语句中指出列值的分隔符和行尾标记,但是默认标记是定位符和换行符。
两个命令的 FIELDS 和 LINES 子句的语法是一样的。两个子句都是可选的,但是如果两个同时被指定,FIELDS 子句必须出现在 LINES 子句之前。
如果用户指定一个 FIELDS 子句,它的子句 (TERMINATED BY、[OPTIONALLY] ENCLOSED BY 和 ESCAPED BY) 也是可选的,不过,用户必须至少指定它们中的一个。
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl
-> FIELDS TERMINATED BY ':'
-> LINES TERMINATED BY '\r\n';
LOAD DATA 默认情况下是按照数据文件中列的顺序插入数据的,如果数据文件中的列与插入表中的列不一致,则需要指定列的顺序。
如,在数据文件中的列顺序是 a,b,c,但在插入表的列顺序为b,c,a,则数据导入语法如下:
mysql> LOAD DATA LOCAL INFILE 'dump.txt'
-> INTO TABLE mytbl (b, c, a);
使用 mysqlimport 导入数据
mysqlimport客户端提供了LOAD DATA INFILEQL语句的一个命令行接口。mysqlimport的大多数选项直接对应LOAD DATA INFILE子句。
从文件 dump.txt 中将数据导入到 mytbl 数据表中, 可以使用以下命令:
$ mysqlimport -u root -p --local database_name dump.txt
password *****
mysqlimport命令可以指定选项来设置指定格式,命令语句格式如下:
$ mysqlimport -u root -p --local --fields-terminated-by=":" \
--lines-terminated-by="\r\n" database_name dump.txt
password *****
mysqlimport 语句中使用 --columns 选项来设置列的顺序:
$ mysqlimport -u root -p --local --columns=b,c,a \
database_name dump.txt
password *****
mysqlimport的常用选项介绍
选项 | 功能 |
---|---|
-d or --delete | 新数据导入数据表中之前删除数据数据表中的所有信息 |
-f or --force | 不管是否遇到错误,mysqlimport将强制继续插入数据 |
-i or --ignore | mysqlimport跳过或者忽略那些有相同唯一 关键字的行, 导入文件中的数据将被忽略。 |
-l or -lock-tables | 数据被插入之前锁住表,这样就防止了, 你在更新数据库时,用户的查询和更新受到影响。 |
-r or -replace | 这个选项与-i选项的作用相反;此选项将替代 表中有相同唯一关键字的记录。 |
--fields-enclosed- by= char | 指定文本文件中数据的记录时以什么括起的, 很多情况下 数据以双引号括起。 默认的情况下数据是没有被字符括起的。 |
--fields-terminated- by=char | 指定各个数据的值之间的分隔符,在句号分隔的文件中, 分隔符是句号。您可以用此选项指定数据之间的分隔符。 默认的分隔符是跳格符(Tab) |
--lines-terminated- by=str | 此选项指定文本文件中行与行之间数据的分隔字符串 或者字符。 默认的情况下mysqlimport以newline为行分隔符。 您可以选择用一个字符串来替代一个单个的字符: 一个新行或者一个回车。 |
mysqlimport命令常用的选项还有-v 显示版本(version), -p 提示输入密码(password)等。
MySQL 的四处不同
- 用户 user@host
- 查询Top-N 用 Limit x 和 Limit x, y
- MySQL 默认用 反引号 '`' 键盘左上角第二个。反引号可以去掉。
- MySQL 对脚本要求低,可以执行的语句,不代表是对的。
访问虚拟机中Linux 的MySQL
- 在Linux中用命令行登录MySQL,创建用户,或者修改
'update user set host = '%' where user = 'root' and host = '127.0.0.1';' - 修改防火墙设置。需要关闭防火墙,或者自定义防火墙。
setup,关闭
setup,customize, forward, add Protocol and port (3306, tcp) - 重启MySQL
service mysqld restart
- 用本地的 SQLYog 连接 Linux的 MySQL