阿里巴巴Mysql命名规范
表名和字段名必须使用小写和数字,禁止使用数字开头
禁止使用保留字
表必备三字段:id,gmt_create,gmt_modified
id必须是主键,为tinyint,unsigned无符号,且自增长1
gmt_create和gmt_modified均为DATETIME类型,gmt_create表示表创建时间,后者表示最新的更新时间。
库名和应用尽量一致
表的命名最好是遵循“业务名称_表的作用)
定义数据类型要尽量节省空间
数据类型
主要可以分为,整型,浮点型(小数),时间类型,字符集类型,文本型
修改表名
方式一: ALTER TABLE 表名 RENAME TO 新表名;
ALTER TABLE 旧表名 RENAME TO 新表名
方式二:修改多个表名:
语法:RENAME TABLE 旧表名1 TO 新表名1,旧表名2 TO 新表名2
函数
函数的概念:将常用的代码封装起来在需要时调用,依此提高了代码效率,又提高了可维护性。
函数主要分为内置函数和自定义函数。
子查询
子查询大致可以分为四类:
标量子查询 :即返回的是单个值
视图
视图概述
前提:视图建立在已有表的基础上,视图依赖的表称为基表
本质:可以把视图看作一个查询语句的别名,即存储起来的SELECT语句。且视图并不存储数据,因为视图是一种虚拟表,本身不具有数据,占用内存很少的内存空间。
注意:视图的创建和删除只影响视图本身,不影响对应基表。但是当对视图中的数据进行增加,删除和修改操作时,数据表的数据会随之改变!
使用场景:针对小型项目并不推荐视图!,即大型项目更加推荐视图!
优点:简化查询,控制访问权限!
创建视图
基本语法:
CREATE VIEM 视图名 AS 查询语句
CREATE VIEW view_scourse
AS
SELECT Cname
FROM Course;
利用视图查询
SELECT * FROM view_scourse;
事务简介
是一组操作的集合,事务会把所有的操作作为一个整体一起向系统(服务器端)提交或者撤销操作回滚请求,即这些操作要么同时成功,要么同时失败。(可以理解为多个SQL操作的绑定打包提交,其中的任意一条SQL语句出现了异常都会回滚事务)
默认Mysql的事务是自动提交的,也就是说,当执行DML语句,Mysql会立即隐士的开启事务
特别注意:如果不提交事务,那么操作只针对在客户端,服务器端并没有发生变化。
事务的操作
查看事务提交方式
# 查看事务提交方式
SELECT @@autocommit;
显示如果为‘1’那么为自动提交,显示为‘0’为手动提交
手动设置提交方式
# 设置事务为手动提交
SET @@autocommit =0;
开启事务
START TRANSACTION 或者 BEGIN;
手动提交事务
将客户端的SQL执行指令提交服务器端进行更改
commit
commit;
回滚事务
对客户端的数据修改SQL指令进行撤回
rollback
rollback;
事务的四大特性(ACID)
原子性(Atomicity)
事务是不可分割的最小操作单位,要么全部成功,要么全部失败
一致性(Consistency)
事务完成时,必须使所有数据都保持一致
隔离性(Isolation)
数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
持久性(Durability)
事务一旦提交或者回滚,它对数据库中的数据改变就是永久的
并发事务问题
通俗的理解概念:就是事务A和事务B同时在操作表A
经典三大问题:
脏读:一个事务读到另外一个事务还没有提交的数据。
不可重复读:一个事务先后读同一条记录,但读取的数据不同,称为不可重复读
幻读:一个事务按照查询条件查询数据时,没有对应的数据行,但是在插入数据时,发现数据已经存在,
事务的隔离级别
主要分为四种隔离级别
![](https://i-blog.csdnimg.cn/blog_migrate/19723aa11118910f0488562c0edf4c84.jpeg)
Read Uncommitted (未读,未提交)
该隔离级别可能会出现的并发事务问题:脏读,不可重复读,幻读。(性能高,安全性差)
该级别的隔离一般用的较少