Mysql实操
一、与MySQL建立连接
1 | # mysql -u用户 -p[密码] -P端口号 -h主机地址 |
二、库表操作
库操作
1 | # 查看数据库 |
表操作
1 | # 建表 |
三、基础操作
增加
1 | 1. 插入完整数据(顺序插入) |
更新
1 | UPDATE 表名 SET 字段1=值1,字段2=值2 WHERE CONDITION; |
查询
1 | # 查询表中所有数据 |
删除
1 | # 删除符合条件的一些记录 |
四、查询详解
1 | SELECT * FROM 表名;这个SELECT * 指的是要查询所有字段的数据。 |
WHERE条件
| 符号 | 说明 | 举例 |
|---|---|---|
| < | 小于,< 左边的值如果小于右边的值,则结果为 TRUE,否则为 FALSE |
如 : 满足年龄小于 18 的条件 age < 18 |
| = | 等于,= 左边的值如果等于右边的值,则结果为 TRUE,否则为 FALSE |
如 : 姓名为 小明 的条件 name = '小明' |
| > | 大于,> 左边的值如果大于右边的值,则结果为 TRUE,否则为 FALSE |
如 : 时间戳大于 2020-03-30 00:00:00的条件 time > 1585497600 |
| <> | 不等于,<>还可写成 != ,左边的值如果不等于右边的值,则结果为 TRUE,否则为 FALSE |
如 : 年份不等于2012的条件 year != 或 year <> 2012 |
| <= | 小于等于,<= 左边的值如果大于右边的值,则结果为 FALSE,否则为 TRUE |
如 : 满足年龄小于等于 18 的条件 age <= 18 |
| >= | 大于等于,>= 左边的值如果小于右边的值,则结果为 FALSE,否则为 TRUE |
如 : 满足年龄大于等于 18 的条件 age >= 18 |
| LIKE | 模糊条件,LIKE 右边的值如果包含左边的值,则结果返回TRUE,否则为 FALSE |
如 : 满足身份证号为 420 开头的条件 id_number LIKE '410%',其中 % 表示任意值 |
| NOT LIKE | 不满足模糊条件,LIKE 右边的值如果不包含左边的值,则结果返回TRUE,否则为 FALSE |
如 : 满足身份证号不是 X 结尾的条件 id_number NOT LIKE '%X',其中 % 表示任意值 |
| BETWEEN AND | 在两个值之间(包含两端值) | 如 : 年龄满足 大于等于20 和 小于等于30 的条件 age BETWEEN 20 AND 30 |
| NOT BETWEEN AND | 不在在两个值之间(不包含两端值) | 如 : 年龄满足 小于20 和 大于30 的条件 age NOT BETWEEN 20 AND 30 |
| IS NULL | 空,IS NULL 左边的值如果为空,则返回TRUE,否则为FALSE |
如 : 年龄满足 邮箱为空 的条件 email IS NULL |
| IS NOT NULL | 不是空,IS NOT NULL 左边的值如果不为空,则返回TRUE,否则为FALSE |
如 : 年龄满足 邮箱不为空 的条件 email IS NOT NULL |
LIKE 模糊查询
1 | # %表示任意多字符 |
AND多条件查询
1 | SELECT * FROM student WHERE age > 18 AND name LIKE '王%'; |
OR多条件查询
1 | SELECT * FROM student WHERE age > 18 OR name LIKE '王%'; |
NULL查询
查询字段为 NULL 的结果集要写成 字段 IS NULL,而不能使用 字段=NULL
UNION 联合查询
1 | # 把两个查询结果聚集到一起 |
GROUP BY分组
1 | select post,count(id) as count from employee group by post; |
使用 GROUP BY 分组时,要将 MySQL 的 sql model 配置中 ONLY_FULL_GROUP_BY 的值去除掉,如果有该 sql_model 配置,在 SELECT 中的列,没有在 GROUP BY 中出现,那么这个 SQL 是不合法的
SELECT @@sql_mode;查看是否有ONLY_FULL_GROUP_BY
若想要配置 sql_mode 则可以在 MySQL 配置文件中 [mysqld] 下面增加 sql_model,设置好之后,重启 MySQL
sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'
HAVING过滤
1 | having的语法格式和where是一模一样的,只不过having是在分组之后进行的进一步的过滤,where不能使用聚合函数,having是可以使用聚合函数的 |
聚合函数
MySQL 主要的聚合函数有 AVG、COUNT、SUM、MIN、MAX
1 | SELECT AVG(salary) FROM employee; # 平均值 |
DISTINCT去重
1 | select count(distinct post) from employee; |
ORDER BY排序
1 | SELECT * FROM employee ORDER BY salary; #默认是升序排列 |
LIMIT限制查询的记录
1 | # 查询指定条数 |
正则匹配查询
1 | SELECT * FROM employee WHERE name REGEXP '^zh'; # 以什么开头 |
JOIN连表查询
LEFT JOIN 左连接
LEFT JOIN 为左连接,是以左边的表为’基准’,若右表没有对应的值,用 NULL 来填补。
RIGHT JOIN 右连接
RIGHT JOIN 为右连接,是以右边的表为’基准’,若左表没有对应的值,用 NULL 来填补。
INNER JOIN 内连接
INNER JOIN 为内连接,展示的是左右两表都有对应的数据。
1 | select employee.id,employee.name,department.name as depart_name from employee left join department on employee.dep_id=department.id; |
全外连接
mysql不支持全外连接 full JOIN,可以使用union联合查询的方式间接实现全外连接
条件判断函数
MySQL 提供的 IF、IFNULL、CASE 三种条件判断函数或结构,条件判断是为了实现控制流,在不同的条件下执行不同的流程
1 | # IF |
五、常见的MySQL数据类型
MySQL数据类型
整型

浮点型

日期

字符串
| 类型名称 | 取值范围 | 需求 |
|---|---|---|
| char | 最多255个字符 | 定长存储 |
| vachar | 最多65535个字符 | 变长存储 |
枚举与集合
| 类型名称 | 取值 |
|---|---|
| 枚举 enum(值,[值]) | 单选 |
| 集合 set(值,[值]) | 多选 |
六、实践练习
建如下两张表并写入数量足够的测试数据:
部门表(dept):包含部门编号和部门名称字段
雇员信息表(emp):包含部门编号、员工工号、员工姓名、具体职务、直接上级、月薪,要求部门表和雇员信息表为一对多关系
(1)列出emp表中各部门的部门号,最高工资,最低工资(可分开写)
(2)列出emp表中各部门job为’销售’的员工的最低工资,最高工资
(3)对于emp中最低工资小于2000的部门,列出job为’销售’的员工的部门号,最低工资,最高工资
(4)根据部门号由高而低,工资由低而高列出每个员工的姓名,部门号,工资(由高到低和由低到高分开写)
(5)对于工资高于本部门平均水平的员工,列出部门号,姓名,工资,按部门号排序
1 | CREATE TABLE dept( |