目录
一、 MySQL 数据库介绍
二、 MySQL 库操作
1. 系统数据库
2. 数据库操作
三、 MySQL 表操作
1. 表介绍
2. 查看表
3. 创建表
4. 查看表结构
5. 修改表
6. 删除表
四、 MySQL 数据操作
4.1 单表查询
4.2 多表查询
一、 MySQL 数据库介绍
数据库目前标准的指令集是 SQL。SQL是 Structured Query Language 的缩写,即结构化查询语言。它是1974年由 Boyce 和 Chamberlin 提出来的,1975~1979 年 IBM 公司研制的关系数据库管理系统原型 System R实现了这种语言。经过多年的发展,SQL 语言得到了广泛的应用。
SQL 语音主要由以下几部分组成。
- DDL (Data Definition Language,数据定义语言):用来建立数据库、数据库对象和定义字段,如CREATE、ALTER、DROP。
- DML(Data Manipulation Language,数据操纵语言):用来插入、删除和修改数据库中的数据,如INSERT、UPDATE、DELETE。
- DQL(Data Query Language,数据查询语言):用来查询数据库中的数据如 SELECT。
- DCL(Data Control Language,数据控制语言):用来控制数据库组件的存取许可、存取权限等,如 COMMIT、ROLLBACK、GRANT、REVOKE。
二、 MySQL 库操作
1. 系统数据库
经初始化后的 MySQL 服务器,默认建立了四个数据库:sys、mysql、information schema performance schema。
- information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等
- performance schema: MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象
- mysql:授权库,主要存储系统用户的权限信息
- sys: 主要用于存储系统性能信息和监控数据,对数据库的性能优化和故障排除具有关键作用
2. 数据库操作
(1) 创建数据库
语法:
CREATE DATABASE 数据库名:
(2) 数据库命名规则
- 可以由字母、数字、下划线、@、#、$
- 区分大小写
- 唯一性
- 不能使用 MySQL 保留字(如 SELECT、FROM 等)
- 不能单独使用数字
- 最长 128 位
(3) 选择数据库
语法:
USE 数据库名;
(4) 查看数据库
使用如下命令查看当前库中有哪些表
show databases;
(5) 删除数据库
语法:
DROP DATABASE 数据库名;
三、 MySQL 表操作
1. 表介绍
库相当于文件夹。而表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段
2. 查看表
使用 SHOW TABLES 查看当前所在的数据库中包含的表。在操作之前,需要先使用 USE 语句切换到所使用的数据库,就像要査看一个文件夹里面有多少文件,要先进入这个文件夹
3. 创建表
(1) 语法
语法:
create table表名(字段名1 类型[(宽度)约束条件],
字段名 2 类型[(宽度)约束条件],
字段名 3 类型[(宽度)约束条件]);
在创建表时有以下几点需要注意:
- 在同一张表中,字段名是不能相同
- 宽度和约束条件可选
- 字段名和类型是必须的,字段的类型宽度和约束条件是可选项
- 表中最后一个字段不要加逗号
(2) 类型介绍
表内存放的数据有不同的类型,类似于使用excel存储数据时也需要设置的数据类型,每种数据类型都有自己的宽度,但宽度是可选的,不设置宽度时,会使用字段的默认宽度。MySQL, 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。对于我们约束数据的类型有很大的帮助
数值类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
INT | 4 字节 | (-2 147 483 648,2 147483 647) | (0,4 294 967 295) | 大整数值 |
DOUBLE | 8 字节 | (-1.797E+308,-2.22E- 308) | (0,2.22E-308,1.797E+308) | 双精度浮点数值 |
DOUBLE(M,D) | 8个字节,M表示长度,D表示小数位数 | 同上,受M和D的约束DOUBLE(5,2)-999.99-999.99 | 同上,受M和D的约束 | 双精度浮点数值 |
DECIMAL(M,D) | DECIMAL(M,D) | 依赖于M和D的值,M最大值为65 | 依赖于M和D的值,M最大值为65 | 小数值 |
日期类型
类型 | 大小 | 范围 | 格式 | 用途 |
类型 | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59"/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DDHH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-0100:00:00/2038 结束时间是第 2147483647 秒北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨03:14:07 | YYYYMMDDHH鵓ù蕪捧比MSS | 混合日期和时间值,时间戳 |
字符串类型
类型 | 大小 | 用途 |
CHAR | 0-255字符 | 定长字符串 char(10) 10个字符 |
VARCHAR | 0-65535 字节 | 变长字符串 varchar(10) 10个字符 |
BLOB(binary large object) | 0-65535字节 | 二进制形式的长文本数据 |
TEXT | 0-65535字节 | 长文本数据 |
(3) 约束条件
约束条件与数据类型的宽度一样,都是可选参数,类似于使用excel存储数据时,可以利用 excel 的公式限制员工 ID 列:禁止重复值,且不能为空约束条件作用:用于保证数据的完整性和一致性,主要分为:
约束条件 | 说明 |
PRIMARY KEY (PK) | 标识该字段为该表的主键,可以唯一的标识记录 |
FOREIGN KEY (FK) | 标识该字段为该表的外键 |
NOT NULL | 标识该字段不能为空 |
UNIQUE KEY(UK) | 标识该字段的值是唯一的 |
AUTO INCREMENT | 标识该字段的值自动增长(整数类型,而且为主键) |
DEFAULT | 为该字段设置默认值 |
UNSIGNED | 无符号 |
ZEROFILL | 使用 0填充 |
ENMU() | 限制字段可以存储的值集合 |
4. 查看表结构
DESCRIBE 语句:用于显示表的结构,即组成表的各字段(列)的信息。需要指定“数据库名.表名”作为参数;若只指定表名参数,则需先通过 USE 语句切换到目标数据库
查看详细表结构或者创建表所使用的语句可以执行 show create table tl\G;#查看表详细结构,可加\G。\G表示以长格式展示结果
5. 修改表
(1) 修改表名
ALTER TABLE表名RENAME 新表名;
(2) 增加字段
ALTER TABLE表名ADD 字段名数据类型[完整性约束条件…],ADD 字段名数据类型[完整性约束条件…]
ALTER TABLE 表名 ADD 字段名,数据类型[完整性约束条件…]FIRST;
ALTER TABLE 表名 ADD 字段名,数据类型[完整性约束条件…]AFTER 字段名;
(3) 删除字段
ALTER TABLE 表名DROP 字段名;
(4) 修改字段
ALTER TABLE 表名 MODIFY 字段名 数据类型[完整性约束条件…];ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型[完整性约束条件…];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型[完整性约束条件…];
6. 删除表
删除数据库中的表,需要指定“数据库名.表名”作为参数;若只指定表名参数,则需先通过执行“USE”语句切换到目标数据库
DROP TABLE 表名;
四、 MySQL 数据操作
4.1 单表查询
(1) 单表查询语法
SELECT 字段1,字段 2...FROM 表名WHERE 条件GROUP BY 字段HAVING 筛选ORDER BY 字段LIMIT 限制条数
(2) 关键字执行的优先级
from
where
group by
having
select
order by
limit
说明:
- 找到表:from
- 拿着 where 指定的约束条件,去文件/表中取出一条条记录
- 将取出的一条条记录进行分组 group by,如果没有 group by,则整体作为组
- 将分组的结果进行 having 过滤
- 执行 select
- 将结果按条件排序:order by
- 限制结果的显示条数:limit
(3) 简单查询
语法:把表中需要的列的数据查询出来
SELECT 字段 1,字段 2... FROM 表名
(4) where 条件
WHERE是 SQL, 中用于筛选数据的核心子句,其作用是通过指定条件从表中过滤出符合条件的记录。它可应用于 SELECT、UPDATE、DELETE 等语句中,控制操作的范围
where 字句中可以使用:
- 比较运算符:>く>=<=く>!=
- between 80 and 100 值在 10 到20 之间
- in(80,90,100)值是 10 或 20 或 30
- like 'egon%'pattern 可以是%或,%表示任意多字符表示一个字符
- 逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not
4.2 多表查询
(1) 子查询
子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语句。子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一步的查询过滤。子查询不仅可以在 SELECT 语句中使用,在 INERT、UPDATE、DELETE 中也同样适用。在嵌套的时候,子查询内部还可以再次嵌套新的子查询,也就是说可以多层嵌套。
在开始实际的举例之前,先来学习一下IN 这个操作符的用法,IN 用来判断某个值是否在给定的结果集中,通常结合子查询来使用。IN的语法结构如下:
<表达式>[NOT]IN<子查询>
当表达式与子查询返回的结果集中的某个值相等时,返回TRUE,否则返回FALSE。若启用了 NOT 关键字,则返回值相反。需要注意的是,子查询只能返回一列数据,如果需求比较复杂,一列解决不了问题,可以使用多层嵌套的方式来应对。
(2) 多表连接查询
MySQL 的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择性的连接到选定的主表结果集上。使用较多的连接查询包括内连接、左连接和右连接。
内连接
MySQL中的内连接就是两张或多张表中同时符合某种条件的数据记录的组合。通常在FROM 子句中使用关键字INNERJOIN 来连接多张表,并使用 ON 子句设置连接条件。内连接的语法格式如下。
SELECT column name(s)FROM tablel
INNER JOIN table2 ON tablel.column name = table2.column name;
左连接
MySQL 除了内连接,还可以使用外连接。区别于MySQL 外连接是将表分为基础表和参考表,再依据基础表返回满足条件或不满足条件的记录。外连接按照连接时表的顺序来分,有左连接和右连接之分。
左连接也可以被称为左外连接,在FROM 子句中使用LEFT JOIN 或者 LEFI0UTER JOIN 关键字来表示。左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行
右连接
右连接也被称为右外连接,在FROM 子句中使用RIGHT JOIN 或者 RIGHTOUTER JOIN 关键字来表示。右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配。也就是说匹配右表中的每一行及左表中符合条件的记录