上传文件至 /
This commit is contained in:
parent
e7138b2152
commit
d9bc1fa5ec
|
@ -0,0 +1,975 @@
|
||||||
|
<h1><center>数据库查询</center></h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
## 一:基本查询
|
||||||
|
|
||||||
|
#### 1.简介
|
||||||
|
|
||||||
|
单表查询
|
||||||
|
|
||||||
|
简单查询
|
||||||
|
|
||||||
|
通过条件查询
|
||||||
|
|
||||||
|
查询排序
|
||||||
|
|
||||||
|
限制查询记录数
|
||||||
|
|
||||||
|
使用集合函数查询
|
||||||
|
|
||||||
|
分组查询
|
||||||
|
|
||||||
|
使用正则表达式查询
|
||||||
|
|
||||||
|
#### 2.案例
|
||||||
|
|
||||||
|
创建案例所需表:company.employee5
|
||||||
|
|
||||||
|
```shell
|
||||||
|
雇员编号 id int
|
||||||
|
雇员姓名 name varchar(30)
|
||||||
|
雇员性别 sex enum
|
||||||
|
雇用时期 hire_date date
|
||||||
|
职位 post varchar(50)
|
||||||
|
职位描述 job_description varchar(100)
|
||||||
|
薪水 salary double(15,2)
|
||||||
|
办公室 office int
|
||||||
|
部门编号 dep_id int
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [(none)]> CREATE TABLE company.employee5(
|
||||||
|
id int primary key AUTO_INCREMENT not null,
|
||||||
|
name varchar(30) not null,
|
||||||
|
sex enum('male','female') default 'male' not null,
|
||||||
|
hire_date date not null,
|
||||||
|
post varchar(50) not null,
|
||||||
|
job_description varchar(100),
|
||||||
|
salary double(15,2) not null,
|
||||||
|
office int,
|
||||||
|
dep_id int
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
插入模拟数据:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [(none)]> insert into company.employee5(name,sex,hire_date,post,job_description,salary,office,dep_id) values
|
||||||
|
('jack','male','20180202','instructor','teach',5000,501,100),
|
||||||
|
('tom','male','20180203','instructor','teach',5500,501,100),
|
||||||
|
('robin','male','20180202','instructor','teach',8000,501,100),
|
||||||
|
('alice','female','20180202','instructor','teach',7200,501,100),
|
||||||
|
('','male','20180202','hr','hrcc',600,502,101),
|
||||||
|
('harry','male','20180202','hr',NULL,6000,502,101),
|
||||||
|
('emma','female','20180206','sale','salecc',20000,503,102),
|
||||||
|
('christine','female','20180205','sale','salecc',2200,503,102),
|
||||||
|
('zhuzhu','male','20180205','sale',NULL,2200,503,102),
|
||||||
|
('gougou','male','20180205','sale','',2200,503,102);
|
||||||
|
```
|
||||||
|
|
||||||
|
语法格式:
|
||||||
|
|
||||||
|
select 字段名称,字段名称2...... from 表名 [条件]
|
||||||
|
|
||||||
|
##### a.简单查询
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select * from employee5;
|
||||||
|
+----+-----------+--------+------------+------------+-----------------+----------+--------+--------+
|
||||||
|
| id | name | sex | hire_date | post | job_description | salary | office | dep_id |
|
||||||
|
+----+-----------+--------+------------+------------+-----------------+----------+--------+--------+
|
||||||
|
| 1 | jack | male | 2018-02-02 | instructor | teach | 5000.00 | 501 | 100 |
|
||||||
|
| 2 | tom | male | 2018-02-03 | instructor | teach | 5500.00 | 501 | 100 |
|
||||||
|
| 3 | robin | male | 2018-02-02 | instructor | teach | 8000.00 | 501 | 100 |
|
||||||
|
| 4 | alice | female | 2018-02-02 | instructor | teach | 7200.00 | 501 | 100 |
|
||||||
|
| 5 | | male | 2018-02-02 | hr | hrcc | 600.00 | 502 | 101 |
|
||||||
|
| 6 | harry | male | 2018-02-02 | hr | NULL | 6000.00 | 502 | 101 |
|
||||||
|
| 7 | emma | female | 2018-02-06 | sale | salecc | 20000.00 | 503 | 102 |
|
||||||
|
| 8 | christine | female | 2018-02-05 | sale | salecc | 2200.00 | 503 | 102 |
|
||||||
|
| 9 | zhuzhu | male | 2018-02-05 | sale | NULL | 2200.00 | 503 | 102 |
|
||||||
|
| 10 | gougou | male | 2018-02-05 | sale | | 2200.00 | 503 | 102 |
|
||||||
|
+----+-----------+--------+------------+------------+-----------------+----------+--------+--------+
|
||||||
|
10 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [company]> select name, salary, dep_id from employee5 where id <=5;
|
||||||
|
+-------+---------+--------+
|
||||||
|
| name | salary | dep_id |
|
||||||
|
+-------+---------+--------+
|
||||||
|
| jack | 5000.00 | 100 |
|
||||||
|
| tom | 5500.00 | 100 |
|
||||||
|
| robin | 8000.00 | 100 |
|
||||||
|
| alice | 7200.00 | 100 |
|
||||||
|
| | 600.00 | 101 |
|
||||||
|
+-------+---------+--------+
|
||||||
|
5 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### b.避免重复
|
||||||
|
|
||||||
|
不能部分使用DISTINCT,通常仅用于某一字段
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> SELECT post FROM employee5;
|
||||||
|
+------------+
|
||||||
|
| post |
|
||||||
|
+------------+
|
||||||
|
| instructor |
|
||||||
|
| instructor |
|
||||||
|
| instructor |
|
||||||
|
| instructor |
|
||||||
|
| hr |
|
||||||
|
| hr |
|
||||||
|
| sale |
|
||||||
|
| sale |
|
||||||
|
| sale |
|
||||||
|
| sale |
|
||||||
|
+------------+
|
||||||
|
10 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [company]> SELECT distinct post FROM employee5;
|
||||||
|
+------------+
|
||||||
|
| post |
|
||||||
|
+------------+
|
||||||
|
| instructor |
|
||||||
|
| hr |
|
||||||
|
| sale |
|
||||||
|
+------------+
|
||||||
|
3 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### c.四则运算查询
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> SELECT name, salary, salary*14 FROM employee5;
|
||||||
|
+-----------+----------+-----------+
|
||||||
|
| name | salary | salary*14 |
|
||||||
|
+-----------+----------+-----------+
|
||||||
|
| jack | 5000.00 | 70000.00 |
|
||||||
|
| tom | 5500.00 | 77000.00 |
|
||||||
|
| robin | 8000.00 | 112000.00 |
|
||||||
|
| alice | 7200.00 | 100800.00 |
|
||||||
|
| | 600.00 | 8400.00 |
|
||||||
|
| harry | 6000.00 | 84000.00 |
|
||||||
|
| emma | 20000.00 | 280000.00 |
|
||||||
|
| christine | 2200.00 | 30800.00 |
|
||||||
|
| zhuzhu | 2200.00 | 30800.00 |
|
||||||
|
| gougou | 2200.00 | 30800.00 |
|
||||||
|
+-----------+----------+-----------+
|
||||||
|
10 rows in set (0.01 sec)
|
||||||
|
|
||||||
|
MySQL [company]> SELECT name, salary, salary*14 AS Annual_salary FROM employee5;
|
||||||
|
+-----------+----------+---------------+
|
||||||
|
| name | salary | Annual_salary |
|
||||||
|
+-----------+----------+---------------+
|
||||||
|
| jack | 5000.00 | 70000.00 |
|
||||||
|
| tom | 5500.00 | 77000.00 |
|
||||||
|
| robin | 8000.00 | 112000.00 |
|
||||||
|
| alice | 7200.00 | 100800.00 |
|
||||||
|
| | 600.00 | 8400.00 |
|
||||||
|
| harry | 6000.00 | 84000.00 |
|
||||||
|
| emma | 20000.00 | 280000.00 |
|
||||||
|
| christine | 2200.00 | 30800.00 |
|
||||||
|
| zhuzhu | 2200.00 | 30800.00 |
|
||||||
|
| gougou | 2200.00 | 30800.00 |
|
||||||
|
+-----------+----------+---------------+
|
||||||
|
10 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [company]> SELECT name, salary, salary*14 Annual_salary FROM employee5;
|
||||||
|
+-----------+----------+---------------+
|
||||||
|
| name | salary | Annual_salary |
|
||||||
|
+-----------+----------+---------------+
|
||||||
|
| jack | 5000.00 | 70000.00 |
|
||||||
|
| tom | 5500.00 | 77000.00 |
|
||||||
|
| robin | 8000.00 | 112000.00 |
|
||||||
|
| alice | 7200.00 | 100800.00 |
|
||||||
|
| | 600.00 | 8400.00 |
|
||||||
|
| harry | 6000.00 | 84000.00 |
|
||||||
|
| emma | 20000.00 | 280000.00 |
|
||||||
|
| christine | 2200.00 | 30800.00 |
|
||||||
|
| zhuzhu | 2200.00 | 30800.00 |
|
||||||
|
| gougou | 2200.00 | 30800.00 |
|
||||||
|
+-----------+----------+---------------+
|
||||||
|
10 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### d.定义显示格式
|
||||||
|
|
||||||
|
CONCAT() 函数用于连接字符串
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> SELECT concat(name, 's annual salary: ', salary*14) AS Annual_salary FROM employee5;
|
||||||
|
+------------------------------------+
|
||||||
|
| Annual_salary |
|
||||||
|
+------------------------------------+
|
||||||
|
| jacks annual salary: 70000.00 |
|
||||||
|
| toms annual salary: 77000.00 |
|
||||||
|
| robins annual salary: 112000.00 |
|
||||||
|
| alices annual salary: 100800.00 |
|
||||||
|
| s annual salary: 8400.00 |
|
||||||
|
| harrys annual salary: 84000.00 |
|
||||||
|
| emmas annual salary: 280000.00 |
|
||||||
|
| christines annual salary: 30800.00 |
|
||||||
|
| zhuzhus annual salary: 30800.00 |
|
||||||
|
| gougous annual salary: 30800.00 |
|
||||||
|
+------------------------------------+
|
||||||
|
10 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### e.单条件查询
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> SELECT name,post FROM employee5 WHERE post='hr';
|
||||||
|
+-------+------+
|
||||||
|
| name | post |
|
||||||
|
+-------+------+
|
||||||
|
| | hr |
|
||||||
|
| harry | hr |
|
||||||
|
+-------+------+
|
||||||
|
2 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### f.多条件查询
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> SELECT name,salary FROM employee5 WHERE post='hr' AND salary>10000;
|
||||||
|
Empty set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [company]> select * from employee5 where salary>5000 and salary<10000 or dep_id=102;
|
||||||
|
+----+-----------+--------+------------+------------+-----------------+----------+--------+--------+
|
||||||
|
| id | name | sex | hire_date | post | job_description | salary | office | dep_id |
|
||||||
|
+----+-----------+--------+------------+------------+-----------------+----------+--------+--------+
|
||||||
|
| 2 | tom | male | 2018-02-03 | instructor | teach | 5500.00 | 501 | 100 |
|
||||||
|
| 3 | robin | male | 2018-02-02 | instructor | teach | 8000.00 | 501 | 100 |
|
||||||
|
| 4 | alice | female | 2018-02-02 | instructor | teach | 7200.00 | 501 | 100 |
|
||||||
|
| 6 | harry | male | 2018-02-02 | hr | NULL | 6000.00 | 502 | 101 |
|
||||||
|
| 7 | emma | female | 2018-02-06 | sale | salecc | 20000.00 | 503 | 102 |
|
||||||
|
| 8 | christine | female | 2018-02-05 | sale | salecc | 2200.00 | 503 | 102 |
|
||||||
|
| 9 | zhuzhu | male | 2018-02-05 | sale | NULL | 2200.00 | 503 | 102 |
|
||||||
|
| 10 | gougou | male | 2018-02-05 | sale | | 2200.00 | 503 | 102 |
|
||||||
|
+----+-----------+--------+------------+------------+-----------------+----------+--------+--------+
|
||||||
|
8 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### g.关键字
|
||||||
|
|
||||||
|
BETWEEN AND
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> SELECT name,salary FROM employee5 WHERE salary BETWEEN 5000 AND 15000;
|
||||||
|
+-------+---------+
|
||||||
|
| name | salary |
|
||||||
|
+-------+---------+
|
||||||
|
| jack | 5000.00 |
|
||||||
|
| tom | 5500.00 |
|
||||||
|
| robin | 8000.00 |
|
||||||
|
| alice | 7200.00 |
|
||||||
|
| harry | 6000.00 |
|
||||||
|
+-------+---------+
|
||||||
|
5 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [company]> SELECT name,salary FROM employee5 WHERE salary NOT BETWEEN 5000 AND 15000;
|
||||||
|
+-----------+----------+
|
||||||
|
| name | salary |
|
||||||
|
+-----------+----------+
|
||||||
|
| | 600.00 |
|
||||||
|
| emma | 20000.00 |
|
||||||
|
| christine | 2200.00 |
|
||||||
|
| zhuzhu | 2200.00 |
|
||||||
|
| gougou | 2200.00 |
|
||||||
|
+-----------+----------+
|
||||||
|
5 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
IS NULL
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> SELECT name,job_description FROM employee5 WHERE job_description IS NULL;
|
||||||
|
+--------+-----------------+
|
||||||
|
| name | job_description |
|
||||||
|
+--------+-----------------+
|
||||||
|
| harry | NULL |
|
||||||
|
| zhuzhu | NULL |
|
||||||
|
+--------+-----------------+
|
||||||
|
2 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [company]> SELECT name,job_description FROM employee5 WHERE job_description IS NOT NULL;
|
||||||
|
+-----------+-----------------+
|
||||||
|
| name | job_description |
|
||||||
|
+-----------+-----------------+
|
||||||
|
| jack | teach |
|
||||||
|
| tom | teach |
|
||||||
|
| robin | teach |
|
||||||
|
| alice | teach |
|
||||||
|
| | hrcc |
|
||||||
|
| emma | salecc |
|
||||||
|
| christine | salecc |
|
||||||
|
| gougou | |
|
||||||
|
+-----------+-----------------+
|
||||||
|
8 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [company]> SELECT name,job_description FROM employee5 WHERE job_description='';
|
||||||
|
+--------+-----------------+
|
||||||
|
| name | job_description |
|
||||||
|
+--------+-----------------+
|
||||||
|
| gougou | |
|
||||||
|
+--------+-----------------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
注意:(NULL说明)
|
||||||
|
|
||||||
|
等价于没有任何值、是未知数
|
||||||
|
|
||||||
|
NULL与0、空字符串、空格都不同,NULL没有分配存储空间
|
||||||
|
|
||||||
|
对空值做加、减、乘、除等运算操作,结果仍为空
|
||||||
|
|
||||||
|
比较时使用关键字用“is null”和“is not null”
|
||||||
|
|
||||||
|
排序时比其他数据都小(索引默认是降序排列,小→大),所以NULL值总是排在最前
|
||||||
|
|
||||||
|
IN集合查询
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> SELECT name, salary FROM employee5 WHERE salary=4000 OR salary=5000 OR salary=6000 OR salary=9000 ;
|
||||||
|
+-------+---------+
|
||||||
|
| name | salary |
|
||||||
|
+-------+---------+
|
||||||
|
| jack | 5000.00 |
|
||||||
|
| harry | 6000.00 |
|
||||||
|
+-------+---------+
|
||||||
|
2 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [company]> SELECT name, salary FROM employee5 WHERE salary IN (4000,5000,6000,9000) ;
|
||||||
|
+-------+---------+
|
||||||
|
| name | salary |
|
||||||
|
+-------+---------+
|
||||||
|
| jack | 5000.00 |
|
||||||
|
| harry | 6000.00 |
|
||||||
|
+-------+---------+
|
||||||
|
2 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [company]> SELECT name, salary FROM employee5 WHERE salary NOT IN (4000,5000,6000,9000) ;
|
||||||
|
+-----------+----------+
|
||||||
|
| name | salary |
|
||||||
|
+-----------+----------+
|
||||||
|
| tom | 5500.00 |
|
||||||
|
| robin | 8000.00 |
|
||||||
|
| alice | 7200.00 |
|
||||||
|
| | 600.00 |
|
||||||
|
| emma | 20000.00 |
|
||||||
|
| christine | 2200.00 |
|
||||||
|
| zhuzhu | 2200.00 |
|
||||||
|
| gougou | 2200.00 |
|
||||||
|
+-----------+----------+
|
||||||
|
8 rows in set (0.01 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### h.模糊查询
|
||||||
|
|
||||||
|
关键字LIKE
|
||||||
|
|
||||||
|
通配符%:所有字符
|
||||||
|
|
||||||
|
通配符_: 一个字符
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> SELECT * FROM employee5 WHERE name LIKE 'al%';
|
||||||
|
+----+-------+--------+------------+------------+-----------------+---------+--------+--------+
|
||||||
|
| id | name | sex | hire_date | post | job_description | salary | office | dep_id |
|
||||||
|
+----+-------+--------+------------+------------+-----------------+---------+--------+--------+
|
||||||
|
| 4 | alice | female | 2018-02-02 | instructor | teach | 7200.00 | 501 | 100 |
|
||||||
|
+----+-------+--------+------------+------------+-----------------+---------+--------+--------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [company]> SELECT * FROM employee5 WHERE name LIKE 'al___';
|
||||||
|
+----+-------+--------+------------+------------+-----------------+---------+--------+--------+
|
||||||
|
| id | name | sex | hire_date | post | job_description | salary | office | dep_id |
|
||||||
|
+----+-------+--------+------------+------------+-----------------+---------+--------+--------+
|
||||||
|
| 4 | alice | female | 2018-02-02 | instructor | teach | 7200.00 | 501 | 100 |
|
||||||
|
+----+-------+--------+------------+------------+-----------------+---------+--------+--------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### i.排序查询
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select name,salary from employee5 order by salary;
|
||||||
|
+-----------+----------+
|
||||||
|
| name | salary |
|
||||||
|
+-----------+----------+
|
||||||
|
| | 600.00 |
|
||||||
|
| christine | 2200.00 |
|
||||||
|
| zhuzhu | 2200.00 |
|
||||||
|
| gougou | 2200.00 |
|
||||||
|
| jack | 5000.00 |
|
||||||
|
| tom | 5500.00 |
|
||||||
|
| harry | 6000.00 |
|
||||||
|
| alice | 7200.00 |
|
||||||
|
| robin | 8000.00 |
|
||||||
|
| emma | 20000.00 |
|
||||||
|
+-----------+----------+
|
||||||
|
10 rows in set (0.01 sec)
|
||||||
|
|
||||||
|
MySQL [company]> select name,salary from employee5 order by salary desc;
|
||||||
|
+-----------+----------+
|
||||||
|
| name | salary |
|
||||||
|
+-----------+----------+
|
||||||
|
| emma | 20000.00 |
|
||||||
|
| robin | 8000.00 |
|
||||||
|
| alice | 7200.00 |
|
||||||
|
| harry | 6000.00 |
|
||||||
|
| tom | 5500.00 |
|
||||||
|
| jack | 5000.00 |
|
||||||
|
| christine | 2200.00 |
|
||||||
|
| zhuzhu | 2200.00 |
|
||||||
|
| gougou | 2200.00 |
|
||||||
|
| | 600.00 |
|
||||||
|
+-----------+----------+
|
||||||
|
|
||||||
|
MySQL [company]> select name,salary from employee5 order by salary desc limit 3; //控制显示前3行
|
||||||
|
+-------+----------+
|
||||||
|
| name | salary |
|
||||||
|
+-------+----------+
|
||||||
|
| emma | 20000.00 |
|
||||||
|
| robin | 8000.00 |
|
||||||
|
| alice | 7200.00 |
|
||||||
|
+-------+----------+
|
||||||
|
3 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [company]> select name,salary from employee5 order by salary desc limit 1,3; //从序号1开始显示三行的内容
|
||||||
|
+-------+---------+
|
||||||
|
| name | salary |
|
||||||
|
+-------+---------+
|
||||||
|
| robin | 8000.00 |
|
||||||
|
| alice | 7200.00 |
|
||||||
|
| harry | 6000.00 |
|
||||||
|
+-------+---------+
|
||||||
|
3 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
注意:
|
||||||
|
|
||||||
|
ascending 美音 /ə'sɛndɪŋ/ 升序
|
||||||
|
|
||||||
|
descending 美音 /dɪ'sɛndɪŋ/ 降序
|
||||||
|
|
||||||
|
##### j.集合函数查询
|
||||||
|
|
||||||
|
count:可以查看共有多少条记录
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select count(*) from employee5;
|
||||||
|
+----------+
|
||||||
|
| count(*) |
|
||||||
|
+----------+
|
||||||
|
| 10 |
|
||||||
|
+----------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [company]> select count(name) from employee5;
|
||||||
|
+-------------+
|
||||||
|
| count(name) |
|
||||||
|
+-------------+
|
||||||
|
| 10 |
|
||||||
|
+-------------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
max:查看最大值
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select max(salary) from employee5;
|
||||||
|
+-------------+
|
||||||
|
| max(salary) |
|
||||||
|
+-------------+
|
||||||
|
| 20000.00 |
|
||||||
|
+-------------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
min:查看最小值
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select min(salary) from employee5;
|
||||||
|
+-------------+
|
||||||
|
| min(salary) |
|
||||||
|
+-------------+
|
||||||
|
| 600.00 |
|
||||||
|
+-------------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
avg:查看平均值
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select avg(salary) from employee5;
|
||||||
|
+-------------+
|
||||||
|
| avg(salary) |
|
||||||
|
+-------------+
|
||||||
|
| 5890.000000 |
|
||||||
|
+-------------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
sum:求和
|
||||||
|
|
||||||
|
sale这个部门的总工资
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select concat("Total Department Wages:",sum(salary)) from employee5 where post='sale';
|
||||||
|
+-------------------------------------------------+
|
||||||
|
| concat("Total Department Wages:",sum(salary)) |
|
||||||
|
+-------------------------------------------------+
|
||||||
|
| Total Department Wages:26600.00 |
|
||||||
|
+-------------------------------------------------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
获取薪水最高的这个人的详细信息
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select * from employee5 where salary = (select max(salary) from employee5);
|
||||||
|
+----+------+--------+------------+------+-----------------+----------+--------+--------+
|
||||||
|
| id | name | sex | hire_date | post | job_description | salary | office | dep_id |
|
||||||
|
+----+------+--------+------------+------+-----------------+----------+--------+--------+
|
||||||
|
| 7 | emma | female | 2018-02-06 | sale | salecc | 20000.00 | 503 | 102 |
|
||||||
|
+----+------+--------+------------+------+-----------------+----------+--------+--------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### k.分组查询
|
||||||
|
|
||||||
|
GROUP BY和GROUP_CONCAT()函数一起使用
|
||||||
|
|
||||||
|
获取部门ID相同的员工并把名字拼接到一起
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> SELECT dep_id,GROUP_CONCAT(name) FROM employee5 GROUP BY dep_id;
|
||||||
|
+--------+------------------------------+
|
||||||
|
| dep_id | GROUP_CONCAT(name) |
|
||||||
|
+--------+------------------------------+
|
||||||
|
| 100 | jack,tom,robin,alice |
|
||||||
|
| 101 | ,harry |
|
||||||
|
| 102 | emma,christine,zhuzhu,gougou |
|
||||||
|
+--------+------------------------------+
|
||||||
|
3 rows in set (0.01 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
GROUP BY和集合函数一起使用
|
||||||
|
|
||||||
|
获取部门最高薪资
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> SELECT post,max(salary) FROM employee5 GROUP BY post;
|
||||||
|
+------------+-------------+
|
||||||
|
| post | max(salary) |
|
||||||
|
+------------+-------------+
|
||||||
|
| hr | 6000.00 |
|
||||||
|
| instructor | 8000.00 |
|
||||||
|
| sale | 20000.00 |
|
||||||
|
+------------+-------------+
|
||||||
|
3 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### l.正则查询
|
||||||
|
|
||||||
|
```shell
|
||||||
|
以什么开头
|
||||||
|
MySQL [company]> SELECT * FROM employee5 WHERE name REGEXP '^ali';
|
||||||
|
+----+-------+--------+------------+------------+-----------------+---------+--------+--------+
|
||||||
|
| id | name | sex | hire_date | post | job_description | salary | office | dep_id |
|
||||||
|
+----+-------+--------+------------+------------+-----------------+---------+--------+--------+
|
||||||
|
| 4 | alice | female | 2018-02-02 | instructor | teach | 7200.00 | 501 | 100 |
|
||||||
|
+----+-------+--------+------------+------------+-----------------+---------+--------+--------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
|
||||||
|
以什么结尾
|
||||||
|
MySQL [company]> SELECT * FROM employee5 WHERE name REGEXP 'ce$';
|
||||||
|
+----+-------+--------+------------+------------+-----------------+---------+--------+--------+
|
||||||
|
| id | name | sex | hire_date | post | job_description | salary | office | dep_id |
|
||||||
|
+----+-------+--------+------------+------------+-----------------+---------+--------+--------+
|
||||||
|
| 4 | alice | female | 2018-02-02 | instructor | teach | 7200.00 | 501 | 100 |
|
||||||
|
+----+-------+--------+------------+------------+-----------------+---------+--------+--------+
|
||||||
|
1 row in set (0.01 sec)
|
||||||
|
|
||||||
|
连续出现n次
|
||||||
|
MySQL [company]> SELECT * FROM employee5 WHERE name REGEXP 'm{2}';
|
||||||
|
+----+------+--------+------------+------+-----------------+----------+--------+--------+
|
||||||
|
| id | name | sex | hire_date | post | job_description | salary | office | dep_id |
|
||||||
|
+----+------+--------+------------+------+-----------------+----------+--------+--------+
|
||||||
|
| 7 | emma | female | 2018-02-06 | sale | salecc | 20000.00 | 503 | 102 |
|
||||||
|
+----+------+--------+------------+------+-----------------+----------+--------+--------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 二:多表联合查询
|
||||||
|
|
||||||
|
【扩展了解】
|
||||||
|
|
||||||
|
#### 1.数据准备
|
||||||
|
|
||||||
|
##### 表:company.employee6
|
||||||
|
|
||||||
|
创建表:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> create table employee6(
|
||||||
|
emp_id int auto_increment primary key not null,
|
||||||
|
emp_name varchar(50),
|
||||||
|
age int,
|
||||||
|
dept_id int);
|
||||||
|
Query OK, 0 rows affected (0.65 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
查看表结构:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> desc employee6;
|
||||||
|
+----------+-------------+------+-----+---------+----------------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+----------+-------------+------+-----+---------+----------------+
|
||||||
|
| emp_id | int(11) | NO | PRI | NULL | auto_increment |
|
||||||
|
| emp_name | varchar(50) | YES | | NULL | |
|
||||||
|
| age | int(11) | YES | | NULL | |
|
||||||
|
| dept_id | int(11) | YES | | NULL | |
|
||||||
|
+----------+-------------+------+-----+---------+----------------+
|
||||||
|
4 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
插入模拟数据:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> insert into employee6(emp_name,age,dept_id) values
|
||||||
|
('',19,200),
|
||||||
|
('tom',26,201),
|
||||||
|
('jack',30,201),
|
||||||
|
('alice',24,202),
|
||||||
|
('robin',40,200),
|
||||||
|
('xingdian',16,200),
|
||||||
|
('natasha',28,204);
|
||||||
|
```
|
||||||
|
|
||||||
|
查看数据:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select * from employee6;
|
||||||
|
+--------+----------+------+---------+
|
||||||
|
| emp_id | emp_name | age | dept_id |
|
||||||
|
+--------+----------+------+---------+
|
||||||
|
| 1 | | 19 | 200 |
|
||||||
|
| 2 | tom | 26 | 201 |
|
||||||
|
| 3 | jack | 30 | 201 |
|
||||||
|
| 4 | alice | 24 | 202 |
|
||||||
|
| 5 | robin | 40 | 200 |
|
||||||
|
| 6 | xingdian | 16 | 200 |
|
||||||
|
| 7 | natasha | 28 | 204 |
|
||||||
|
+--------+----------+------+---------+
|
||||||
|
7 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 表:company.department6
|
||||||
|
|
||||||
|
创建表:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> create table department6(
|
||||||
|
dept_id int,
|
||||||
|
dept_name varchar(100)
|
||||||
|
);
|
||||||
|
Query OK, 0 rows affected (0.33 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
查看表结构:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> desc department6;
|
||||||
|
+-----------+--------------+------+-----+---------+-------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-----------+--------------+------+-----+---------+-------+
|
||||||
|
| dept_id | int(11) | YES | | NULL | |
|
||||||
|
| dept_name | varchar(100) | YES | | NULL | |
|
||||||
|
+-----------+--------------+------+-----+---------+-------+
|
||||||
|
2 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
模拟插入数据:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> insert into department6 values
|
||||||
|
(200,'hr'),
|
||||||
|
(201,'it'),
|
||||||
|
(202,'sale'),
|
||||||
|
(203,'fd');
|
||||||
|
```
|
||||||
|
|
||||||
|
查看数据:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select * from department6;
|
||||||
|
+---------+-----------+
|
||||||
|
| dept_id | dept_name |
|
||||||
|
+---------+-----------+
|
||||||
|
| 200 | hr |
|
||||||
|
| 201 | it |
|
||||||
|
| 202 | sale |
|
||||||
|
| 203 | fd |
|
||||||
|
+---------+-----------+
|
||||||
|
4 rows in set (0.01 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2.多表的连接查询
|
||||||
|
|
||||||
|
交叉连接:生成笛卡尔积,它不使用任何匹配条件;交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合
|
||||||
|
|
||||||
|
内连接:只连接匹配的行
|
||||||
|
|
||||||
|
外连接
|
||||||
|
|
||||||
|
左连接:会显示左边表内所有的值,不论在右边表内匹不匹配
|
||||||
|
|
||||||
|
右连接:会显示右边表内所有的值,不论在左边表内匹不匹配
|
||||||
|
|
||||||
|
全外连接:包含左、右两个表的全部行
|
||||||
|
|
||||||
|
##### 交叉连接
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select employee6.emp_name,employee6.age,employee6.dept_id,department6.dept_name from employee6,department6;
|
||||||
|
+----------+------+---------+-----------+
|
||||||
|
| emp_name | age | dept_id | dept_name |
|
||||||
|
+----------+------+---------+-----------+
|
||||||
|
| | 19 | 200 | hr |
|
||||||
|
| | 19 | 200 | it |
|
||||||
|
| | 19 | 200 | sale |
|
||||||
|
| | 19 | 200 | fd |
|
||||||
|
| tom | 26 | 201 | hr |
|
||||||
|
| tom | 26 | 201 | it |
|
||||||
|
| tom | 26 | 201 | sale |
|
||||||
|
| tom | 26 | 201 | fd |
|
||||||
|
| jack | 30 | 201 | hr |
|
||||||
|
| jack | 30 | 201 | it |
|
||||||
|
| jack | 30 | 201 | sale |
|
||||||
|
| jack | 30 | 201 | fd |
|
||||||
|
| alice | 24 | 202 | hr |
|
||||||
|
| alice | 24 | 202 | it |
|
||||||
|
| alice | 24 | 202 | sale |
|
||||||
|
| alice | 24 | 202 | fd |
|
||||||
|
| robin | 40 | 200 | hr |
|
||||||
|
| robin | 40 | 200 | it |
|
||||||
|
| robin | 40 | 200 | sale |
|
||||||
|
| robin | 40 | 200 | fd |
|
||||||
|
| xingdian | 16 | 200 | hr |
|
||||||
|
| xingdian | 16 | 200 | it |
|
||||||
|
| xingdian | 16 | 200 | sale |
|
||||||
|
| xingdian | 16 | 200 | fd |
|
||||||
|
| natasha | 28 | 204 | hr |
|
||||||
|
| natasha | 28 | 204 | it |
|
||||||
|
| natasha | 28 | 204 | sale |
|
||||||
|
| natasha | 28 | 204 | fd |
|
||||||
|
+----------+------+---------+-----------+
|
||||||
|
28 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 内连接
|
||||||
|
|
||||||
|
获取有部门的员工 (部门表中没有natasha所在的部门)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select employee6.emp_name,employee6.age,employee6.dept_id,department6.dept_name from employee6,department6 where employee6.dept_id=department6.dept_id;
|
||||||
|
+----------+------+---------+-----------+
|
||||||
|
| emp_name | age | dept_id | dept_name |
|
||||||
|
+----------+------+---------+-----------+
|
||||||
|
| | 19 | 200 | hr |
|
||||||
|
| tom | 26 | 201 | it |
|
||||||
|
| jack | 30 | 201 | it |
|
||||||
|
| alice | 24 | 202 | sale |
|
||||||
|
| robin | 40 | 200 | hr |
|
||||||
|
| xingdian | 16 | 200 | hr |
|
||||||
|
+----------+------+---------+-----------+
|
||||||
|
6 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [company]> select employee6.emp_name,department6.dept_name from employee6 inner join department6 on employee6.dept_id=department6.dept_id;
|
||||||
|
+----------+-----------+
|
||||||
|
| emp_name | dept_name |
|
||||||
|
+----------+-----------+
|
||||||
|
| | hr |
|
||||||
|
| tom | it |
|
||||||
|
| jack | it |
|
||||||
|
| alice | sale |
|
||||||
|
| robin | hr |
|
||||||
|
| xingdian | hr |
|
||||||
|
+----------+-----------+
|
||||||
|
6 rows in set (0.01 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 外连接
|
||||||
|
|
||||||
|
语法:
|
||||||
|
|
||||||
|
SELECT 字段列表 FROM 表1 LEFT|RIGHT JOIN 表2 ON 表1.字段 = 表2.字段;
|
||||||
|
|
||||||
|
注意:
|
||||||
|
|
||||||
|
先用谁谁就是左
|
||||||
|
|
||||||
|
###### 左连接 left join
|
||||||
|
|
||||||
|
```shell
|
||||||
|
找出所有员工及所属的部门,包括没有部门的员工
|
||||||
|
MySQL [company]> select emp_id,emp_name,dept_name from employee6 left join department6 on employee6.dept_id = department6.dept_id;
|
||||||
|
+--------+----------+-----------+
|
||||||
|
| emp_id | emp_name | dept_name |
|
||||||
|
+--------+----------+-----------+
|
||||||
|
| 1 | | hr |
|
||||||
|
| 5 | robin | hr |
|
||||||
|
| 6 | xingdian | hr |
|
||||||
|
| 2 | tom | it |
|
||||||
|
| 3 | jack | it |
|
||||||
|
| 4 | alice | sale |
|
||||||
|
| 7 | natasha | NULL |
|
||||||
|
+--------+----------+-----------+
|
||||||
|
7 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
###### 右连接right join
|
||||||
|
|
||||||
|
```
|
||||||
|
找出所有部门包含的员工,包括空部门
|
||||||
|
MySQL [company]> select emp_id,emp_name,dept_name from employee6 right join department6 on employee6.dept_id = department6.dept_id;
|
||||||
|
+--------+----------+-----------+
|
||||||
|
| emp_id | emp_name | dept_name |
|
||||||
|
+--------+----------+-----------+
|
||||||
|
| 1 | | hr |
|
||||||
|
| 2 | tom | it |
|
||||||
|
| 3 | jack | it |
|
||||||
|
| 4 | alice | sale |
|
||||||
|
| 5 | robin | hr |
|
||||||
|
| 6 | xingdian | hr |
|
||||||
|
| NULL | NULL | fd |
|
||||||
|
+--------+----------+-----------+
|
||||||
|
7 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 全外连接
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select * from employee6 full join department6;
|
||||||
|
+--------+----------+------+---------+---------+-----------+
|
||||||
|
| emp_id | emp_name | age | dept_id | dept_id | dept_name |
|
||||||
|
+--------+----------+------+---------+---------+-----------+
|
||||||
|
| 1 | | 19 | 200 | 200 | hr |
|
||||||
|
| 1 | | 19 | 200 | 201 | it |
|
||||||
|
| 1 | | 19 | 200 | 202 | sale |
|
||||||
|
| 1 | | 19 | 200 | 203 | fd |
|
||||||
|
| 2 | tom | 26 | 201 | 200 | hr |
|
||||||
|
| 2 | tom | 26 | 201 | 201 | it |
|
||||||
|
| 2 | tom | 26 | 201 | 202 | sale |
|
||||||
|
| 2 | tom | 26 | 201 | 203 | fd |
|
||||||
|
| 3 | jack | 30 | 201 | 200 | hr |
|
||||||
|
| 3 | jack | 30 | 201 | 201 | it |
|
||||||
|
| 3 | jack | 30 | 201 | 202 | sale |
|
||||||
|
| 3 | jack | 30 | 201 | 203 | fd |
|
||||||
|
| 4 | alice | 24 | 202 | 200 | hr |
|
||||||
|
| 4 | alice | 24 | 202 | 201 | it |
|
||||||
|
| 4 | alice | 24 | 202 | 202 | sale |
|
||||||
|
| 4 | alice | 24 | 202 | 203 | fd |
|
||||||
|
| 5 | robin | 40 | 200 | 200 | hr |
|
||||||
|
| 5 | robin | 40 | 200 | 201 | it |
|
||||||
|
| 5 | robin | 40 | 200 | 202 | sale |
|
||||||
|
| 5 | robin | 40 | 200 | 203 | fd |
|
||||||
|
| 6 | xingdian | 16 | 200 | 200 | hr |
|
||||||
|
| 6 | xingdian | 16 | 200 | 201 | it |
|
||||||
|
| 6 | xingdian | 16 | 200 | 202 | sale |
|
||||||
|
| 6 | xingdian | 16 | 200 | 203 | fd |
|
||||||
|
| 7 | natasha | 28 | 204 | 200 | hr |
|
||||||
|
| 7 | natasha | 28 | 204 | 201 | it |
|
||||||
|
| 7 | natasha | 28 | 204 | 202 | sale |
|
||||||
|
| 7 | natasha | 28 | 204 | 203 | fd |
|
||||||
|
+--------+----------+------+---------+---------+-----------+
|
||||||
|
28 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3.复合条件连接查询
|
||||||
|
|
||||||
|
##### 案例一
|
||||||
|
|
||||||
|
找出公司所有部门中年龄大于25岁的员工
|
||||||
|
|
||||||
|
以内连接的方式查询employee6和department6表,并且employee6表中的age字段值必须大于25
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select emp_id,emp_name,dept_name FROM employee6,department6 WHERE employee6.dept_id = department6.dept_id AND age > 25;
|
||||||
|
+--------+----------+-----------+
|
||||||
|
| emp_id | emp_name | dept_name |
|
||||||
|
+--------+----------+-----------+
|
||||||
|
| 5 | robin | hr |
|
||||||
|
| 2 | tom | it |
|
||||||
|
| 3 | jack | it |
|
||||||
|
+--------+----------+-----------+
|
||||||
|
3 rows in set (0.01 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 案例二
|
||||||
|
|
||||||
|
以内连接的方式查询employee6和department6表,并且以age字段的升序方式显示
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select emp_id,emp_name,dept_name FROM employee6,department6 WHERE employee6.dept_id = department6.dept_id ORDER BY age asc;
|
||||||
|
+--------+----------+-----------+
|
||||||
|
| emp_id | emp_name | dept_name |
|
||||||
|
+--------+----------+-----------+
|
||||||
|
| 6 | xingdian | hr |
|
||||||
|
| 1 | | hr |
|
||||||
|
| 4 | alice | sale |
|
||||||
|
| 2 | tom | it |
|
||||||
|
| 3 | jack | it |
|
||||||
|
| 5 | robin | hr |
|
||||||
|
+--------+----------+-----------+
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4.子查询
|
||||||
|
|
||||||
|
子查询是将一个查询语句嵌套在另一个查询语句中
|
||||||
|
|
||||||
|
内层查询语句的查询结果,可以为外层查询语句提供查询条件
|
||||||
|
|
||||||
|
子查询中可以包含:IN、NOT IN等关键字;还可以包含比较运算符:= 、 !=、> 、<等
|
||||||
|
|
||||||
|
##### 案例一
|
||||||
|
|
||||||
|
带IN关键字的子查询;查询employee表,但dept_id必须在department表中出现过
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select * from employee6 WHERE dept_id IN (select dept_id FROM department6);
|
||||||
|
+--------+----------+------+---------+
|
||||||
|
| emp_id | emp_name | age | dept_id |
|
||||||
|
+--------+----------+------+---------+
|
||||||
|
| 1 | | 19 | 200 |
|
||||||
|
| 2 | tom | 26 | 201 |
|
||||||
|
| 3 | jack | 30 | 201 |
|
||||||
|
| 4 | alice | 24 | 202 |
|
||||||
|
| 5 | robin | 40 | 200 |
|
||||||
|
| 6 | xingdian | 16 | 200 |
|
||||||
|
+--------+----------+------+---------+
|
||||||
|
6 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 案例二
|
||||||
|
|
||||||
|
带比较运算符的子查询;查询年龄大于等于25岁员工所在部门(查询老龄化的部门)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [company]> select dept_id,dept_name FROM department6 WHERE dept_id IN (SELECT DISTINCT dept_id FROM employee6 WHERE age >=25);
|
||||||
|
+---------+-----------+
|
||||||
|
| dept_id | dept_name |
|
||||||
|
+---------+-----------+
|
||||||
|
| 201 | it |
|
||||||
|
| 200 | hr |
|
||||||
|
+---------+-----------+
|
||||||
|
2 rows in set (0.00 sec)
|
||||||
|
```
|
|
@ -0,0 +1,861 @@
|
||||||
|
<h1><center>数据库管理及数据类型</center></h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
## 一:数据类型
|
||||||
|
|
||||||
|
#### 1.数值类型
|
||||||
|
|
||||||
|
##### 整数类型
|
||||||
|
|
||||||
|
整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT
|
||||||
|
|
||||||
|
作用:用于存储用户的年龄、游戏的Level、经验值等
|
||||||
|
|
||||||
|
![image-20220920124821420](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220920124821420.png)
|
||||||
|
|
||||||
|
##### 浮点数类型
|
||||||
|
|
||||||
|
浮点数类型:FLOAT DOUBLE
|
||||||
|
|
||||||
|
作用:用于存储用户的身高、体重、薪水等
|
||||||
|
|
||||||
|
![image-20220920124919373](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220920124919373.png)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
float(5,3) 5宽度 3精度
|
||||||
|
注意:
|
||||||
|
宽度不算小数点
|
||||||
|
宽度-精度=点前
|
||||||
|
案例:
|
||||||
|
MySQL [(none)]> create database diandian;
|
||||||
|
Query OK, 1 row affected (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [(none)]> use diandian
|
||||||
|
Database changed
|
||||||
|
MySQL [diandian]> create table t1(id float(6,2));
|
||||||
|
Query OK, 0 rows affected (0.24 sec)
|
||||||
|
|
||||||
|
MySQL [diandian]> insert into t1 values('2.22');
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 定点数类型
|
||||||
|
|
||||||
|
定点数类型:DEC
|
||||||
|
|
||||||
|
定点数在MySQL内部以字符串形式存储,比浮点数更精确,适合用来表示货币等精度高的数据
|
||||||
|
|
||||||
|
##### 位类型
|
||||||
|
|
||||||
|
位类型:BIT
|
||||||
|
|
||||||
|
BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位
|
||||||
|
|
||||||
|
#### 2.字符串类型
|
||||||
|
|
||||||
|
CHAR系列 CHAR VARCHAR
|
||||||
|
|
||||||
|
TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT
|
||||||
|
|
||||||
|
BLOB 系列 TINYBLOB BLOB MEDIUMBLOB LONGBLOB
|
||||||
|
|
||||||
|
BINARY系列 BINARY VARBINARY
|
||||||
|
|
||||||
|
![image-20220920132114919](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220920132114919.png)
|
||||||
|
|
||||||
|
##### 枚举类型
|
||||||
|
|
||||||
|
枚举类型:枚举列可以把一些不重复的字符串存储成一个预定义的集合
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> create table enum_table( e ENUM('fish','apple','dog'));
|
||||||
|
Query OK, 0 rows affected (0.35 sec)
|
||||||
|
mysql> insert into enum_table(e) values('fish');
|
||||||
|
Query OK, 1 row affected (0.11 sec)
|
||||||
|
|
||||||
|
mysql> select * from enum_table;
|
||||||
|
+------+
|
||||||
|
| e |
|
||||||
|
+------+
|
||||||
|
| fish |
|
||||||
|
+------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
|
||||||
|
mysql> insert into enum_table(e) values('nihao');
|
||||||
|
ERROR 1265 (01000): Data truncated for column 'e' at row 1
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 时间和日期类型
|
||||||
|
|
||||||
|
时间和日期类型:DATE TIME DATETIME TIMESTAMP YEAR
|
||||||
|
|
||||||
|
作用:用于存储用户的注册时间,文章的发布时间,文章的更新时间,员工的入职时间等
|
||||||
|
|
||||||
|
![image-20220920132630856](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220920132630856.png)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> create table t8 (
|
||||||
|
id1 timestamp NOT NULL default CURRENT_TIMESTAMP,
|
||||||
|
id2 datetime default NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
timestamp 类型的列还有个特性:默认情况下,在 insert, update 数据时,timestamp 列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。“自动”的意思就是,你不去管它,MySQL 会替你去处理。
|
||||||
|
|
||||||
|
mysql> insert into t8(id1) values('20180109000000');
|
||||||
|
mysql> select * from t8;
|
||||||
|
+---------------------+------+
|
||||||
|
| id1 | d2 |
|
||||||
|
+---------------------+------+
|
||||||
|
| 2018-01-09 00:00:00 | NULL |
|
||||||
|
+---------------------+------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
|
||||||
|
扩展:
|
||||||
|
select now();查看当前时间
|
||||||
|
```
|
||||||
|
|
||||||
|
## 二:表操作
|
||||||
|
|
||||||
|
#### 1.案例
|
||||||
|
|
||||||
|
表::school.student1
|
||||||
|
|
||||||
|
```
|
||||||
|
字段 字段 字段
|
||||||
|
id name sex age
|
||||||
|
1 tom male 23 记录
|
||||||
|
2 jack male 21 记录
|
||||||
|
3 alice female 19 记录
|
||||||
|
```
|
||||||
|
|
||||||
|
语法:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
create table 表名(自定义)(
|
||||||
|
字段名1 类型[(宽度) 约束条件],
|
||||||
|
字段名2 类型[(宽度) 约束条件],
|
||||||
|
字段名3 类型[(宽度) 约束条件]
|
||||||
|
)[存储引擎 字符集];
|
||||||
|
==在同一张表中,字段名是不能相同
|
||||||
|
==宽度和约束条件可选
|
||||||
|
==字段名和类型是必须的
|
||||||
|
```
|
||||||
|
|
||||||
|
创建库表:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> CREATE DATABASE school; //创建数据库school
|
||||||
|
mysql> use school;
|
||||||
|
mysql> create table student1(
|
||||||
|
id int,
|
||||||
|
name varchar(50),
|
||||||
|
sex enum('m','f'),
|
||||||
|
age int
|
||||||
|
);
|
||||||
|
Query OK, 0 rows affected (0.03 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
查看库:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> show tables;
|
||||||
|
+------------------+
|
||||||
|
| Tables_in_school |
|
||||||
|
+------------------+
|
||||||
|
| student1 |
|
||||||
|
+------------------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
插入语法:
|
||||||
|
|
||||||
|
```
|
||||||
|
insert into 表名(字段1,字段2...) values(字段值列表...);
|
||||||
|
```
|
||||||
|
|
||||||
|
插入数据:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> insert into student1(id,name,sex,age) values(1,'xingdia','m','26');
|
||||||
|
```
|
||||||
|
|
||||||
|
查看表结构:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> desc student1;
|
||||||
|
+-------+---------------+------+-----+---------+-------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-------+---------------+------+-----+---------+-------+
|
||||||
|
| id | int(11) | YES | | NULL | |
|
||||||
|
| name | varchar(50) | YES | | NULL | |
|
||||||
|
| sex | enum('m','f') | YES | | NULL | |
|
||||||
|
| age | int(11) | YES | | NULL | |
|
||||||
|
+-------+---------------+------+-----+---------+-------+
|
||||||
|
4 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
查询数据:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> select id,name,sex,age from student1; //查询表中所有字段的值
|
||||||
|
Empty set (0.00 sec)
|
||||||
|
|
||||||
|
mysql> select * from student1; /查询表中所有字段的值
|
||||||
|
Empty set (0.00 sec)
|
||||||
|
|
||||||
|
mysql> select name,age from student1; //查询表中指定字段的值
|
||||||
|
Empty set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
扩展插入:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> insert into student1 values (1,'xingdian','m',33),(2,'alice','m',20),(3,'jack','m',40); //顺序插入
|
||||||
|
Query OK, 3 rows affected (0.14 sec)
|
||||||
|
Records: 3 Duplicates: 0 Warnings: 0
|
||||||
|
|
||||||
|
mysql> insert into student1(name,age) values ('zhuzhu',10),('gougou',20); //只向指定的字段插入值
|
||||||
|
Query OK, 2 rows affected (0.12 sec)
|
||||||
|
Records: 2 Duplicates: 0 Warnings: 0
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2.案例
|
||||||
|
|
||||||
|
表:school.student2
|
||||||
|
|
||||||
|
```shell
|
||||||
|
字段名 数据类型
|
||||||
|
编号 id int
|
||||||
|
姓名 name varchar(50)
|
||||||
|
出生年份 born_year year
|
||||||
|
生日 birthday date
|
||||||
|
上课时间 class_time time
|
||||||
|
注册时间 reg_time datetime
|
||||||
|
```
|
||||||
|
|
||||||
|
创建表:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> create table student2(
|
||||||
|
id int,
|
||||||
|
name varchar(50),
|
||||||
|
born_year year,
|
||||||
|
birthday date,
|
||||||
|
class_time time,
|
||||||
|
reg_time datetime
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
插入数据:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> insert into student2 values(1,'tom',now(),now(),now(),now());
|
||||||
|
mysql> insert into student2 values(2,'jack',1982,19821120,123000,20140415162545);
|
||||||
|
```
|
||||||
|
|
||||||
|
表:school.student3
|
||||||
|
|
||||||
|
```shell
|
||||||
|
id id int
|
||||||
|
姓名 name varchar(50)
|
||||||
|
性别 sex enum('male','female')
|
||||||
|
爱好 hobby set('music','book','game','disc')
|
||||||
|
```
|
||||||
|
|
||||||
|
创建表:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> create table student3(
|
||||||
|
id int,
|
||||||
|
name varchar(50),
|
||||||
|
sex enum('male','female'),
|
||||||
|
hobby set('music','book','game','disc')
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
查看表结构:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> desc student3;
|
||||||
|
mysql> show create table student3\G
|
||||||
|
```
|
||||||
|
|
||||||
|
插入数据:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> insert into student3 values (1,'tom','male','book,game');
|
||||||
|
mysql> insert into student3 values (2,'jack','male','film');
|
||||||
|
```
|
||||||
|
|
||||||
|
注意:
|
||||||
|
|
||||||
|
DESCRIBE查看表结构
|
||||||
|
|
||||||
|
```shell
|
||||||
|
DESCRIBE 表名;
|
||||||
|
DESC 表名;
|
||||||
|
```
|
||||||
|
|
||||||
|
查看表详细结构
|
||||||
|
|
||||||
|
```shell
|
||||||
|
SHOW CREATE TABLE 表名;
|
||||||
|
```
|
||||||
|
|
||||||
|
## 三:表完整性约束
|
||||||
|
|
||||||
|
#### 1.作用
|
||||||
|
|
||||||
|
用于保证数据的完整性和一致性
|
||||||
|
|
||||||
|
#### 2.约束条件
|
||||||
|
|
||||||
|
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录,不可以为空 UNIQUE + NOT NULL
|
||||||
|
|
||||||
|
FOREIGN KEY (FK) 标识该字段为该表的外键,实现表与表(父表主键/子表1外键/子表2外键)之间的关联
|
||||||
|
|
||||||
|
NOT NULL 标识该字段不能为空
|
||||||
|
|
||||||
|
UNIQUE KEY (UK) 标识该字段的值是唯一的,可以为空,一个表中可以有多个UNIQUE KEY
|
||||||
|
|
||||||
|
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
|
||||||
|
|
||||||
|
DEFAULT 为该字段设置默认值
|
||||||
|
|
||||||
|
注意:
|
||||||
|
|
||||||
|
是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
|
||||||
|
|
||||||
|
字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [(none)]> sex enum('male','female') not null default 'male'
|
||||||
|
MySQL [(none)]> age int unsigned NOT NULL default 20 必须为正值(无符号) 不允许为空 默认是20
|
||||||
|
```
|
||||||
|
|
||||||
|
是否是key 主键 primary key 外键 forengn key
|
||||||
|
|
||||||
|
#### 3.NOT NULL
|
||||||
|
|
||||||
|
表:school.student4
|
||||||
|
|
||||||
|
创建表:(注意前提需要有库)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> create table school.student4(
|
||||||
|
id int not null,
|
||||||
|
name varchar(50) not null,
|
||||||
|
sex enum('m','f') default 'm' not null,
|
||||||
|
age int unsigned default 18 not null,
|
||||||
|
hobby set('music','disc','dance','book') default 'book,dance'
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
插入数据:(注意观察查询到的数据)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [(none)]> insert into school.student4(id,name) values(2,'robin');
|
||||||
|
Query OK, 1 row affected (0.08 sec)
|
||||||
|
|
||||||
|
MySQL [(none)]> select * from school.student4;
|
||||||
|
+----+-------+-----+-----+------------+
|
||||||
|
| id | name | sex | age | hobby |
|
||||||
|
+----+-------+-----+-----+------------+
|
||||||
|
| 2 | robin | m | 18 | dance,book |
|
||||||
|
+----+-------+-----+-----+------------+
|
||||||
|
1 row in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
注意报错的原因:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [(none)]> insert into school.student4 values(3,NULL,'m',40,'book');
|
||||||
|
ERROR 1048 (23000): Column 'name' cannot be null
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4.唯一约束
|
||||||
|
|
||||||
|
作用:
|
||||||
|
|
||||||
|
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度
|
||||||
|
|
||||||
|
表:company.department1
|
||||||
|
|
||||||
|
创建表:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [(none)]> create database company;
|
||||||
|
Query OK, 1 row affected (0.01 sec)
|
||||||
|
MySQL [(none)]> CREATE TABLE company.department1 (dept_id INT,dept_name VARCHAR(30) UNIQUE,comment VARCHAR(50));
|
||||||
|
Query OK, 0 rows affected (0.34 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
查看表结构:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [(none)]> desc company.department1;
|
||||||
|
+-----------+-------------+------+-----+---------+-------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-----------+-------------+------+-----+---------+-------+
|
||||||
|
| dept_id | int(11) | YES | | NULL | |
|
||||||
|
| dept_name | varchar(30) | YES | UNI | NULL | |
|
||||||
|
| comment | varchar(50) | YES | | NULL | |
|
||||||
|
+-----------+-------------+------+-----+---------+-------+
|
||||||
|
3 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
数据插入:(注意查看插入数据时的提示)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [(none)]> insert into company.department1 values ("1","xingdian","hr");
|
||||||
|
Query OK, 1 row affected (0.04 sec)
|
||||||
|
|
||||||
|
MySQL [(none)]> insert into company.department1 values ("1","xingdian","hr");
|
||||||
|
ERROR 1062 (23000): Duplicate entry 'xingdian' for key 'dept_name'
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5.主键约束
|
||||||
|
|
||||||
|
注意:primary key 字段的值是不允许重复,且不允许不NULL(UNIQUE + NOT NULL)
|
||||||
|
|
||||||
|
表:school.student6
|
||||||
|
|
||||||
|
创建表:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [(none)]> create table school.student6(
|
||||||
|
id int primary key not null auto_increment,
|
||||||
|
name varchar(50) not null,
|
||||||
|
sex enum('male','female') not null default 'male',
|
||||||
|
age int not null default 18
|
||||||
|
);
|
||||||
|
Query OK, 0 rows affected (0.47 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
插入数据:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [(none)]> insert into school.student6 values (1,'alice','female',22);
|
||||||
|
Query OK, 1 row affected (0.18 sec)
|
||||||
|
|
||||||
|
MySQL [(none)]> insert into school.student6(name,sex,age) values
|
||||||
|
-> ('jack','male',19),
|
||||||
|
-> ('tom','male',23);
|
||||||
|
Query OK, 2 rows affected (0.14 sec)
|
||||||
|
Records: 2 Duplicates: 0 Warnings: 0
|
||||||
|
|
||||||
|
MySQL [(none)]> select * from school.student6;
|
||||||
|
+----+-------+--------+-----+
|
||||||
|
| id | name | sex | age |
|
||||||
|
+----+-------+--------+-----+
|
||||||
|
| 1 | alice | female | 22 |
|
||||||
|
| 2 | jack | male | 19 |
|
||||||
|
| 3 | tom | male | 23 |
|
||||||
|
+----+-------+--------+-----+
|
||||||
|
3 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## 四:修改表
|
||||||
|
|
||||||
|
语法格式:
|
||||||
|
|
||||||
|
修改表名
|
||||||
|
|
||||||
|
ALTER TABLE 表名 RENAME 新表名;
|
||||||
|
|
||||||
|
增加字段
|
||||||
|
|
||||||
|
ALTER TABLE 表名
|
||||||
|
|
||||||
|
ADD 字段名 数据类型 [完整性约束条件…],
|
||||||
|
|
||||||
|
ADD 字段名 数据类型 [完整性约束条件…];
|
||||||
|
|
||||||
|
ALTER TABLE 表名
|
||||||
|
|
||||||
|
ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
|
||||||
|
删除字段
|
||||||
|
|
||||||
|
ALTER TABLE 表名 DROP 字段名;
|
||||||
|
|
||||||
|
修改字段
|
||||||
|
|
||||||
|
ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…];
|
||||||
|
|
||||||
|
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
|
||||||
|
|
||||||
|
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
|
||||||
|
|
||||||
|
#### 1.修改数据库引擎
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> alter table service engine=innodb; //engine=myisam|memory|....
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2.添加字段
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> create table student10 (id int);
|
||||||
|
mysql> alter table student10 add name varchar(20) not null, add age int not null default 22;
|
||||||
|
|
||||||
|
mysql> alter table student10 add stu_num int not null after name; //添加name字段之后
|
||||||
|
|
||||||
|
mysql> alter table student10 add sex enum('male','female') default 'male' first; //添加到最前面
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3.删除字段
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> alter table student10 drop sex;
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4.修改字段类型
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [school]> desc student10;
|
||||||
|
+-------+---------+------+-----+---------+-------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-------+---------+------+-----+---------+-------+
|
||||||
|
| id | int(11) | YES | | NULL | |
|
||||||
|
| age | int(11) | YES | | NULL | |
|
||||||
|
+-------+---------+------+-----+---------+-------+
|
||||||
|
2 rows in set (0.01 sec)
|
||||||
|
|
||||||
|
MySQL [school]> alter table student10 modify age tinyint not null ;
|
||||||
|
Query OK, 0 rows affected (0.04 sec)
|
||||||
|
Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
|
||||||
|
MySQL [school]> desc student10;
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
| id | int(11) | YES | | NULL | |
|
||||||
|
| age | tinyint(4) | NO | | NULL | |
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
2 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [school]> alter table student10 modify id int not null primary key ; ////修改字段类型、约束、主键
|
||||||
|
Query OK, 0 rows affected (0.02 sec)
|
||||||
|
Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
|
||||||
|
MySQL [school]> desc student10;
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
| id | int(11) | NO | PRI | NULL | |
|
||||||
|
| age | tinyint(4) | NO | | NULL | |
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5.增加约束
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [school]> alter table student10 modify id int not null primary key ;
|
||||||
|
Query OK, 0 rows affected (0.02 sec)
|
||||||
|
Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
|
||||||
|
MySQL [school]> desc student10;
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
| id | int(11) | NO | PRI | NULL | |
|
||||||
|
| age | tinyint(4) | NO | | NULL | |
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
2 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [school]> alter table student10 modify id int not null primary key auto_increment;
|
||||||
|
ERROR 1068 (42000): Multiple primary key defined //错误,该字段已经是primary key
|
||||||
|
|
||||||
|
MySQL [school]> alter table student10 modify id int not null auto_increment;
|
||||||
|
Query OK, 0 rows affected (0.04 sec)
|
||||||
|
Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
|
||||||
|
MySQL [school]> desc student10;
|
||||||
|
+-------+------------+------+-----+---------+----------------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-------+------------+------+-----+---------+----------------+
|
||||||
|
| id | int(11) | NO | PRI | NULL | auto_increment |
|
||||||
|
| age | tinyint(4) | NO | | NULL | |
|
||||||
|
+-------+------------+------+-----+---------+----------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 6.增加主键
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [school]> desc student1;
|
||||||
|
+-------+---------+------+-----+---------+-------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-------+---------+------+-----+---------+-------+
|
||||||
|
| id | int(11) | YES | | NULL | |
|
||||||
|
| age | int(11) | YES | | NULL | |
|
||||||
|
| name | char(1) | YES | | NULL | |
|
||||||
|
+-------+---------+------+-----+---------+-------+
|
||||||
|
3 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [school]> alter table student1 add primary key(id);
|
||||||
|
|
||||||
|
MySQL [school]> desc student1;
|
||||||
|
+-------+---------+------+-----+---------+-------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-------+---------+------+-----+---------+-------+
|
||||||
|
| id | int(11) | NO | PRI | NULL | |
|
||||||
|
| age | int(11) | YES | | NULL | |
|
||||||
|
| name | char(1) | YES | | NULL | |
|
||||||
|
+-------+---------+------+-----+---------+-------+
|
||||||
|
3 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 7.修改主键和自增
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [school]> alter table student1 modify id int auto_increment;
|
||||||
|
Query OK, 0 rows affected (0.03 sec)
|
||||||
|
Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
|
||||||
|
MySQL [school]> desc student1;
|
||||||
|
+-------+---------+------+-----+---------+----------------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-------+---------+------+-----+---------+----------------+
|
||||||
|
| id | int(11) | NO | PRI | NULL | auto_increment |
|
||||||
|
| age | int(11) | YES | | NULL | |
|
||||||
|
| name | char(1) | YES | | NULL | |
|
||||||
|
+-------+---------+------+-----+---------+----------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 8.删除主键
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [school]> desc student10;
|
||||||
|
+-------+------------+------+-----+---------+----------------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-------+------------+------+-----+---------+----------------+
|
||||||
|
| id | int(11) | NO | PRI | NULL | auto_increment |
|
||||||
|
| age | tinyint(4) | NO | | NULL | |
|
||||||
|
+-------+------------+------+-----+---------+----------------+
|
||||||
|
2 rows in set (0.00 sec)
|
||||||
|
|
||||||
|
MySQL [school]> alter table student10 drop primary key;
|
||||||
|
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
|
||||||
|
|
||||||
|
删除自增
|
||||||
|
ySQL [school]> alter table student10 modify id int not null;
|
||||||
|
Query OK, 0 rows affected (0.04 sec)
|
||||||
|
Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
|
||||||
|
MySQL [school]> desc student10;
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
| id | int(11) | NO | PRI | NULL | |
|
||||||
|
| age | tinyint(4) | NO | | NULL | |
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
|
||||||
|
MySQL [school]> alter table student10 drop primary key;
|
||||||
|
Query OK, 0 rows affected (0.03 sec)
|
||||||
|
Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
|
||||||
|
MySQL [school]> desc student10;
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
| id | int(11) | NO | | NULL | |
|
||||||
|
| age | tinyint(4) | NO | | NULL | |
|
||||||
|
+-------+------------+------+-----+---------+-------+
|
||||||
|
2 rows in set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 9.复制表
|
||||||
|
|
||||||
|
复制表结构+记录 (key不会复制: 主键、外键和索引)复制表结构/记录+表结构,不会将Key复制
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> create table new_service select * from service;
|
||||||
|
```
|
||||||
|
|
||||||
|
只复制表结构
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> create table new1_service select * from service where 1=2; //条件为假,查不到任何记录
|
||||||
|
```
|
||||||
|
|
||||||
|
可以复制主键,只复制表结构
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> create table t4 like employees;
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 10.删除表
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> DROP TABLE 表名;
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 11.修改数据表中字段的值
|
||||||
|
|
||||||
|
语法:
|
||||||
|
|
||||||
|
Update 表名 set 列名=值where 条件
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> update student set name='123' where id=1;
|
||||||
|
```
|
||||||
|
|
||||||
|
删除某一行:
|
||||||
|
|
||||||
|
delete from 表名 where id=1
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> delete from type where id=1;
|
||||||
|
```
|
||||||
|
|
||||||
|
## 五:库操作
|
||||||
|
|
||||||
|
#### 1.简介
|
||||||
|
|
||||||
|
系统自带库的含义及作用
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [(none)]> show databases;
|
||||||
|
+--------------------+
|
||||||
|
| Database |
|
||||||
|
+--------------------+
|
||||||
|
| information_schema |
|
||||||
|
| mysql |
|
||||||
|
| performance_schema |
|
||||||
|
| sys |
|
||||||
|
+--------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
information_schema:虚拟库,主要存储了系统中的一些数据库对象的信息,例如用户表信息、列信息、权限信息、字符信息等
|
||||||
|
|
||||||
|
performance_schema:主要存储数据库服务器的性能参数
|
||||||
|
|
||||||
|
mysql:授权库,主要存储系统用户的权限信息
|
||||||
|
|
||||||
|
sys:主要存储数据库服务器的性能参数
|
||||||
|
|
||||||
|
注意:information_schema
|
||||||
|
|
||||||
|
SCHEMATA 存放的是系统中的库
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [information_schema]> select * from information_schema.SCHEMATA;
|
||||||
|
+--------------+--------------------+----------------------------+------------------------+----------+
|
||||||
|
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
|
||||||
|
+--------------+--------------------+----------------------------+------------------------+----------+
|
||||||
|
| def | information_schema | utf8 | utf8_general_ci | NULL |
|
||||||
|
| def | mysql | latin1 | latin1_swedish_ci | NULL |
|
||||||
|
| def | performance_schema | utf8 | utf8_general_ci | NULL |
|
||||||
|
| def | school | latin1 | latin1_swedish_ci | NULL |
|
||||||
|
| def | sys | utf8 | utf8_general_ci | NULL |
|
||||||
|
+--------------+--------------------+----------------------------+------------------------+----------+
|
||||||
|
|
||||||
|
目录_名称
|
||||||
|
实际库_名称
|
||||||
|
默认_字符_设置_名称
|
||||||
|
默认_分类_名称
|
||||||
|
```
|
||||||
|
|
||||||
|
TABLES 存储表名
|
||||||
|
|
||||||
|
```shell
|
||||||
|
MySQL [information_schema]> select * from information_schema.TABLES\G
|
||||||
|
*************************** 283. row ***************************
|
||||||
|
TABLE_CATALOG: def
|
||||||
|
TABLE_SCHEMA: xingdian
|
||||||
|
TABLE_NAME: t1
|
||||||
|
TABLE_TYPE: BASE TABLE
|
||||||
|
ENGINE: InnoDB
|
||||||
|
VERSION: 10
|
||||||
|
ROW_FORMAT: Dynamic
|
||||||
|
TABLE_ROWS: 1
|
||||||
|
AVG_ROW_LENGTH: 16384
|
||||||
|
DATA_LENGTH: 16384
|
||||||
|
MAX_DATA_LENGTH: 0
|
||||||
|
INDEX_LENGTH: 0
|
||||||
|
DATA_FREE: 0
|
||||||
|
AUTO_INCREMENT: NULL
|
||||||
|
CREATE_TIME: 2022-09-22 08:18:38
|
||||||
|
UPDATE_TIME: 2022-09-22 08:18:54
|
||||||
|
CHECK_TIME: NULL
|
||||||
|
TABLE_COLLATION: latin1_swedish_ci
|
||||||
|
CHECKSUM: NULL
|
||||||
|
CREATE_OPTIONS:
|
||||||
|
TABLE_COMMENT:
|
||||||
|
283 rows in set (0.02 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
COLUMNS 存储字段
|
||||||
|
|
||||||
|
```shell
|
||||||
|
*************************** 3083. row ***************************
|
||||||
|
TABLE_CATALOG: def
|
||||||
|
TABLE_SCHEMA: xingdian
|
||||||
|
TABLE_NAME: t1
|
||||||
|
COLUMN_NAME: id
|
||||||
|
ORDINAL_POSITION: 1
|
||||||
|
COLUMN_DEFAULT: NULL
|
||||||
|
IS_NULLABLE: YES
|
||||||
|
DATA_TYPE: int
|
||||||
|
CHARACTER_MAXIMUM_LENGTH: NULL
|
||||||
|
CHARACTER_OCTET_LENGTH: NULL
|
||||||
|
NUMERIC_PRECISION: 10
|
||||||
|
NUMERIC_SCALE: 0
|
||||||
|
DATETIME_PRECISION: NULL
|
||||||
|
CHARACTER_SET_NAME: NULL
|
||||||
|
COLLATION_NAME: NULL
|
||||||
|
COLUMN_TYPE: int(11)
|
||||||
|
COLUMN_KEY:
|
||||||
|
EXTRA:
|
||||||
|
PRIVILEGES: select,insert,update,references
|
||||||
|
COLUMN_COMMENT:
|
||||||
|
GENERATION_EXPRESSION:
|
||||||
|
3083 rows in set (0.03 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2.创建库
|
||||||
|
|
||||||
|
方案一:交互式操作
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> create database xingdian;
|
||||||
|
```
|
||||||
|
|
||||||
|
数据库命名规则:
|
||||||
|
|
||||||
|
区分大小写
|
||||||
|
|
||||||
|
唯一性
|
||||||
|
|
||||||
|
不能使用关键字如 create select
|
||||||
|
|
||||||
|
不能单独使用数字
|
||||||
|
|
||||||
|
方案二:非交互式
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql -u root -pQianFeng@123 -e "create database diandian"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3.查看数据库
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> show databases;
|
||||||
|
mysql> show create database xingdian;
|
||||||
|
mysql> select database(); 查看当前所在的库
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4.切换数据库
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> use xingdian;
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5.删除数据库
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> DROP DATABASE 数据库名;
|
||||||
|
```
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,135 @@
|
||||||
|
<h1><center>数据库日志管理</center></h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
## 一:日志管理
|
||||||
|
|
||||||
|
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220925214046253.png" alt="image-20220925214046253" style="zoom:50%;" />
|
||||||
|
|
||||||
|
#### 1.日志分类
|
||||||
|
|
||||||
|
错误日志 :启动,停止,关闭失败报错。rpm安装日志位置 /var/log/mysqld.log
|
||||||
|
|
||||||
|
通用查询日志:所有的查询都记下来
|
||||||
|
|
||||||
|
二进制日志:实现备份,增量备份。只记录改变数据,除了select都记
|
||||||
|
|
||||||
|
中继日志:读取主服务器的binlog,在本地回放。保持一致
|
||||||
|
|
||||||
|
slow log:慢查询日志,指导调优,定义某一个查询语句,定义超时时间,通过日志提供调优建议给开发人员
|
||||||
|
|
||||||
|
DDL log: 定义语句的日志
|
||||||
|
|
||||||
|
#### 2.Error Log
|
||||||
|
|
||||||
|
```shell
|
||||||
|
log-error=/var/log/mysqld.log
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3.Binary Log
|
||||||
|
|
||||||
|
```
|
||||||
|
log-bin=/var/log/mysql-bin/slave2
|
||||||
|
server-id=2
|
||||||
|
|
||||||
|
[root@slave2 ~]# mkdir /var/log/mysql-bin
|
||||||
|
[root@slave2 ~]# chown mysql.mysql /var/log/mysql-bin/
|
||||||
|
[root@slave2 ~]# systemctl restart mysqld
|
||||||
|
```
|
||||||
|
|
||||||
|
注意:
|
||||||
|
|
||||||
|
需要提前开启
|
||||||
|
|
||||||
|
查看binlog日志:
|
||||||
|
|
||||||
|
```shel
|
||||||
|
[root@slave2 ~]# mysqlbinlog slave2-bin.000001 -v --base64-output=decode-rows
|
||||||
|
时间点 : 141126 14:04:49
|
||||||
|
位置点 : at 106
|
||||||
|
注:
|
||||||
|
1. 重启mysqld 会截断
|
||||||
|
2. flush logs 会截断
|
||||||
|
3. reset master 删除所有binlog rm -rf /var/lib/mysql/*.000001
|
||||||
|
4. 删除部分
|
||||||
|
PURGE BINARY LOGS TO 'mysql-bin.010';
|
||||||
|
PURGE BINARY LOGS BEFORE '2019-04-02 22:46:26';
|
||||||
|
|
||||||
|
截取binlog
|
||||||
|
all:
|
||||||
|
# mysqlbinlog mysql.000002
|
||||||
|
|
||||||
|
datetime:
|
||||||
|
# mysqlbinlog mysql.000002 --start-datetime="2018-12-05 10:02:56"
|
||||||
|
# mysqlbinlog mysql.000002 --stop-datetime="2018-12-05 11:02:54"
|
||||||
|
# mysqlbinlog mysql.000002 --start-datetime="2018-12-05 10:02:56" --stop-datetime="2018-12-05 11:02:54"
|
||||||
|
|
||||||
|
position:
|
||||||
|
# mysqlbinlog mysql.000002 --start-position=260
|
||||||
|
# mysqlbinlog mysql.000002 --stop-position=260
|
||||||
|
# mysqlbinlog mysql.000002 --start-position=260 --stop-position=930
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4.Slow Query Log
|
||||||
|
|
||||||
|
开启慢查询日志:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# vim /etc/my.cnf
|
||||||
|
slow_query_log=1
|
||||||
|
slow_query_log_file=/var/log/mysql-slow/slow.log
|
||||||
|
long_query_time=3 设置慢查询超时时间 单位是:秒
|
||||||
|
```
|
||||||
|
|
||||||
|
创建对应目录:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# mkdir /var/log/mysql-slow
|
||||||
|
[root@xingdian ~]# chown mysql.mysql mysql-slow
|
||||||
|
```
|
||||||
|
|
||||||
|
重启服务:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# systemctl restart mysqld
|
||||||
|
```
|
||||||
|
|
||||||
|
验证:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# mysql -uroot -pQianFeng@123
|
||||||
|
mysql: [Warning] Using a password on the command line interface can be insecure.
|
||||||
|
Welcome to the MySQL monitor. Commands end with ; or \g.
|
||||||
|
Your MySQL connection id is 2
|
||||||
|
Server version: 5.7.39-log MySQL Community Server (GPL)
|
||||||
|
|
||||||
|
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
|
||||||
|
|
||||||
|
Oracle is a registered trademark of Oracle Corporation and/or its
|
||||||
|
affiliates. Other names may be trademarks of their respective
|
||||||
|
owners.
|
||||||
|
|
||||||
|
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
|
||||||
|
|
||||||
|
mysql> select sleep(6);
|
||||||
|
+----------+
|
||||||
|
| sleep(6) |
|
||||||
|
+----------+
|
||||||
|
| 0 |
|
||||||
|
+----------+
|
||||||
|
1 row in set (6.00 sec)
|
||||||
|
|
||||||
|
mysql> exit
|
||||||
|
Bye
|
||||||
|
[root@xingdian ~]# cat /var/log/mysql-slow/slow.log
|
||||||
|
/usr/sbin/mysqld, Version: 5.7.39-log (MySQL Community Server (GPL)). started with:
|
||||||
|
Tcp port: 0 Unix socket: /var/lib/mysql/mysql.sock
|
||||||
|
Time Id Command Argument
|
||||||
|
# Time: 2022-09-25T06:58:05.496205Z
|
||||||
|
# User@Host: root[root] @ localhost [] Id: 2
|
||||||
|
# Query_time: 6.007094 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
|
||||||
|
SET timestamp=1664089085;
|
||||||
|
select sleep(6);
|
||||||
|
```
|
Loading…
Reference in New Issue