一,MySQL概述
MySQL官网:
https://dev.mysql.com/download/mysql/
数据库的启动和停止方式:
启动:net start mysql80
停止:net stop mysql80
MySQL客户端连接
关系型数据库
DBMS:数据库管理系统
在一个是数据库服务器中可以创建多个数据库,在一个数据库中可以创建多张表
二,基础--SQL
SQL语句不区分大小写
通用语法
分类
DDL(数据定义)
数据库的操作
表结构的操作
数值类型
字符串类型
日期类型
表的修改操作
添加字段
修改数据类型
修改字段名和字段类型
删除字段
删除表
仅删除表的数据
DML(数据操作)
添加数据
修改数据
删除数据
DQL(数据查询)
基本查询
条件查询
聚合查询
注意:null不参与任何聚合函数的运算.
分组查询
代码例子:
排序查询
语法:
排序方式:
注意:多字段排序时,只有当第一个字段相同,才会根据第二个字段排序
分页查询
DQL语句的执行顺序
DCL(数据控制)
用户管理
权限控制
常用的权限:
1,查询目前有的权限:
2,授予目标用户权限:
3,撤销目标用户权限:
注意:
1,多个权限之间使用逗号分隔;
2,授权时,数据库名和表名可以使用 * 进行通配,代表所有。
三,基础--函数
字符串函数
书写格式:
数值函数
日期函数
以上函数默认是返回当前系统的日期和时间
as的作用是将为计算后的天数附上一个变量名;
流程控制函数
相关代码实现:
四,基础--约束
概述
约束的相关演示
相应代码:
外键约束
建立外界关联
外键的删除与更新行为
语法:(使用CASCADE时)
五,基础--多表查询
多表关系介绍
一对多:
多对多:
相应案例(学生表,课程表和中间表)
中间表的创建:
一对一:
相关代码:
多表查询概述
概述
想要消除笛卡尔积,可以运用以下代码:(用where来限定条件)
多表查询的分类:
内连接
隐式内连接
语法:
代码:
显式内连接
语法:
代码:
在显式查询中inner可以省略
外连接
左外连接
语法:
相关代码:
在这串代码中 outer 可以省略
右外连接
语法:
相关代码:
当然,只将两表的书写顺序调换也能实现左右外连接转换的效果,如以下代码:
其效果与上一条代码的效果相同。
自连接
语法
相关代码:
建议:将a和b看作是两张表
联合查询
相关代码:
注意:两次查询的查询字段必须一样。
错误示范如下:
查询字段不同会导致两次查询后的表的列数或字段类型不一样,无法合并。
另外,合并方式有union和union all两种,其中union会对合并数据去重,union all不会
子查询
标量子查询
上述代码可以写成:
例子2:
可以写成:
列子查询
例子:
in
all
and和some
行子查询
相关代码例子:
表子查询
相关代码:
六,基础--事务
事务简介
事务操作
示例:
如果这套程序中间出现错误或异常(如在2与3之间加上一段无法编译的代码然后运行),可能导致’张三‘扣钱而’李四‘不加钱的情况。
解决方法一:
为了避免这种情况,可以运行下面第二条代码将事物的提交方式改成手动提交。(若想改回自动提交则可以将autocommit的值改成1)
设置为手动提交后,执行任何DML语句时,都只会临时修改表中数据,不会上传到数据库中。
当程序运行成功时,我们运行commit,将数据提交到数据库,当程序运行报错时,我们运行rollback,将数据回滚。
解决方法二:
将开启事务的代码放在事务代码的头部,这样程序会默认提交方式为手动提交。
将开启事务代码和事务代码一起运行,如果报错则手动执行回滚代码,无则手动执行提交代码。
事务四大特性
并发事务问题
事务隔离级别
用于解决并发事务所引起的问题
从上到下,隔离级别逐渐升高,级别越高,数据保护能力越强,但性能越差。
查看和设置隔离级别:
注意:使用session时,设置结果只对当前客户端有效,使用global时,对所有客户端都有效。
相关代码: