总结(深入浅出mysql数据库)

深入浅出MySQL数据库
1.1.什么是数据库?
1.1.数据库(Database)是按照数据结构来组织、存储和管理数据的仓库
1.2.常见数据库
1.2.1.Oracle
1.2.2.DB2
1.2.3.SQL Server
1.2.4.Postgre SQL
1.2.5.MySQL
1.3.相关术语
1.3.1.数据库系统(Database System):DBS
数据库(Database)
数据库管理系统(Database Management System):DBMS
应用开发工具
管理员及用户
1.3.2.SQL语言
Structured Query Language:结构化查询与颜
• DDL
• 数据定义语言
• DML
• 数据操作语言
• DQL
• 数据查询语言
• DCL
• 数据控制语言
2.2.MySQL相关操作
2.1.配置文件
2.1.1.my.cnf是MySQL的配置文件
2.2.登陆/退出MySQL
2.2.1.登陆
mysql -uroot -p
mysql -uroot -proot
mysql -hlocalhost -uroot -p -P3306
登陆的同时修改密令提示符
• mysql -uroot -p –prompt=命令提示符
• \h
• 主机
• \u
• 当前登陆的用户
• \d
• 当前打开的数据库
• \D
• 当前服务器的日期时间
得到版本号
• mysql -V
• mysql –version
登陆的同时打开指定数据库
• mysql -uroot -p -D db_name
2.2.2.退出
exit
quit
\q
ctrl+c
2.2.3.登陆信息中需要掌握的
命令行结束符默认使用;或者\g来结束
可以通过help或者\h或者?加上相关关键字来查看手册
\c可以取消当前命令的执行
2.3.SQL语句语法规范
2.3.1.常用MySQL的关键字我们需要大写,库名、表名、字段名称等使用小写
2.3.2.SQL语句支持折行操作,拆分的时候不能把完整单词拆开
2.3.3.数据库名称、表名称、字段名称不要使用MySQL的保留字,如果必须要使用,需要用反引号“将其括起来
2.4.常用SQL语句
2.4.1.SELECT USER()
得到登陆的用户
2.4.2.SELECT VERSION()
得到MySQL的版本信息
2.4.3.SELECT NOW()
得到当前的日期时间
2.4.4.SELECT DATABASE()
得到当前打开的数据库
3.3.数据库相关操作
3.1.创建数据库
3.1.1.CREATE {DATABASE|SCHEMA} db_name;
3.1.2.检测数据库名称是否存在,不存在则创建
CREATE DATABASE [IF NOT EXISTS] db_name;
3.1.3.在创建数据库的同时指定编码方式
CREATE DATABASE [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset;
3.1.4.注意
数据库名称最好有意义
名称不要包含特殊字符或者是MySQL关键字
3.2.查看当前服务器下全部数据库
3.2.1.SHOW DATABASES|SCHEMAS;
3.3.查看指定数据库的详细信息
3.3.1.SHOW CREATE DATABASE db_name;
3.4.修改指定数据库的编码方式
3.4.1.ALTER DATABASE db_name [DEFAULT] CHARACTER SET [=] charset;
3.5.打开指定数据库
3.5.1.USE db_name;
3.6.得到当前打开的数据库
3.6.1.SELECT DATABASE()|SCHEMA();
3.7.删除指定的数据库
3.7.1.DROP DATABASE db_name;
3.7.2.如果数据库存在则删除
DROP DATABASE [IF EXISTS] db_name;
4.4.数据表相关操作
4.1.数据表
4.1.1.是数据库最重要的组成部分之一,数据是保存在数据表中
4.1.2.数据表由行(row)和列(column)来组成
4.1.3.每个数据表中至少有一列,行可以有零行一行或者多行组成
4.1.4.表名要求唯一,不要包含特殊字符,最好含义明确
4.2.创建表
4.2.1.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
• 外键约束
4.3.查看当前数据库下已有数据表
4.3.1.SHOW TABLES;
4.3.2.SHOW [FULL] TABLES [{FROM | IN} db_name]
[LIKE ‘pattern’ | WHERE expr]
4.4.查看指定数据表的详细信息
4.4.1.SHOW CREATE TABLE tbl_name;
4.5.查看表结构
4.5.1.DESC tbl_name;
4.5.2.DESCRIBE tbl_name;
4.5.3.SHOW COLUMNS FROM tbl_name;
4.6.删除指定的数据表
4.6.1.DROP TABLE [IF EXISTS] tbl_name;
4.7.表结构相关操作
4.7.1.添加字段
ALTER TABLE tbl_name
ADD 字段名称 字段属性 [完整性约束条件] [FIRST|AFTER 字段名称]
4.7.2.删除字段
ALTER TABLE tbl_name
DROP 字段名称
4.7.3.添加默认值
ALTER TABLE tbl_name
ALTER 字段名称 SET DEFAULT 默认值;
4.7.4.删除默认值
ALTER TABLE tbl_name
ALTER 字段名称 DROP DEFAULT
4.7.5.修改字段类型、字段属性
ALTER TABLE tbl_name
MODIFY 字段名称 字段类型 [字段属性] [FIRST | AFTER 字段名称]
4.7.6.修改字段名称、字段类型、字段属性
ALTER TABLE tbl_name
CHANGE 原字段名称 新字段名称 字段类型 字段属性 [FIRST | AFTER 字段名称]
4.7.7.添加主键
ALTER TABLE tbl_name
ADD PRIMARY KEY(字段名称)
4.7.8.删除主键
ALTER TABLE tbl_name
DROP PRIMARY KEY;
4.7.9.添加唯一
ALTER TABLE tbl_name
ADD UNIQUE KEY|INDEX [index_name] (字段名称)
4.7.10.删除唯一
ALTER TABLE tbl_name
DROP index_name;
4.7.11.修改数据表名称
ALTER TABLE tbl_name
RENAME [TO|AS] new_tbl_name
RENAME TABLE tbl_name TO new_tbl_name;
4.7.12.修改AUTO_INCREMENT的值
ALTER TABLE tbl_name AUTO_INCREMENT=值
5.5.MySQL中的数据类型
5.1.数值型
5.1.1.整数型

5.1.2.浮点型

5.2.字符串类型
5.2.1.

5.2.2.CHAR效率高于VARCHAR,CHAR相当于拿空间换时间,VARCHAR拿时间换空间
5.2.3.CHAR默认存储数据的时候,后面会用空格填充到指定长度;而在检索的时候会去掉后面空格;VARCHAR在保存的时候不进行填充,尾部的空格会留下
5.2.4.TEXT列不能有默认值,检索的时候不存在大小写转换
5.3.日期时间类型
5.3.1.

5.4.二进制类型
6.6.MySQL存储引擎
6.1.MySQL架构图
6.1.1.

6.1.2.MySQL是由SQL接口、解析器、优化器、缓存和存储引擎组成。
Connectors
• 指的是不同语言与SQL的交互接口
Management Serivices & Utillities
• 系统管理和工具
Connection Pool
• 连接池,管理缓冲用户连接,线程处理等需要缓存的需求
SQL Interface
• 接收用户的SQL指令,并且返回需要查询的结果。
Parser
• 解析器。
Optimizer
• 查询优化器
• 选取-投影-联接
• SELECT id,username FROM user WHERE age>10;
Caches & Buffers
• 查询缓存
Engine
• 存储引擎
6.2.MySQL存储引擎
6.2.1.存储引擎就是指表的类型,存取和处理数据的方式。
6.2.2.查看当前支持的存储引擎
SHOW ENGINES;
• ENGINE
• 存储引擎名称
• SUPPORT
• 是否支持此存储引擎
• COMMENT
• 存储引擎的注释
• TRANSACTIONS
• 是否支持事务
• XA
• 是否支持分布式交易处理的XA规范
• SAVEPOINTS
• 是否支持保存点,以便事务回滚刀保存点
6.2.3.查看默认的存储引擎
SHOW VARIABLES LIKES ‘storage_engine’;
6.2.4.存储引擎分类
MEMORY存储引擎
• 数据保存在内存中,读写效率高
• 磁盘中产生一个以表明为名称.frm文件,只保存表结构
• 如果关闭MySQL服务,此时数据会产生丢失
• max_heap_table_size默认16MB
CSV存储引擎
• CSV存储引擎字段不支持NULL,所有的的列必须设置成NOT NULL
• CSV存储引擎不支持索引,也不支持分区
• .csv结尾的文件是保存数据的文件
• .csm结尾的文件是元信息文件,保存表的状态及存储的数据量
ARCHIVE存储引擎
• 适合对于不经常访问又删除不了的数据做归档存储
• .frm文件结构文件,.arz数据文件
• 插入效率很高,而且占用空间小
• ARCHIVE存储引擎只支持INSERT和SELECT 操作,不支持UPDATE/DELETE/REPLACE操作
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模型,支持事务,具有从服务崩溃中恢复的能力,能够最大限度保护用户的数据
• 原子性(Atomiocity)
• 一致性(Consistency)
• 隔离性(Isolation)
• 持久性(Durability)
• 支持行级锁,可以提升多用户并发时的读写性能
• 支持外键,保证数据的一致性和完整性
• InnoDB拥有自己独立的缓冲池,常用的数据和索引都在缓存中
• 对于INSERT、UPDATE、DELETE操作,InnoDB会使用一种change buffering的机制来自动优化,还可以提供一致性的读,并且还能够缓存变更的数据,减少磁盘I/O,提高性能

• Storage Limits
• 存储能力,64TB
• MVCC
• MVCC是一种多版本并发控制机制
• B-Tree indexes
• 支持B-Tree索引
• Full-text search indexes
• 支持
• backup/point-in-time recovery
• 备份/时间点恢复,支持
• Geospatial data type support
• 支持地理数据
• 创建InnoDB表之后会产生两个文件
• .frm表结构文件
• .ibd,数据和索引存储表空间中
• 所有的表都需要创建主键,最好是配合上AUTO_INCREMENT,也可以放到经常查询的列作为主键
7.7.MySQL数据操作
7.1.添加记录
7.1.1.INSERT [INTO] tbl_name[(col_name,…)] {VALUE|VALUES}(VALUES…);
7.1.2.不指定字段名称
INSERT tbl_name VALUE(value…)
需要按照建表时的字段顺序给每一个字段赋值
7.1.3.列出指定字段
INSERT tbl_name(字段名称,…) VALUES(值,…)
7.1.4.INSERT … SET的形式
INSERT tbl_name SET 字段名称=值,…;
7.1.5.INSERT … SELECT
INSERT tbl_name[(字段名称…)] SELECT 字段名称,… FROM tbl_name [WHERE 条件]
7.1.6.一次添加多条记录
INSERT tbl_name[(字段名称,…)] VALUES(值,…),
(值,….),
(值,…)
7.2.修改记录
7.2.1.UPDATE tbl_name SET 字段名称=值,字段名称=值 [WHERE 条件]
7.2.2.如果不添加条件,整个表中的记录都会被更新
7.3.删除记录
7.3.1.DELETE FROM tbl_name [WHERE 条件]
7.3.2.如果不添加条件,表中所有记录都会被删除
7.3.3.DELETE 清空数据表的时候不会重置AUTO_INCREMENT的值,可以通过ALTER 语句将其重置为1
7.3.4.彻底清空数据表
TRUNCATE [TABLE] tbl_name;
• 清除表中所有记录
• 会重置AUTO_INCREMENT的值
7.4.查询记录
7.4.1.SELECT select_expr,… FROM tbl_name
[WHERE 条件]
[GROUP BY {col_name|position} HAVING 二次筛选]
[ORDER BY {col_name|position|expr} [ASC|DESC]]
[LIMIT 限制结果集的显示条数]
7.4.2.查询表中所有记录
SELECT * FROM tbl_name;
• *所有字段
7.4.3.指定字段的信息
SELECT 字段名称,… FROM tbl_name
7.4.4.库名.表名
SELECT 字段名称,… FROM db_name.tbl_name;
7.4.5.给字段起别名
SELECT 字段名称 [AS] 别名名称,… FROM db_name.tbl_name;
7.4.6.给数据表起别名
SELECT 字段名称 ,… FROM tbl_name [AS] 别名;
7.4.7.表名.字段名的
SELECT tbl_name.col_name,… FROM tbl_name;
7.4.8.WHERE 条件
会筛选出符合条件的记录
• 比较运算符
• > >= < <= != <> <=>
• <=> 和 =的区别
• <=>可以检测NULL值
• IS [NOT] NULL
• 检测值是否为NULL或者NOT NULL
• 指定范围
• [NOT] BETWEEN … AND
• 指定集合
• [NOT] IN(值,…)
• 逻辑运算符
• AND
• 逻辑与
• OR
• 逻辑或
• 匹配字符
• [NOT] LIKE
• %
• 任意长度的字符串
• _
• 任意一个字符
7.4.9.GROUP BY 分组
把值相同放到一个组中,最终查询出的结果只会显示组中一条记录
分组配合GROUP_CONCAT()查看组中某个字段的详细信息
配合聚合函数使用
• COUNT()
• 统计记录总数
• 如果写的是COUNT(字段名称),字段中的值为NULL,不统计进来
• 写COUNT(*)会统计NULL值
• SUM()
• 求和
• MAX()
• 求最大值
• MIN()
• 求最小值
• AVG()
• 求平均值
配合WITH ROLLUP关键使用
• 会在记录末尾添加一条记录,是上面所有记录的总和
HAVING子句对分组结果进行二次筛选
7.4.10.ORDER BY 排序
ORDER BY 字段名称 ASC|DESC
7.4.11.LIMIT 限制结果集显示条数
LIMIT 值
• 显示结果集的前几条记录
LIMIT offset,row_count
• 从offset开始,显示几条记录,offset从0开始
7.5.多表查询
7.5.1.笛卡尔积的形式
7.5.2.内连接的形式
查询两个表中符合连接条件的记录
SELECT 字段名称,… FROM tbl_name1
INNER JOIN tbl_name2
ON 连接条件
7.5.3.外连接的形式
左外连接
• SELECT 字段名称,… FROM tbl_name1
LEFT [OUTER] JOIN tbl_name2
ON 条件;
• 先显示左表中的全部记录,再去右表中查询复合条件的记录,不符合的以NULL代替
右外连接
• SELECT 字段名称,… FROM tbl_name1
RIGHT [OUTER] JOIN tbl_name2
ON 条件;
• 先显示右表中的全部记录,再去左表中查询复合条件的记录,不符合的以NULL代替
7.6.外键约束
7.6.1.只有InnoDB存储引擎支持外键
7.6.2.创建外键
建表时指定外键
• [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;
7.7.特殊形式的查询
7.7.1.子查询
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;
7.7.2.联合查询
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会去掉表中重复记录
7.7.3.自身连接查询
无限级分类的实现形式
7.7.4.正则表达式查询
正则表达式的模式字符
• ^
• 匹配字符串开始的部分
• $
• 匹配字符串结束部分
• .
• 代表一个任意字符
• [字符集合]
• [abc] [a-z] [0-9]
• [^字符集合]
• 除了集合中的内容
• s1|s2|s3
• 匹配s1或者s2或者s3
• *
• 代表匹配前面的字符0次1次或者多次
• +
• 代表匹配前面的字符至少出现1次
• 字符{n}
• 前面的字符正好出现n次
• 字符{m,n}
• 前面的字符至少出现m次,最多出现n次
REGEXP ‘匹配方式’
• SELECT 字段名称,… FROM tbl_name WHERE 字段名称 REGEXP ‘匹配模式’
8.8.MYSQL常用函数
8.1.数学函数
8.1.1.CEIL()
进一取整
8.1.2.FLOOR()
舍掉小数部分
8.1.3.ROUND()
四舍五入
8.1.4.TRUNCATE()
截取小数点后几位
8.1.5.MOD()
取余数
8.1.6.ABS()
取绝对值
8.1.7.POWER()
幂运算
8.1.8.PI()
圆周率
8.1.9.RAND()或者RAND(X)
0~1之间的随机数
8.1.10.SIGN(X)
得到数字符号
8.1.11.EXP(X)
计算e的x次方
8.2.字符串函数
8.3.日期时间函数
8.4.其它常用函数
9.9.图形化工具管理数据库
9.1.BS
9.1.1.phpmyadmin
9.2.CS
9.2.1.Sequel Pro
9.2.2.windows
SQLyog
navit for mysql
mysql front
mysql workbench
10.常用SQL语句
10.1.查看上一步操作产生的警告信息
10.1.1.SHOW WARNINGS;
10.2.mysql中的注释
10.2.1.# 注释内容
10.2.2.– 注释内容
10.3.CHECK TABLE tbl_name
10.3.1.检测表
10.4.REPAIR TABLE tbl_name
10.4.1.修复表
11.分支主题 11
11.1.子主题 1
11.1.1.子主题 1

你可能感兴趣的:(数据库)