MySQL是目前流行的数据库管理系统,使用SQL语法操作和管理。
准备工作
- 启动MySQL服务
1sudo service mysql start
- 登录MySQL
1mysql -u '用户名' -p '密码'
MySQL基本操作
通用语法
-
单行或多行书写,以分号结尾。
-
可以使用空格/缩进。
-
SQL语句不区分大小写,关键字建议大写。
-
单行注释:
--注释内容或# 注释内容;多行注释:/* 注释内容 */。
基本概念
字段(columns):相当于表格中一列的数据。
数据(rows):相当于表格中一行的内容。
SQL语句分类
| 分类 | 全称 | 说明 |
|---|---|---|
| DDL | Data Definition Language | 数据定义语言,用于定义数据库对象 |
| DML | Data Manipulation Language | 数据操作语言,用于数据库中数据的增删改 |
| DQL | Data Query Language | 数据查询语言,用于查询数据库中表的记录 |
| DCL | Data Control Language | 数据控制语言,用于创建数据库用户、控制数据库访问权限 |
DDL
数据定义语言,用于定义数据库对象
数据库操作
- 查询
1-- 查询所有数据库
2SHOW DATABASES;
3-- 查询当前数据库
4SELECT DATABASE();
- 创建
1CREATE DATABASE [IF NOT EXISTS] 数据库名
2[DEFAULT CHARSET 字符集] [COLLATE 排序规则];
MySQL中建议使用字符集
UTF8mb4。
- 删除
1DROP DATABASE [IF EXISTS] 数据库名;
- 使用
1USE 数据库名;
表操作
- 查询
- 查询当前数据库中所有表
1SHOW TABLE;
- 查询表结构
1DESC 表名;
- 查询指定表的建表语句
1SHOW CREATE TABLE 表名;
- 创建
1CREATE TABLE 表名(
2 字段1 字段1类型 [COMMENT '字段1注释'],
3 字段2 字段2类型 [COMMENT '字段2注释'],
4 字段3 字段3类型 [COMMENT '字段3注释'],
5 ...
6 字段n 字段n类型 [COMMENT '字段n注释']
7) [COMMENT '表注释'];
参见:MySQL的数据类型
- 修改
- 添加字段
1ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT '注释'] [约束];
- 修改数据类型
1ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
- 修改字段名和字段类型
1ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT '注释'] [约束];
- 删除字段
1ALTER TABLE 表名 DROP 字段名;
- 修改表名
1ALTER TABLE 表名 RENAME TO 新表名;
- 删除表
1-- 删除表
2DROP TABLE [IF EXISTS] 表名;
3-- 删除指定表,并重新创建该表
4TRUNCATE TABLE 表名;
DML
数据操作语言,用于数据库中数据的增删改。
添加数据
- 给指定字段添加数据
1INSERT INTO 表名(字段名1, 字段名2, ...) VALUES(值1,值2,...);
- 给全部字段添加数据
1INSERT INTO 表名 VALUES(值1,值2,...);
- 批量添加数据
1-- 指定字段名添加
2INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...),(值1,值2,...),(...);
3-- 全部添加
4INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
注意:
- 插入数据时,指定的字段顺序需要与值的顺序相对应。
- 字符串和日期型数据应包含在引号中。
- 插入数据的大小应该在字段的指定范围内。
修改数据
1UPDATE 表名 SET 字段名1=值1,字段名2=值2,... [WHERE 条件];
2-- 作用是修改满足条件的一行数据对应字段的值,不是修改字段名
3-- 如果没有修改条件,则会修改整张表中所有数据
删除数据
1DELETE FROM 表名 [WHERE 条件];
2-- 如果没有修改条件,则会修改整张表中所有数据
3-- DELETE语句不能删除某一个字段的值,可以使用UPDATE将该字段值设为NONE
DQL
数据查询语言,用于查询数据库中表的记录。
语法
1SELECT -- 字段列表
2FROM -- 表名列表
3WHERE -- 条件列表
4GROUP BY -- 分组字段列表
5HAVING -- 分组后筛选列表
6ORDER BY -- 排序字段列表
7LIMIT -- 分页参数
基本查询
- 查询多个字段
1-- 查询指定字段
2SELECT 字段1,字段2,... FROM 表名;
3-- 查询所有字段
4SELECT * FROM 表名;
- 设置别名
1SELECT 字段1 [AS 别名1], 字段2 [AS 别名2],... FROM 表名;
2-- AS可省略
- 去除重复记录
1SELECT DISTINCT 字段列表 FROM 表名;
条件查询
- 语法
1SELECT 字段列表 FROM 表名 WHERE 条件;
- 条件
| 运算符 | 功能 | 运算符 | 功能 |
|---|---|---|---|
| > | 大于 | IN(…) | 在in之后的列表中的值(多选一) |
| >= | 大于等于 | LIKE 占位符 | 模糊匹配( _ 匹配单个字符,% 匹配任意个字符) |
| < | 小于 | IS NULL | 数据为空 |
| <= | 小于等于 | AND 或 && | 逻辑与 |
| = | 等于 | OR 或 || |
逻辑或 |
| <> 或 != | 不等于 | NOT 或! | 逻辑非 |
| BETWEEN…AND… | 在某个范围之间(含端点) |
MySQL管理可视化
面对单调的MySQL代码是非常无聊的,因此通过软件可视化管理MySQL数据库是不错的选择。
Navicat是一款综合性的数据库管理软件,允许通过一个界面连接和管理多个数据库(其实这个功能大多数类似软件都有)。
Navicat提供多个版本,其中只有Navicat Premium Lite可免费使用(貌似还要注册一个账号)。
功能与Navicat类似,但它提供免费的社区版下载,而且不用注册账号,就像JetBrain全家桶。
这是MySQL的官方提供的可视化管理工具,免费,但是没有中文支持。
MySQL的数据类型
- 数据类型
| 类型 | 大小 | 描述 |
|---|---|---|
| TINYINT | 1 byte | 小整数集 |
| SMALLINT | 2 bytes | 大整数集 |
| MEDIUMINT | 3 bytes | 大整数集 |
| INT | 4 bytes | 大整数集 |
| BIGINT | 8 bytes | 极大整数集 |
| FLOAT | 4 bytes | 单精度浮点数集 |
| DOUBLE | 8 bytes | 双精度浮点数集 |
| DECIMAL | 依赖精度值(总数位)和标度值(小数位) | 精确定点数 |
- 字符串类型
| 类型 | 大小 | 描述 |
|---|---|---|
| CHAR() | 0-255 bytes | 定长字符串 |
| VARCHAR() | 0-65,535 bytes | 变长字符串 |
| TINYBLOB | 0-255 bytes | 二进制数据 |
| TINYTEXT | 0-255 bytes | 短文本字符串 |
| BLOB | 0-65,535 bytes | 二进制长文本数据 |
| TEXT | 0-65,535 bytes | 长文本数据 |
| MEDIUMBLOB | 0-16,777,215 bytes | 二进制中等长度文本数据 |
| MEDIUMTEXT | 0-16,777,215 bytes | 中等长度文本数据 |
| LONGBLOB | 0-4,294,967,295 bytes | 二进制极大文本数据 |
| LONGTEXT | 0-4,294,967,295 bytes | 极大文本数据 |
- 日期类型
| 类型 | 大小 | 格式 | 描述 |
|---|---|---|---|
| DATA | 3 | YYYY-MM-DD | 日期值 |
| TIME | 3 | HH:MM:SS | 时间值或持续时间 |
| TEAR | 1 | YYYY | 年份值 |
| DATETIME | 8 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
| TIMESTAMP | 4 | YYYY-MM-DD HH:MM:SS | 时间戳 |