深入浅出MySQL数据库
树图思维导图提供 深入浅出MySQL数据库 在线思维导图免费制作,点击“编辑”按钮,可对 深入浅出MySQL数据库 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:4973c1019c6e392a02790e406f45b609
深入浅出MySQL数据库思维导图模板大纲
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库
常见数据库
Oracle
DB2
SQL Server
Postgre SQL
MySQL
相关术语
数据库系统(Database System):DBS
数据库(Database)
数据库管理系统(Database Management System):DBMS
应用开发工具
管理员及用户
SQL语言
Structured Query Language:结构化查询与颜
DDL
数据定义语言
DML
数据操作语言
DQL
数据查询语言
DCL
数据控制语言
配置文件
my.cnf是MySQL的配置文件
登陆/退出MySQL
登陆
mysql -uroot -p
mysql -uroot -proot
得到版本号
mysql -V
mysql --version
登陆的同时打开指定数据库
mysql -uroot -p -D db_name
退出
exit
quit
登陆信息中需要掌握的
命令行结束符默认使用;或者\g来结束
可以通过help或者\h或者?加上相关关键字来查看手册
\c可以取消当前命令的执行
SQL语句语法规范
常用MySQL的关键字我们需要大写,库名、表名、字段名称等使用小写
SQL语句支持折行操作,拆分的时候不能把完整单词拆开
数据库名称、表名称、字段名称不要使用MySQL的保留字,如果必须要使用,需要用反引号``将其括起来
常用SQL语句
SELECT USER()
得到登陆的用户
SELECT VERSION()
得到MySQL的版本信息
SELECT NOW()
得到当前的日期时间
SELECT DATABASE()
得到当前打开的数据库
创建数据库
CREATE {DATABASE|SCHEMA} db_name;
检测数据库名称是否存在,不存在则创建
CREATE DATABASE [IF NOT EXISTS] db_name;
在创建数据库的同时指定编码方式
CREATE DATABASE [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset;
注意
数据库名称最好有意义
名称不要包含特殊字符或者是MySQL关键字
查看当前服务器下全部数据库
SHOW DATABASES|SCHEMAS;
查看指定数据库的详细信息
SHOW CREATE DATABASE db_name;
修改指定数据库的编码方式
ALTER DATABASE db_name [DEFAULT] CHARACTER SET [=] charset;
打开指定数据库
USE db_name;
得到当前打开的数据库
SELECT DATABASE()|SCHEMA();
删除指定的数据库
DROP DATABASE db_name;
如果数据库存在则删除
DROP DATABASE [IF EXISTS] db_name;
数据表
是数据库最重要的组成部分之一,数据是保存在数据表中
数据表由行(row)和列(column)来组成
每个数据表中至少有一列,行可以有零行一行或者多行组成
表名要求唯一,不要包含特殊字符,最好含义明确
创建表
CREATE TABLE [IF NOT EXISTS] tbl_name( 字段名称 字段类型 [完整性约束条件], 字段名称 字段类型 [完整性约束条件], ... )ENGINE=存储引擎 CHARSET=编码方式;
UNSIGNED
无符号,没有负数,从0开始
ZEROFILL
零填充,当数据的显示长度不够的时候可以使用前补0的效果填充至指定长度,字段会自动添加UNSIGNED
NOT NULL
非空约束,也就是插入值的时候这个字段必须要给值,值不能为空
DEFAULT
默认值,如果插入记录的时候没有给字段赋值,则使用默认值
PRIMARY KEY
主键,标识记录的唯一性,值不能重复,一个表只能有一个主键,自动禁止为空
AUTO_INCREMENT
自动增长,只能用于数值列,而且配合索引使用,默认起始值从1开始,每次增长1
UNIQUE KEY
唯一性,一个表中可以有多个字段是唯一索引,同样的值不能重复,但是NULL值除外
FOREIGN KEY
外键约束
查看当前数据库下已有数据表
SHOW TABLES;
SHOW [FULL] TABLES [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]
查看指定数据表的详细信息
SHOW CREATE TABLE tbl_name;
查看表结构
DESC tbl_name;
DESCRIBE tbl_name;
SHOW COLUMNS FROM tbl_name;
删除指定的数据表
DROP TABLE [IF EXISTS] tbl_name;
表结构相关操作
添加字段
ALTER TABLE tbl_name ADD 字段名称 字段属性 [完整性约束条件] [FIRST|AFTER 字段名称]
删除字段
ALTER TABLE tbl_name DROP 字段名称
添加默认值
ALTER TABLE tbl_name ALTER 字段名称 SET DEFAULT 默认值;
删除默认值
ALTER TABLE tbl_name ALTER 字段名称 DROP DEFAULT
修改字段类型、字段属性
ALTER TABLE tbl_name MODIFY 字段名称 字段类型 [字段属性] [FIRST | AFTER 字段名称]
修改字段名称、字段类型、字段属性
ALTER TABLE tbl_name CHANGE 原字段名称 新字段名称 字段类型 字段属性 [FIRST | AFTER 字段名称]
添加主键
ALTER TABLE tbl_name ADD PRIMARY KEY(字段名称)
删除主键
ALTER TABLE tbl_name DROP PRIMARY KEY;
添加唯一
ALTER TABLE tbl_name ADD UNIQUE KEY|INDEX [index_name] (字段名称)
删除唯一
ALTER TABLE tbl_name DROP index_name;
修改数据表名称
ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name
RENAME TABLE tbl_name TO new_tbl_name;
修改AUTO_INCREMENT的值
ALTER TABLE tbl_name AUTO_INCREMENT=值
数值型
整数型
浮点型
字符串类型
CHAR效率高于VARCHAR,CHAR相当于拿空间换时间,VARCHAR拿时间换空间
CHAR默认存储数据的时候,后面会用空格填充到指定长度;而在检索的时候会去掉后面空格;VARCHAR在保存的时候不进行填充,尾部的空格会留下
TEXT列不能有默认值,检索的时候不存在大小写转换
日期时间类型
二进制类型
MyISAM存储引擎
默认MyISAM的表会在磁盘中产生3个文件
.frm
表结构文件
.MYD
数据文件
.MYI
索引文件
可以在创建的时候指定数据文件和索引文件的存储位置,只有MyISAM表支持
DATA DIRECORY [=] 数据保存的绝对路径
INDEX DIRECTORY [=] 索引文件保存的绝对路径
MyISAM单表最大支持的数据量2的64次方条记录
每个表最多可以建立64个索引
如果是复合索引,每个复合索引最多包含16个列,索引值最大长度是1000B
MyISAM引擎的存储格式
定长(FIXED 静态)
是指字段中不包含VARCHAR/TEXT/BLOB
动态(DYNAMIC)
只要字段中包含了VARCHAR/TEXT/BLOB
压缩(COMPRESSED)
myisampack创建
InnoDB存储引擎
设计遵循ACID模型,支持事务,具有从服务崩溃中恢复的能力,能够最大限度保护用户的数据
支持行级锁,可以提升多用户并发时的读写性能
支持外键,保证数据的一致性和完整性
InnoDB拥有自己独立的缓冲池,常用的数据和索引都在缓存中
对于INSERT、UPDATE、DELETE操作,InnoDB会使用一种change buffering的机制来自动优化,还可以提供一致性的读,并且还能够缓存变更的数据,减少磁盘I/O,提高性能
创建InnoDB表之后会产生两个文件
.frm表结构文件
.ibd,数据和索引存储表空间中
所有的表都需要创建主键,最好是配合上AUTO_INCREMENT,也可以放到经常查询的列作为主键
添加记录
INSERT [INTO] tbl_name[(col_name,...)] {VALUE|VALUES}(VALUES...);
不指定字段名称
INSERT tbl_name VALUE(value...)
需要按照建表时的字段顺序给每一个字段赋值
列出指定字段
INSERT tbl_name(字段名称,...) VALUES(值,...)
INSERT ... SET的形式
INSERT tbl_name SET 字段名称=值,...;
INSERT ... SELECT
INSERT tbl_name[(字段名称...)] SELECT 字段名称,... FROM tbl_name [WHERE 条件]
一次添加多条记录
INSERT tbl_name[(字段名称,...)] VALUES(值,...), (值,....), (值,...)
修改记录
UPDATE tbl_name SET 字段名称=值,字段名称=值 [WHERE 条件]
如果不添加条件,整个表中的记录都会被更新
删除记录
DELETE FROM tbl_name [WHERE 条件]
如果不添加条件,表中所有记录都会被删除
DELETE 清空数据表的时候不会重置AUTO_INCREMENT的值,可以通过ALTER 语句将其重置为1
彻底清空数据表
TRUNCATE [TABLE] tbl_name;
清除表中所有记录
会重置AUTO_INCREMENT的值
查询记录
SELECT select_expr,... FROM tbl_name [WHERE 条件] [GROUP BY {col_name|position} HAVING 二次筛选] [ORDER BY {col_name|position|expr} [ASC|DESC]] [LIMIT 限制结果集的显示条数]
查询表中所有记录
SELECT * FROM tbl_name;
*所有字段
指定字段的信息
SELECT 字段名称,... FROM tbl_name
库名.表名
SELECT 字段名称,... FROM db_name.tbl_name;
给字段起别名
SELECT 字段名称 [AS] 别名名称,... FROM db_name.tbl_name;
给数据表起别名
SELECT 字段名称 ,... FROM tbl_name [AS] 别名;
表名.字段名的
SELECT tbl_name.col_name,... FROM tbl_name;
WHERE 条件
会筛选出符合条件的记录
比较运算符
> >= < <= != <> <=>
<=> 和 =的区别
<=>可以检测NULL值
IS [NOT] NULL
检测值是否为NULL或者NOT NULL
指定范围
[NOT] BETWEEN ... AND
指定集合
[NOT] IN(值,...)
逻辑运算符
AND
逻辑与
OR
逻辑或
匹配字符
[NOT] LIKE
%
任意长度的字符串
_
任意一个字符
GROUP BY 分组
把值相同放到一个组中,最终查询出的结果只会显示组中一条记录
分组配合GROUP_CONCAT()查看组中某个字段的详细信息
配合聚合函数使用
COUNT()
统计记录总数
如果写的是COUNT(字段名称),字段中的值为NULL,不统计进来
写COUNT(*)会统计NULL值
SUM()
求和
MAX()
求最大值
MIN()
求最小值
AVG()
求平均值
配合WITH ROLLUP关键使用
会在记录末尾添加一条记录,是上面所有记录的总和
HAVING子句对分组结果进行二次筛选
ORDER BY 排序
ORDER BY 字段名称 ASC|DESC
LIMIT 限制结果集显示条数
LIMIT 值
显示结果集的前几条记录
LIMIT offset,row_count
从offset开始,显示几条记录,offset从0开始
多表查询
笛卡尔积的形式
内连接的形式
查询两个表中符合连接条件的记录
SELECT 字段名称,... FROM tbl_name1 INNER JOIN tbl_name2 ON 连接条件
外连接的形式
左外连接
SELECT 字段名称,... FROM tbl_name1 LEFT [OUTER] JOIN tbl_name2 ON 条件;
先显示左表中的全部记录,再去右表中查询复合条件的记录,不符合的以NULL代替
右外连接
SELECT 字段名称,... FROM tbl_name1 RIGHT [OUTER] JOIN tbl_name2 ON 条件;
先显示右表中的全部记录,再去左表中查询复合条件的记录,不符合的以NULL代替
外键约束
只有InnoDB存储引擎支持外键
创建外键
建表时指定外键
[CONSTRAINT 外键名称 ]FOREIGN KEY(字段名称) REFERENCES 主表(字段名称)
子表的外键字段和主表的主键字段类型要相似;如果是数值型要求一致,并且无符号也要一致;如果是字符型,要求类型一致,长度可以不同
如果外键字段没有创建索引,MySQL会自动帮我们添加索引
子表的外键关联的必须是父表的主键
外键约束的参照操作
CASCADE
从附表删除或更新,子表也跟着删除或者更新,级联的操作
SET NULL
从附表删除或者更新记录,并设置子表的外键列为NULL。
NO ACTION | RESTRICT
拒绝对父表做更新或者删除操作
动态添加外键
动态添加外键
ALTER TABLE tbl_name [CONSTRAINT 外键名称] ADD FOREIGN KEY(外键字段) REFERENCES 主表(主键字段);
动态添加外键之前表中的记录一定合法的记录,没有脏值,否则外键添加不成功
动态删除外键
ALTER TABLE tbl_name DROP FOREIGN KEY fk_name;
特殊形式的查询
子查询
SELECT 字段名称 FROM tbl_name WHERE col_name=(SELECT col_name FROM tbl_name)
内层语句查询的结果可以做为外层语句查询的条件
由IN引发的子查询
由比较运算符引出子查询
由EXISTS引发的子查询
ANY SOME ALL
INSERT ... SELECT
CREATE ... SELECT
CREATE TABLE tbl_name LIKE tbl_name;
联合查询
UNION
SELECT 字段名称,... FROM tbl_name1 UNION SELECT 字段名称... FROM tbl_name2;
UNION ALL
SELECT 字段名称,... FROM tbl_name1 UNION ALL SELECT 字段名称... FROM tbl_name2;
UNION ALL 是简单的合并,UNION会去掉表中重复记录
自身连接查询
无限级分类的实现形式
数学函数
CEIL()
进一取整
FLOOR()
舍掉小数部分
ROUND()
四舍五入
TRUNCATE()
截取小数点后几位
MOD()
取余数
ABS()
取绝对值
POWER()
幂运算
PI()
圆周率
RAND()或者RAND(X)
0~1之间的随机数
SIGN(X)
得到数字符号
EXP(X)
计算e的x次方
字符串函数
日期时间函数
其它常用函数
MySQL Workbench
查看上一步操作产生的警告信息
SHOW WARNINGS;
mysql中的注释
# 注释内容
-- 注释内容
树图思维导图提供 basehead 音效管理器 在线思维导图免费制作,点击“编辑”按钮,可对 basehead 音效管理器 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:dfc6463c14a954a5621f5338177e5aee
树图思维导图提供 系统架构师 在线思维导图免费制作,点击“编辑”按钮,可对 系统架构师 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:42d04526c628d286e9b17226d3facb72