MySQL基础

1.数据库创建:

方法:下载稳定版本的二进制包执行安装脚本,指定安装参数,修改配置文件:

1.1安装前准备:

  下载:5.6_64位二进制包

  解压到指定目录:

[root@localhost src]#[ -d /usr/local/mysql ] && mv mysql /usr/local/mysql_old
[root@localhost src]# tar zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz 
[root@localhost src]#mv mysql-5.6.36-linux-glibc2.5-x86_64/ /usr/local/mysql

  建立MySQL用户

[root@localhost src]# useradd -s /sbin/nologin mysql

1.2初始化数据库(安装)

[root@localhost src]# cd /usr/local/mysql
[root@localhost mysql]# mkdir -p /data/mysql ; chown -R mysql:mysql /data/mysql
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql/

1.3配置文件

拷贝主配置文件
[root@localhost mysql]# cp support-files/my-default.cnf /etc/my.cnf
修改其中内容:
[mysqld]
#innodb_buffer_poor_size = 128M
log_bin = shiyan
basedir = /usr/local/mysql
data
dir = /data/mysql
socket = /tmp/mysql.sock

join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
拷贝启动脚本文件并修改其属性
[root@localhost mysql]#
cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql]#
chmod 755 /etc/init.d/mysqld
修改启动脚本需要修改的地方有 “datadir=/data/mysql” 
[root@localhost mysql]# vim /etc/init.d/mysqld

1.4 把启动脚本加入系统服务项,并设定开机启动,启动mysql

[root@localhost mysql]# chkconfig --add mysqld
[root@localhost mysql]# chkconfig mysqld on
[root@localhost mysql]# service mysqld start

如果启动不了,请到 /data/mysql/ 下查看错误日志,这个日志通常是主机名.err. 检查mysql是否启动的命令为:

[root@localhost mysql]# ps aux |grep mysqld    //输出两行以上结果
[root@localhost mysql]# ps aux |grep mysqld   //出现端口信息的输出:3306

到此,MySQL数据库已经成功安装好!

 


 

2.常用操作:

2.1 连接

在本地以管理员身份登录:mysql -uroot        (首次进入是不需要密码的)

[root@ipi ~]# mysql -uroot 
             //这里-u指定用户登录,-h指定远程服务器ip或域名,-S指定sock ,-P端口,-p密码(-p后可以不跟,则在交互模式输入(建议))
... mysql>

退出使用quit或exit即可

注:mysql登录命令路径加入系统命令#echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile && source /etc/profile

2.2 设置密码:

[root@ipi ~]# mysqladmin -uroot password '123456'
接下来登录就要加入密码参数

 [root@ipi ~]# mysql -uroot -p
  Enter password:
  ...

  mysql>

2.3 查看基本信息

2.3.1 查看当前的库

mysql> show databases;

2.3.2 查询某个库的表

mysql> use mysql         //use切换数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;

2.3.3 查看某个表的全部字段

mysql> desc t1;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(10)  | YES  |     | NULL    |       |
| name  | char(20) | YES  |     | NULL    |       |
| phone | int(12)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

更详细的查看:

  mysql> show create table t1\G;           //加\G让显示看起来更清晰
  *************************** 1. row ***************************
  Table: t1
  Create Table: CREATE TABLE `t1` (
  `id` int(10) DEFAULT NULL,
  `name` char(20) DEFAULT NULL,
  `phone` int(12) DEFAULT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1
  1 row in set (0.00 sec)

 2.3.4 查看当前的版本,用户,库

  mysql> select version();
  +------------+
  | version() |
  +------------+
  | 5.6.36-log |
  +------------+
  1 row in set (0.00 sec)


mysql> select user(); +----------------+ | user() | +----------------+ | root@localhost | +----------------+ 1 row in set (0.00 sec) mysql> select database(); +------------+ | database() | +------------+ | shiyanlou | +------------+ 1 row in set (0.00 sec)

2.3.5 查看MySQL的当前状态

mysql> show status;
+-----------------------------------------------+-------------+
| Variable_name                                 | Value       |
+-----------------------------------------------+-------------+
| Aborted_clients                               | 20          |
| Aborted_connects                              | 0           |
............
............

2.3.6 查看mysql参数

mysql> show variables;            //参数太多未列出,大多是有配置文件设置的,部分参数支持在线修改

2.3.7修改MySQL参数

mysql> show variables like 'max_connect%';           //这里%相当于shell中的*,表示统配
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 100   |
| max_connections    | 151   |
+--------------------+-------+
2 rows in set (0.00 sec)

mysql> set global max_connect_errors = 1000;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'max_connect%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 1000  |
| max_connections    | 151   |
+--------------------+-------+
2 rows in set (0.00 sec)

2.3.8 查看当前MySQL服务器的队列

  查看队列在日常管理中较为频繁,因为使用它可以看到MySQL当前在干什么,也可以发现锁表情况,如下所示:

mysql> show processlist;
+----+--------+--------------------+--------+---------+------+-------+------------------+
| Id | User   | Host               | db     | Command | Time | State | Info             |
+----+--------+--------------------+--------+---------+------+-------+------------------+
|  6 | zabbix | 192.168.1.75:58810 | zabbix | Sleep   |  100 |       | NULL             |
|  8 | zabbix | 192.168.1.75:58812 | zabbix | Sleep   |  101 |       | NULL             |
|  9 | zabbix | 192.168.1.75:58813 | zabbix | Sleep   |    0 |       | NULL             |
| 31 | zabbix | 192.168.1.75:59385 | zabbix | Sleep   |   56 |       | NULL             |
| 32 | zabbix | 192.168.1.75:59387 | zabbix | Sleep   |   53 |       | NULL             |
| 34 | zabbix | 192.168.1.75:59388 | zabbix | Sleep   |    3 |       | NULL             |
| 35 | zabbix | 192.168.1.75:59389 | zabbix | Sleep   |    1 |       | NULL             |
| 36 | zabbix | 192.168.1.75:59390 | zabbix | Sleep   |    2 |       | NULL             |
| 37 | zabbix | 192.168.1.75:59391 | zabbix | Sleep   |   22 |       | NULL             |
| 38 | zabbix | 192.168.1.75:59392 | zabbix | Sleep   |   22 |       | NULL             |
| 39 | zabbix | 192.168.1.75:59395 | zabbix | Sleep   |  101 |       | NULL             |
| 40 | zabbix | 192.168.1.75:59396 | zabbix | Sleep   |    0 |       | NULL             |
| 47 | root   | localhost          | db1    | Query   |    0 | init  | show processlist |
+----+--------+--------------------+--------+---------+------+-------+------------------+

 

2.4 创建

2.4.1 新库:

mysql> create database db1;
Query OK, 1 row affected (0.00 sec)

带字符集和排序规则的创建

> CREATE DATABASE db1  DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Query OK, 1 row affected (0.00 sec)

2.4.2 新表:

mysql> use db1;
Database changed
mysql> create table t1 (id int(4),name char(40),iphone int(12));
Query OK, 0 rows affected (0.12 sec)

2.4.3 创建用户:

mysql> grant all on *.* to user1 identified by '123456';
Query OK, 0 rows affected (0.04 sec)
//all 表示所有权限,.有两个*,前一个表所有数据库,后一个表所有的表,这里的user1创建到了默认的localhost,若给其他机器上的某个用户授权使用@'ip',如下
mysql> grant all on db1.* to 'user2'@'192.168.1.75' identified by '123456';
Query OK, 0 rows affected (0.05 sec)
//%代替主机表示所有主机,如下
mysql> grant all on db1.* to 'user3'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

2.5 增删改查等常用操作

2.5.1为刚才的t1表插入相关数据

mysql> insert into t1 (id,name,iphone) values (1,'ipi','021123456');     //insert into tablename (列名1,...) values (值);
Query OK, 1 row affected (0.01 sec)

mysql> select * from t1;
+------+------+----------+
| id   | name | iphone   |
+------+------+----------+
|    1 | ipi  | 21123456 |
+------+------+----------+
1 row in set (0.00 sec)

  注:可以看到name字段值加了单引号,这是由于他们是char字符型,此外还有varchar、text、date等。不加单引号的有int、float、double等;

2.5.2 更改某一行

mysql> update db1.t1 set name='abm' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

  删除某一行:DELETE FROM 表名字 WHERE 条件;

 

2.5.3 count()统计条目

mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        1 |
+----------+
1 row in set (0.00 sec)

2.5.4 清空某个表的数据

mysql> truncate table t1;                  
Query OK, 0 rows affected (0.12 sec)

2.5.5 删除表

mysql> drop table t1;
Query OK, 0 rows affected (0.07 sec)

2.5.6 删除数据库

mysql> drop database db1;
Query OK, 0 rows affected (0.05 sec)

 2.5.7 重命名一张表

RENAME TABLE 原名 TO 新名字;
mysql> rename table t1 to t2; Query OK, 0 rows affected (0.08 sec)

也可以用alter table 原名 to新名

 mysql> alter table t2 rename t1;
 Query OK, 0 rows affected (0.03 sec)

 

2.5.8 对列进行操作        修改数据类型必须小心,因为这可能会导致数据丢失。在尝试修改数据类型之前,请慎重考虑。

  增加一列(新增加的列,被默认放置在这张表的最右边)

mysql> alter table table_name add column 数据类型 约束;

或: ALTER TABLE 表名字 ADD 列名字 数据类型 约束;

要将新增的列放到指定的位置:
  放到第一列:alter table table_name add column 数据类型 约束 frist; //最后加frist
  放到指定列后:alter table table_name add column 数据类型 约束 after 列;

 

  删除一列:alter table 表名字 drop 列名字;

  重命名一列:ALTER TABLE 表名字 CHANGE 原列名 新列名 数据类型 约束;          (注意:“数据类型”不可省略,否则重命名失败)

  改变数据类型:ALTER TABLE 表名字 MODIFY 列名字 新数据类型;

 

 


 

 3.SQL的约束

 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。

3.1建立含约束的表

  下载实验需要的sql,在SQL3目录下有MySQL-03-01.sql,之中包含的代码可以新建一个数据库mysql_shiyan,之中有三张表department、employee、project包含了各种约束,

  [root@ipi tools]# git clone https://github.com/shiyanlou/SQL3

  接下来导入脚本:

mysql> source /tools/SQL3/MySQL-03-01.sql
Query OK, 1 row affected (0.00 sec)

Database changed
Query OK, 0 rows affected (0.05 sec)

Query OK, 0 rows affected (0.05 sec)

Query OK, 0 rows affected (0.06 sec)

  导入检查:

mysql> use mysql_shiyan
Database changed
mysql> show tables;
+------------------------+
| Tables_in_mysql_shiyan |
+------------------------+
| department             |
| employee               |
| project                |
+------------------------+
3 rows in set (0.00 sec)

 3.2 主键

primary key用于约束表中的一行,作为这行的唯一标识,在一张表中通过主键可以准确定位一行,主键不能重复不可为空。

  创建表时约束列为主键:

mysql> create table t1 (id int(4)primary key,name char(20));

  为以创建的没有约束的表添加主键约束

mysql> alter table t1 add primary key (id);

  删除主键约束

mysql> alter table t1 drop primary key;

  在数据表已存在的情况下,且无主键,添加新的字段作为主键,并将该字段移到表格的第一列

mysql>alter table t1 add column iphone int(12) not null after id;
这是在id列后添加iPhone列

mysql> alter table t1 add column addr char(20) not null  first;
这是在添加addr列,并设置为首列

然后设置再用设置主键命令:
mysql> alter table t1 add primary key (id);

 

  也可以这样定义主键:

mysql> alter table t1 add constraint my_key primary key (id);
以后my_key就是主键id的索引

 3.3 默认约束

  意思是当有default约束的列,插入数据为空时,将使用默认值

  在MySQL-03-01.sql中,这段代码包含了默认约束的设置:

  people_num INT(10) DEFAULT '10',                   //people_num默认值为10

 

 3.4 唯一性约束 UNIQUE

CREATE TABLE employee
(
  id      INT(10) PRIMARY KEY,
  name    CHAR(20),
  age     INT(10),
  salary  INT(10) NOT NULL,
  phone   INT(12) NOT NULL,
  in_dpt  CHAR(20) NOT NULL,
  UNIQUE  (phone),                      //如果插入的值有重复则会报唯一性约束的错误
  CONSTRAINT emp_fk FOREIGN KEY (in_dpt) REFERENCES department(dpt_name)          //外键设置。意思是emp_fk是自定义的外键名,in_dpt为外键,参考列为department的det_name列
 );

 

3.5 外键约束 ROREIGN KEY

  能确保数据完整性,也可以表示表之间的关系。a()表 见3.4代码

      例如有两个表  ,把b的外键属性去掉对编程也没影响,A中的b要么为空,要么是B中的值
        A(a,b)   :a为主键,b为外键(来自于B.b)   
        B(b,c,d)   :b为主键    

mysql> insert into employee (id,name,salary,phone,in_dpt) value (01,'ipi',1000,0211111,'dpt1');
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`mysql_shiyan`.`employee`, CONSTRAINT `emp_fk` FOREIGN KEY (`in_dpt`) 
REFERENCES `department` (`dpt_name`)
报错,无法添加或更新子行:外键约束失败 是因为department表中没有dpt1

 

3.6 非空约束

  如3.4代码所示,not null 为非空约束的写法,默认不能为null。在MySQL中违反非空约束不会有报错,但会有警告。

  salary  INT(10) NOT NULL,
  phone   INT(12) NOT NULL,

   

 

在完成之上的MySQL基础用法后,请完成以下题目:https://www.shiyanlou.com/courses/9/labs/2769/document

答案:

新建一个文件:test.sql

CREATE DATABASE gradesystem;
USE gradesystem;
CREATE TABLE student( sid
int(10) AUTO_INCREMENT PRIMARY KEY, sname char(20), gender ENUM('male','female'));
CREATE TABLE course( cid
int(10) AUTO_INCREMENT PRIMARY KEY, cname char(20));
CREATE TABLE mark( mid
int(10) AUTO_INCREMENT PRIMARY KEY, sid int(10), cid int(10), score int(10), FOREIGN KEY(sid) REFERENCES student(sid), FOREIGN KEY(cid) REFERENCES course(cid));
insert into student(sname,gender) values(
'Tom','male'),('Jack','male'),('Rose','female'); insert into course(cname) values('math'),('physics'),('chemistry'); insert into mark(sid,cid,score) values(1,1,80),(2,1,85),(3,1,90), (1,2,60),(2,2,90),(3,2,75),(1,3,95),(2,3,75),(3,3,85); 输入如下命令: mysql -u root < test.sql

 


 

4.   select语句详解

  现在我们来下载新的实验代码:git clone https://github.com/shiyanlou/SQL4(请先删除上一节我们创建的数据库,drop database mysql_shiyan)

  mysql登录,在sql执行行依次输入source path/MySQL-04-01.sql 和MySQL-04-02.sql

mysql> source MySQL-04-01.sql;
mysql> source MySQL-04-02.sql;

 

基本的select语句

  select * from table_name;    查询表中所有内容

  select name,age from table_name;    只查询表中指定的name、age列内容

  where限制:

  select 要查询的列名 from 表名字 where 限制条件;         精确查询:比如说where 列名=‘ xxx ’

  SELECT name,age FROM employee WHERE age>25;      数字约束条件查询

mysql> SELECT name,age FROM employee WHERE age>25;
+------+------+
| name | age  |
+------+------+
| Tom  |   26 |
| Jim  |   35 |
| Alex |   26 |
| Ken  |   27 |
| Joe  |   31 |
+------+------+
5 rows in set (0.00 sec)

 

4.1 “and” 与“or

  从单词表面意思你就可以理解它的意义,where后可以不止一条限制,可以用“and”或“or”来连接;

#筛选出 age 小于 25,或 age 大于 30
SELECT name,age FROM employee WHERE age<25 OR age>30;
#筛选出 age 大于
25,且 age 小于 30 SELECT name,age FROM employee WHERE age>25 AND age<30;

  如果需要包含25和30就用between

SELECT name,age FROM employee WHERE age BETWEEN 25 AND 30 ;

 

 4.2 "IN"和"NOT IN"

  如字面意思,用于筛选“在”或“不在”某个范围内的结果,比如说我们要查询在dpt3或dpt4的人:

SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');
查询不在dpt3和dpt4中的人只需要把IN换为NOT IN即可。

 

4.3  通配符

  关键字 LIKE 在SQL语句中和通配符一起使用,通配符代表未知字符。SQL中的通配符是 _ % 。其中 _ 代表一个未指定字符,% 代表不定个未指定字符。

   比如,要只记得电话号码前四位数为1101,而后两位忘记了,则可以用两个 _ 通配符代替:

mysql> select * from employee where phone like '1101__';
+----+------+------+--------+--------+--------+
| id | name | age  | salary | phone  | in_dpt |
+----+------+------+--------+--------+--------+
|  9 | Joe  |   31 |   3600 | 110129 | dpt2   |
| 10 | Mike |   23 |   3400 | 110110 | dpt4   |
+----+------+------+--------+--------+--------+
2 rows in set (0.01 sec)

 

 4.4  对结果进行排序

  order by按某一列结果的默认升序排列,使用asc和desc指定升序或降序排列

  比如,我们按salary降序排列,SQL语句为:

mysql> select * from employee order by salary desc;
+----+------+------+--------+--------+--------+
| id | name | age  | salary | phone  | in_dpt |
+----+------+------+--------+--------+--------+
| 11 | Jobs | NULL |   3600 |  19283 | dpt2   |
|  9 | Joe  |   31 |   3600 | 110129 | dpt2   |
|  7 | Ken  |   27 |   3500 | 654321 | dpt1   |
|  8 | Rick |   24 |   3500 | 987654 | dpt3   |

   BINARY:由于字符串类型的数据对大小写并不敏感。这意味着,对于大小写不同其他都一样的列,排序后的结果都不会更改。这种情况下,可以使用BINARY强制执行区分大小写的排序功能,如:ORDER BY BINARY col_name。

4.5 SQL内置函数和计算

  

  其中 COUNT 函数可用于任何数据类型(因为它只是计数),而 SUM 、AVG 函数都只能对数字类数据类型做计算,MAX 和 MIN 可用于数值、字符串或是日期时间数据类型。

  具体举例,比如计算出salary的最大、最小值,用这样的一条语句:

mysql> select  max(salary) as max_salary,min(salary) from employee;              //as 可以对值重命名,省略不写as只写重名也行
+------------+-------------+
| max_salary | min(salary) |
+------------+-------------+
|       3600 |        2500 |
+------------+-------------+
1 row in set (0.00 sec)

 

 4.6 子查询

  上面讨论的 SELECT 语句都仅涉及一个表中的数据,然而有时必须处理多个表才能获得所需的信息。

  例如:想要知道名为 "Tom" 的员工所在部门做了几个工程。员工信息储存在 employee 表中,但工程信息储存在project 表中。

mysql> select of_dpt,count(proj_name) count_project from project 
       where of_dpt in (select in_dpt from employee where name='Tom');              //括号内的子查询查到Tom所在的部门,用于查询的where条件
+--------+---------------+
| of_dpt | count_project |
+--------+---------------+
| dpt4   |             2 |
+--------+---------------+
1 row in set (0.05 sec)        

 

 4.7 连接查询

  在处理多个表时,子查询只有在结果来自一个表时才有用。但如果需要显示两个表或多个表中的数据,这时就必须使用连接 (join) 操作。

  连接的基本思想是把两个或多个表当作一个新的表来操作,如下:

mysql> select id,name,people_num from employee,department where employee.in_dpt = department.dpt_name order by id; //通过两个表中相同属性的列起关联,查询到了来自两个表的数据
+----+------+------------+
| id | name | people_num |
+----+------+------------+
|  1 | Tom  |         15 |
|  2 | Jack |         12 |
|  3 | Rose |         10 |
|  4 | Jim  |         11 |
|  5 | Mary |         12 |
|  6 | Alex |         11 |
|  7 | Ken  |         11 |
|  8 | Rick |         10 |
|  9 | Joe  |         12 |
| 10 | Mike |         15 |
| 11 | Jobs |         12 |
| 12 | Tony |         10 |
+----+------+------------+
12 rows in set (0.00 sec)

  另一个连接语句格式是使用 JOIN ON 语法,刚才的语句等同于:

mysql> SELECT id,name,people_num FROM employee JOIN department ON 
    employee.in_dpt = department.dpt_name ORDER BY id; //join on 与where 语句的连接执行结果相同

 4.8正则(REGEXP)查询 

  格式如下:regexp 后可以跟正则表达式

mysql> SELECT * FROM pet WHERE name REGEXP '^b';


如果你想强制使REGEXP比较区分大小写,使用BINARY关键字使其中一个字符串变为二进制字符串。该查询只匹配名称首字母的小写‘b’
mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b';

 本节练习:使用连接查询的方式,查询出各员工所在部门的人数与工程数,工程数命名为 count_project。(连接3个表,并使用COUNT内置函数)

mysql> SELECT name, in_dpt, people_num, COUNT(proj_num) AS count_project 
    FROM employee,department,project
    where employee.in_dpt=department.dpt_name and employee.in_dpt=project.of_dpt
    GROUP BY name; 或

  mysql> SELECT name, in_dpt, people_num, COUNT(proj_num) AS count_project FROM employee
      JOIN department ON employee.in_dpt=department.dpt_name
      JOIN project ON employee.in_dpt=project.of_dpt
      GROUP BY name;

  4.9 其他查询

  limit 按限制输出查询

  例子:查询某列的最大值所在的行

# 显示price这一列最大值对应的行,子查询表示最大的col3的值,利用where查到相关数据
mysql> SELECT col1, col2, col3
    -> FROM   t1
    -> WHERE  col3=(SELECT MAX(col3) FROM t1);
#如果运用limit就可以省去子查询 mysql> SELECT col1, col2, col3 -> FROM t1 -> ORDER BY col3 DESC -> LIMIT 1;

  


 

5.数据库管理

 5.1 索引

  索引是一种与表有关的结构,它的作用相当于书的目录,可以根据目录中的页码快速找到所需的内容。可以大大加快查询速度。

  建立索引:

  mysql> ALTER TABLE 表名字 ADD INDEX 索引名 (列名);
  或:  CREATE INDEX 索引名 ON 表名字 (列名);

查看创建的索引用:
mysql> show index from table_name;

 

5.2 视图

  从一个或多个表中导出来的表,是一种虚拟存在的表。

  注意理解视图是虚拟的表:

    >数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中;
    >使用视图查询数据时,数据库系统会从原来的表中取出对应的数据;
    >视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变;
    >在使用视图的时候,可以把它当作一张表

  创建一个视图:

CREATE VIEW 视图名(列a,列b,列c) AS SELECT 列1,列2,列3 FROM 表名字;
mysql> select * from employee;
+----+------+------+--------+--------+--------+
| id | name | age  | salary | phone  | in_dpt |
+----+------+------+--------+--------+--------+
|  1 | Tom  |   26 |   2500 | 119119 | dpt4   |
|  2 | Jack |   24 |   2500 | 120120 | dpt2   |
|  3 | Rose |   22 |   2800 | 114114 | dpt3   |
|  4 | Jim  |   35 |   3000 | 100861 | dpt1   |
|  5 | Mary |   21 |   3000 | 100101 | dpt2   |
|  6 | Alex |   26 |   3000 | 123456 | dpt1   |
|  7 | Ken  |   27 |   3500 | 654321 | dpt1   |
|  8 | Rick |   24 |   3500 | 987654 | dpt3   |
|  9 | Joe  |   31 |   3600 | 110129 | dpt2   |
| 10 | Mike |   23 |   3400 | 110110 | dpt4   |
| 11 | Jobs | NULL |   3600 |  19283 | dpt2   |
| 12 | Tony | NULL |   3400 | 102938 | dpt3   |
+----+------+------+--------+--------+--------+
12 rows in set (0.00 sec)

mysql> create view employ (col1,col2) as select id,name from employee;
Query OK, 0 rows affected (0.06 sec)

mysql> select * from employ;
+------+------+
| col1 | col2 |
+------+------+
|    1 | Tom  |
|    2 | Jack |
|    3 | Rose |
|    4 | Jim  |
|    5 | Mary |
|    6 | Alex |
|    7 | Ken  |
|    8 | Rick |
|    9 | Joe  |
|   10 | Mike |
|   11 | Jobs |
|   12 | Tony |
+------+------+
12 rows in set (0.03 sec)
执行示例

 

5.3 数据管理

  备份

  mysql备份用mysqldump命令,具体用法如下

#mysqldump -uroot -p123456 testdb > /tmp/test.sql

  恢复

#mysql -uroot -p123456 testdb < /tmp/test.sql

 

  导出数据:

    是把数据库某个表中的数据保存到一个文件之中。导出语句基本格式为:

SELECT 列1,列2 INTO OUTFILE '文件路径和文件名' FROM 表名字;

 

  导入数据:

    和导出相反首先将数据文件导出保存到文件

    然后在MySQL命令行导入:

MySQL>LOAD DATA INFILE '文件路径和文件名' INTO TABLE 表名字;
  • 如果指定local关键词,则表明从客户主机读文件。如果local没指定,文件必须位于服务器上。使用load data local infile而不是load data infile

 

posted @ 2017-12-19 17:30  abm  阅读(423)  评论(0编辑  收藏  举报