mysql数据库
前言
本文 mysql数据库 是 哈希空间 2020年6月整理编辑,总结最常用、最实用的MySQL基础语句。
祝你能够愉快享用这份精炼的文档。
本文连接 https://www.hashspace.cn/mysql-shujuku.html 欢迎转发分享。
目录
- 前言
- MySQL数据库介绍
- SQL 也可以 Hello World
- 创建数据库 create database
- 删除数据库 drop database
- 列出数据库
- 使用数据库 use
- 建表 CREATE TABLE
- 列出库里的所有表
- 插入数据 INSERT INTO
- 查询数据 SELECT
- where 查询条件
- 更新数据 UPDATE
- 删除数据 DELETE
- 清空表数据 TRUNCATE
- 表增加字段 ALTER TABLE ADD
- 表删除字段 ALTER TABLE DROP
- 索引优化
- 索引类型
- 创建索引 ALTER TABLE ADD INDEX
- 创建唯一索引 ALTER TABLE ADD UNIQUE
- 删除索引 DROP INDEX
- 查看索引
- 查看建表语句
- 查询SQL执行计划
- 查询、终止执行中的SQL
- mysqldump MySQL导入导出数据
MySQL数据库介绍
MySQL 是最为流行的免费开源关系型数据库系统。在国内外公司都有非常广泛、深入的使用。是目前数据库领域最重要的工具。
MySQL 下载
MySQL 分为 服务器端软件即 MySQL Server 和 MySQL客户端软件 即 MySQL Client 。
MySQL服务器端软件 官方下载地址为 https://dev.mysql.com/downloads/installer/
目前最新版本为 MySQL 8.0
Windows 安装程序 420Mb
https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.20.0.msi
Mac 安装
brew install mysqld
Ubuntu/Linux 安装
apt install mysqld
MySQL 连接数据库
通过使用 MySQL 客户端软件连接数据库。可以参考文章 MySQL 连接数据库 和 mysql新手教程
SQL 也可以 Hello World
SQL 语句对大小写不敏感。SELECT 等效于 select 。
select "Hell World";
创建数据库 create database
create database 数据库名字
删除数据库 drop database
drop database 数据库名字
列出数据库
show databases
使用数据库 use
use 数据库名字
建表 CREATE TABLE
语法
CREATE TABLE 表名称
(
列名称1 数据类型 其它可选配置,
列名称2 数据类型 其它可选配置,
列名称3 数据类型 其它可选配置,
....
)
例子,创建一个学生信息表 student ,包括姓名 name ,生日 birthday ,身高 height
CREATE TABLE `student` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(16) NOT NULL DEFAULT '',
`birthday` date NOT NULL,
`height` int NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
下面对每个字段进行说明 :
字段 | 类型 | 是否可空 | 说明 |
---|---|---|---|
id | int unsigned | NOT NULL | id 为自增主键 AUTO_INCREMENT 类型,作为每条记录的唯一 id int 为正数类型,unsigned 表示无符号类型 即只表示正数范围;NOT NULL 表示这个字段不能为空 NULL,必须有值 |
name | varchar(16) | NOT NULL | 字符串类型,16个字符,默认为空字符串 ‘’ |
birthday | date | NOT NULL | 日期类型,出生日期 |
height | int | NOT NULL | 正数类型,比如 180 则表示 180cm 身高 |
KEY(id ) |
PRIMARY | 指定主键为 id 字段 | |
ENGINE | 存储引擎使用 InnoDB引擎 | ||
DEFAULT CHARSET | 指定字符集使用 utf8mb4 避免出现编码不兼容问题(默认类型可能兼容emoji 等特殊字符) |
id 自增主键 AUTO_INCREMENT 说明
每个表只可以设置一个自增主键,也可以不设置。一般来说为了确定表中记录的唯一性,都应该默认设置自增主键id
NOT NULL 说明
NOT NULL 为可选类型,不写则表示该字段值可以为空NULL
DEFAULT 默认值说明
DEFAULT 为可选表示给字段设置一个初始默认值。
列出库里的所有表
show tables
从中可以找到新建的 student 表
插入数据 INSERT INTO
语法
INSERT INTO 表名 (列1, 列2,...) VALUES (值1, 值2,....)
例子,在学生信息表 student 表中插入一条数据 姓名为 Jack,生日 1990-01-01 ,身高 180
INSERT INTO `student` (`name`, `birthday`, `height`)
VALUES ('Jack', '1990-01-01', 180);
查询数据 SELECT
语法
SELECT 列1,列2,... FROM 表名称
或 全部列 *
SELECT * FROM 表名称
例子
select * from student
或使用 `` 将表名和字段名标注起来,防止触发MySQL关键词。
select * from `student`
where 查询条件
查找 姓名 name 等于 Jack 的记录
select * from `student` where name='Jack'
结果:
id | name | birthday | height |
---|---|---|---|
1 | Jack | 1990-01-01 | 180 |
几种查询例子:
查找 身高大于等于 170 的记录
select * from `student` where height >=170
and 查询
查找 姓名 name 等于 Jack 且 身高大于等于 170 的记录
select * from `student` where name='Jack' and height >=170
or 查询
查找 姓名 name 等于 Jack 或 身高大于等于 170 的记录
select * from `student` where name='Jack' or height >=170
null 记录查询
查找 手机号 mobile 为空 的记录
select * from `student` where mobile is null
更新数据 UPDATE
语法
UPDATE 表名称 SET 某列名称 = 新值 WHERE 某列名称 = 某值
例子 ,更新 学生信息表 student 中 姓名为 Jack 的 生日为 1990-02-01
UPDATE student birthday='1990-02-01' where name='Jack'
删除数据 DELETE
语法
DELETE FROM 表名称 WHERE 列名称 = 值
例子,删除 学生信息表 student 中 姓名为 Jack 的记录。
DELETE FROM student WHERE where name='Jack'
例子2 ,删除 学生信息表 student 中 姓名为 Jack 且 生日为 1990-02-01 的记录。
DELETE FROM student WHERE where name='Jack' and birthday='1990-02-01'
例子3 ,如果不写 where 部分,则会删除表中的全部记录
DELETE FROM student
这时可以考虑使用 清空表的语句 TRUNCATE
清空表数据 TRUNCATE
例子,清空 student 表,但是不删除表结构
TRUNCATE student
表增加字段 ALTER TABLE ADD
语法
ALTER TABLE `表名字` ADD `新字段名` 字段类型 COMMENT '字段说明'
例子,在 学生信息表 student 中,新增一个字段 手机号 mobile ,类型为 varchar(16) 即16个字符。
ALTER TABLE `student` ADD `mobile` varchar(16) COMMENT '手机号'
表删除字段 ALTER TABLE DROP
语法
ALTER TABLE `表名字` DROP `字段名`
例子,删除 学生信息表 student 中 手机号 mobile 字段
ALTER TABLE `student` DROP `mobile`
索引优化
索引是为了提高SQL运行效率而提供的一种手段。当对某个字段设置索引优化后,一些情况下使用 where 查询该字段时可以非常快速的返回这些满足条件的记录。
比如在 学生信息表中有100条记录,我们现在要查询姓名为 Jack 的学生记录
select * from student where name='Jack'
理论上,我们需要扫描全部100条记录,依次比较 name 字段是否 Jack 。当我们给 name 字段设置索引后,通常仅需扫描几条记录就可以找到全部 name 为 Jack 的记录,极大的提高了SQL 的执行速度和效率。对于网站等服务是不是 卡 、慢 通常有非常明显的作用。
索引类型
分为 INDEX 普通索引,UNIQUE 唯一索引,PRIMARY KEY 主键索引。
主键索引只能设置一个,INDEX/UNIQUE 可以设置多个。
可以对一个字段设置索引,也可以多个字段设置 联合索引 。
创建索引 ALTER TABLE ADD INDEX
语法
ALTER TABLE 表名字 ADD INDEX 索引名字(表字段)
例子给 学生信息报 studet 表中的name 字段设置索引
ALTER TABLE student ADD INDEX index_name (name)
创建唯一索引 ALTER TABLE ADD UNIQUE
例子:因为手机号不应该有重复的,所以给学生信息 studet 表中的 mobile 字段设置唯一索引
ALTER TABLE student ADD UNIQUE mobile (mobile)
这里我们将索引名定为和字段名一样的 mobile ,可以根据需要设置,也可以不同。
删除索引 DROP INDEX
例子,删除 学生信息表中的mobile 索引
ALTER TABLE student DROP INDEX mobile;
注意无论是普通索引还是唯一索引都使用 DROP INDEX 来删除。
查看索引
show index from student;
就可以方便的查看表中索引情况,下面是对结果中一些字段的说明:
- Table 表的名称
- Non_unique 如果索引不能包括重复词,则为0。如果可以,则为1
- Key_name 索引的名称
- Seq_in_index 索引中的列序列号,从1开始
- Column_name 列名称
- Collation 列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)
- Null如果列含有NULL,则含有YES。如果没有,则该列含有NO
- Index_type 用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)
查看建表语句
show create table student
返回结果如下
CREATE TABLE `student` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(16) NOT NULL DEFAULT '',
`birthday` date NOT NULL,
`height` int NOT NULL,
`mobile` varchar(16) DEFAULT NULL COMMENT '手机号',
PRIMARY KEY (`id`),
UNIQUE KEY `mobile` (`mobile`),
KEY `index_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4
我们可以看到建表语句中已经包含了我们新增的唯一索引 UNIQUE KEY mobile
(mobile
) 和普通索引 KEY index_name
(name
)
查询SQL执行计划
当给表加完索引后,我们想知道查询是否变得更高效了,这时候我们可以使用 查询SQL执行计划的功能,即 SQL 语句前面加个 explain ,例子:
explain select * from student where name='Jack' ;
- possible_keys 为可能使用的索引名
- key 使用的索引名
- key_len 索引长度
- rows 扫描行数 这个是最重要的指标,该字段没设置索引时通常为全表记录数,如果设置了索引则会远小于全表记录数
查询、终止执行中的SQL
查询执行中的SQL任务
show processlist;
终止SQL ,其中id 为 上面结果中的 id
kill id
mysqldump MySQL导入导出数据
导出数据
整个库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名.sql
单个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名.sql
导出表结构
不导出数据只要表结构,加参数 -d 参数即可
整个库结构
mysqldump -d -u 用户名 -p 数据库名 > 导出的文件名.sql
单个表结构
mysqldump -d -u 用户名 -p 数据库名 表名> 导出的文件名.sql
导入数据
/tmp/backup.sql 为备份文件
mysql 命令导入
mysql -u用户名 -p密码 </tmp/backup.sql
source 命令导入
进入mysql命令行
mysql -u 用户名 -p
执行导入命令
use 数据库
source /tmp/backup.sql
本文 最佳观看地址:https://www.hashspace.cn/mysql-shujuku.html 阅读 3282