MySQL数据库总结
1 操作数据库语言分类
DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等
DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert,delete, update等
DQL(Data Query Language) 数据查询语言
DQL语言并不是属于MYSQL官方的分类,但是对数据库的操作最多就是查询,所以我们的程序员把查询语句的语句称作为DQL语言
DCL(Data Control Language)数据控制语言
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE等
TCL(Transaction Control Language) 事务控制语言
用于控制数据库的事务操作,关键字; COMMIT,SAVEPOINT,ROLLBACK等
2 DDL(Data Definition Language)数据定义语言
2.1 DDL操作库
2.1.1 建库语句:
CREATE DATABASE 数据库名;
直接新建数据库
CREATE DATABASE IF NOT EXISTS 数据库名;
如果该数据库不存在,则新建该数据库
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
新建指定字符集的数据库
2.1.2 查看数据库
SHOW DATABASES;
查看所有数据库
SHOW CREATE DATABASE 数据库名;
查看某个数据库的定义信息
2.1.3 修改数据库
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
修改数据库字符集格式
2.1.4 删除数据库
DROP DATABASE 数据库名;
删除数据库
2.1.5 使用数据库
SELECT DATABASE();
查看正在使用的数据库
USE 数据库名;
使用该数据库
2.1.6 数据库备份
数据库的备份
mysqldump -u用户名 -p密码 数据库 > 文件的路径
数据库的还原
SOURCE 导入文件的路径;
2.2 DDL操作表
2.2.1 创建表语句
CREATE TABLE 表名 (字段1 字段类型1,字段2 字段类型2.。。。。。) 新建表(无任何约束)
新建表(包含约束)
CREATE TABLE 新表名 LIKE 旧表名; 新建一个和旧表结构完全相同的表
2.2.2 查看表
SHOW TABLES;
查看当前数据库中国的所包含的表
DESC 表名;
查看表结构(字段名称,字段类型,约束)
SHOW CREATE TABLE 表名;
查看建表语句
2.2.3 删除表
DROP TABLES 表名;
删除表
DROP TABLES IF EXISTS 表名;
如果表存在,则删除表
2.2.4 修改表结构
ALTER TABLE 表名 ADD 列名 类型;
给该表添加新的一列
ALTER TABLE 表名 MODIFY 列名 新的类型
修改列类型
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
修改列名及属性
ALTER TABLE 表名 DROP 列名;
删除列
2.2.5 修改表名
RENAME TABLE 表名 TO 新表名;
修改表名
2.2.6 修改字符集
ALTER TABLE 表名 CHARACTER SET 字符集;
修改表的字符集
2.3 数据库的约束
2.3.1 PRIMARY KEY : 主键
用来唯一标识一条记录,一个表有且只有一个主键。一个主键可以只有一个字段,也可以由多个字段组成(联合主键)
哪个字段应该作为表的主键? 通常不用业务字段作为主键,单独给每张表设计一个id的字段,把id作为主键。
主键特点:非空,唯一,可自增,
创建主键方式:
1在创建表的时候给字段添加主键
字段名 字段类型 PRIMARY KEY[AUTO_INCREMENT ]
2在已有表中添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(字段名) [AUTO_INCREMENT ];
删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;
2.3.2 UNIQUE : 唯一
在这张表中这个字段的值不能重复。
唯一约束的基本格式
字段名 字段类型 UNIQUE
2.3.3 NOT NULL : 非空
这个字段必须设置值,不能是NULL
字段名 字段类型 NOT NULL
2.3.4 DEFAULT : 默认
往表中添加数据时,如果不指定这个字段的数据,就使用默认值
默认值格式
字段名 字段类型 DEFAULT 默认值
2.3.5 FOREIGN KEY : 外键
一张表中的某个字段引用另一个表的主键
主表: 约束别人
副表/从表: 使用别人的数据,被别人约束
创建外键
1 新建表时增加外键:
[CONSTRAINT][外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
关键字解释:
CONSTRAINT – 约束关键字
CONSTRAINT 外键约束名称:建议不能缺少,否则没法删除该外键
FOREIGN KEY(外键字段名) –- 某个字段作为外键
REFERENCES – 主表名(主键字段名) 表示参照主表中的某个字段
2 已有表增加外键:
ALTER TABLE 从表 ADD [CONSTRAINT][外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);
删除外键
ALTER TABLE 从表 drop foreign key 外键名称;
3 DML(Data Manipulation Language)语句
3.1 插入记录
INSERT INTO 表名(字段名1,字段名2...) VALUES(值1,值2...);
对应字段插入值(可以不全写)
INSERT INTO 表名 VALUES(值1,值2...值n);
插入所有字段(ps:插入的值要与表中字段顺序相对应)
补充:
show variables like 'character%';
查看数据库内部字符编码
set names 字符集;
修改本次操作数据库的编码(退出重进后不在生效)
INSERT INTO 表1 SELECT * FROM 表2;
将后面查询语句所得到的数据复制到当前表中(注意,查询的结果要与当前表结构相同)
3.2 更新表记录
UPDATE 表名 SET 字段名=值;
修改该字段的所有值为当前值
UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
只修改特定行的该字段的值
3.3 删除表记录
DELETE FROM 表名;
删除当前表中的所有数据(一条一条删除)
DELETE FROM 表名 WHERE 字段名=值;
只删除符合 条件的表记录
TRUNCATE TABLE 表名;
删除当前表中所有记录(将整个表摧毁,重新创建一个新的表)
4 DQL(Data Query Language) 数据查询语言
4.1 简单查询(单表查询)
4.1.1 查询表所有数据(无别名)
SELECT * FROM 表名;
查询表中的所有数据(单表);
SELECT 字段名1,字段名2.... FROM 表名;
查询给定字段的数据
SELECT 字段名1 AS 别名,字段名2 AS 别名.... FROM 表名;
查询给定字段的数据,并将结果按别名的形式展示出来;
SELECT DISTINCT 字段名1,字段名2...FROM 表名;
查询给定的字段的数据,并去除重复的数据
SELECT 字段名1+固定值(或其他字段名)FROM 表名;
查询结果参与计算,并返回结果
SELECT 字段名1, 字段名2 + IFNULL(字段名3,默认值) 联合字段别名 FROM 表名;
使用别名+默认值处理符合字段问题
4.1.2 条件查询 WHERE
SELECT 字段名 FROM 表名 WHERE 条件;
4.1.2.1 比较运算符
:>大于 < 小于 <= 小于等于 >= 大于等于 = 等于 <> 、 != 不等于
4.1.2.2 逻辑运算符:
and(&&) 多个条件同时满足 or(||) 多个条件其中一个满足 not(!) 不满足
4.1.2.3范围:
BETWEEN 值1 AND 值2
表示从值1到值2范围,包头又包尾
4.1.2.4 LIKE 表示模糊查询
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
满足 通配符字符串 规则的数据就会显示出来
所谓的 通配符字符串 就是 含有通配符的字符串 MySQL通配符有两个:
% : 表示0个或多个字符(任意个字符)
_ : 表示一个字符;
4.1.3 排序查询 ORDER BY
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名1 ASC|DESC 字段名2 ASC|DESC......;
将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序。ASC: 升序, 默认是升序 DESC: 降序。可以使用多个字段进行逐级排序。
4.1.4 聚合函数查询
聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。另外聚合函数会忽略空值。
五个聚合函数:
count : 统计指定列记录数,记录为NULL的不统计
sum : 计算指定列的数值和,如果不是数值类型,那么计算结果为0
max : 计算指定列的最大值
min : 计算指定列的最小值
avg : 计算指定列的平均值,如果不是数值类型,那么计算结果为0。
聚合函数的使用:写在 SQL语句 SELECT 后 字段名 的地方
SELECT COUNT(age) FROM 表名;
4.1.5 分组查询 GROUP BY
分组查询是指使用 GROUP BY 语句对查询信息进行分组, 相同数据作为一组
SELECT 字段1,字段2... FROM 表名 GROUP B 1c603 Y 分组字段 [HAVING 条件];
GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。分组的目的就是为了统计,一般分组会跟聚合函数一起使用。
分组后聚合函数的作用?不是操作所有数据,而是操作一组数据。
注意事项:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的.
对于分组后的条件需要使用 having 子句
having与where的区别
having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
having后面可以使用聚合函数
where后面不可以使用聚合函数
4.1.6 分页查询 LIMIT
LIMIT 是 限制 的意思,所以 LIMIT 的作用就是限制查询记录的条数
SELECT *|字段列表 [as 别名] FROM 表名 [WHERE子句] [GROUP BY子句] [HAVING子句] [ORDER BY子句] [LIMIT子句];
LIMIT语法格式
LIMIT offset,length; LIMIT length;
offset 是指偏移量,可以认为是跳过的记录数量,默认为0。 length 是指需要显示的总记录数
4.2 多表查询
4.2.1 多表之间的关系
一对一(有方向)
一对多(有方向)
多对多(无方向)
4.2.2 数据库建表规则(范式)
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式
(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在
第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需
满足第三范式(3NF)就行了
第一范式:表字段为原子性,即每一列不可以再分。
第二范式:不允许组合主键中的一部分属性可以决定表中的部分属性。(表不可再分)
第三范式:要求一个关系中不包含已在其它关系已包含的非主关键字信息。(包含的主键即为外键)(非外键不可重复)
4.2.3 查询(!!!!!!)
同时查询多张表获取到需要的数据。
多表查询时左表的每条数据和右表的每条数据组合,这种效果成为笛卡尔积
笛卡尔积大部分数据为无用数据,此时需要通过条件过滤掉没用的数据。
4.2.3.1 内连接
用左边表的记录去匹配右边表的记录,如果符合条件的则显示
隐式内连接
隐式内连接:看不到 JOIN 关键字,条件使用 WHERE 指定
SELECT 字段名 FROM 左表, 右表 WHERE 条件;
显示内连接
显示内连接:使用 INNER JOIN … ON 语句, 可以省略 INNER ,条件用ON指定
SELECT 字段名 FROM 左表 INNER JOIN 右表 ON 条件;
4.2.3.2 外连接
左外连接:使用 LEFT OUTER JOIN … ON , OUTER 可以省略
SELECT 字段名 FROM 左表 LEFT OUTER JOIN 右表 ON 条件;
用左边表的记录去匹配右边表的记录,如果符合条件的则显示;否则,显示NULL 可以理解为:在内连接的基础上保证左表的数据全部显示
右外连接:使用 RIGHT OUTER JOIN … ON , OUTER 可以省略
SELECT 字段名 FROM 左表 RIGHT OUTER JOIN 右表 ON 条件;
用右边表的记录去匹配左边表的记录,如果符合条件的则显示;否则,显示NULL 可以理解为:在内连接的基础上保证右表的数据全部显示
4.2.3.3 子查询
一条SELECT语句结果作为另一条SELECT语法一部分(作为查询条件或查询结果或表)
SELECT 查询字段 FROM 表 WHERE 查询条件();
子查询需要放在()中
子查询有三种结果:一个值 一列多行 多列多行
子查询的结果是一个值
子查询结果只要是单列 ,肯定在 WHERE 后面作为 条件
SELECT 查询字段 FROM 表 WHERE 字段=(子查询);
子查询结果是单列
子查询结果只要是单列,肯定在 WHERE 后面作为 条件子查询结果是单例多行,结果集类似于一个数组,父查询
使用 IN 运算符
SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);
子查询结果是 多列
子查询结果只要是 多列 ,肯定在 FROM 后面作为 表 SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件; 子查询作为表需要取别名,否则这张表没用名称无法访问表中的字段
5 事务
理解:具有相关联系的,对数据库的一系列操作,而且部分操作会对数据库数据造成影响。
5.1 事务的四大特性(ACID):
原子性(Atomicity):事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency):事务前后数据的完整性必须保持一致
隔离性(Isolation):是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个
并发事务之间数据要相互隔离,不能相互影响。
持久性(Durability):指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发
生故障也不应该对其有任何影响。
5.2 事务的隔离级别:
级别 名字 隔离级别 脏读 不可重复读 幻读 数据库默认隔离级别
1 读未提交 read uncommitted 是 是 是
2 读已提交 read committed 否 是 是 Oracle和SQL Server
3 可重复读 repeatable read 否 否 是 MySQL
4 串行化 serializable 否 否 否
名词解释:
脏读 :
一个事务读取到了另一个事务中尚未提交的数据
不可重复读:
一个事务中两次读取的数据内容不一致,要求的是一个事务中多次读取时数据是一致的,这是事务update时
引发的问题
幻读
一个事务中两次读取的数据的数量不一致,要求在一个事务多次读取的数据的数量是一致的,这是insert或
delete时引发的问题。
- mysql数据库知识点总结
- MySQL数据库设计总结
- 查看mysql数据库版本方法总结
- 关于MySQL数据库乱码的问题总结
- MySQL数据库设置远程访问权限方法总结
- nodejs remote链接mysql数据库总结
- 关于中的“回车”在后台,mysql数据库,html和中的显示问题总结...
- MySQL数据库简介以及初步操作总结
- MySQL数据库InnoDB数据恢复工具使用总结
- 【数据库】【SQL语句汇总】*MySQL数据库,总结补充!!!#数据库SQL语句汇总#(二)-2018.11.26- #黑马#
- MySQL数据库的高可用方案总结
- MySQL数据库优化总结
- python总结18 MySQL数据库
- MySql数据库总结
- MySQL数据库优化总结
- MySQL数据库基础回顾与总结(二)
- MySQL数据库设计总结[转载]
- Jdk环境配置以及mysql数据库安装配置环境总结
- MySQL数据库常用操作总结:
- MySQL数据库设置远程访问权限方法总结