Mysql basics

1. Affairs

Either perform all or none of the
ACID:

Insert picture description here


Some problems caused by isolation: Dirty read: One transaction reads the uncommitted data of another transaction. Non-repeatable read: Read a row of data in the table within one transaction. The results of multiple reads are different. Phantom read: refers to one Read within a transaction


operations:

//mysql默认开启事务
set autocommit=0  //关闭事务
set autocommit=1  //开启事务

手动处理事务:
start transaction   --标记一个事务的开始,从这之后的sql都在同一个事务内
insert ...
insert ...
commit  --提交,持久化      成功
rollback  --回滚:回到原来的样子   失败

模拟场景:  转账
create database shop character set utf8 collate utf8_general_ci   --创建数据库
use shop
create table `account`(
`id` int(3) not null auto_increment,
`name` varchar(30) not null,
`money` decimal(9,2) not null,
primary key (`id`)
)engine=innodb default charset=utf8;

insert into `account` (`name`,`money`) values ('A',2000),('B',1000)

--模拟转账 
set autocommit = 0;     --关闭自动提交
start transaction;      --开启一个事物
update `account` set money=money-500 where id=1;
update `account` set money=money+500 where id=2;
commit;     --提交事务  一旦提交,就被持久化 后面回滚就不会起作用
rollback;   --回滚
set autocommit=1;

Second, the index

Index is a data structure that helps Mysql to obtain data efficiently
Reference link:
https://blog.codinglabs.org/articles/theory-of-mysql-index.html
1. Classification

主键索引(primary key):
		唯一的标识,主键不可重复,只能有一个列作为主键
唯一索引(unique key):
		避免重复的列出现,唯一索引可以重复,多个列都可以标识位
常规索引(key/index):  默认不填
		默认的,可以用index,key关键字来设置
全文索引(fulltext)
		在特定数据库引擎下才支持  myisam
		快速定位数据
Insert picture description here


2. Index Principle

Insert picture description here
创建用户:
create user 用户名 identified by 密码;
修改当前用户密码:
set password = password(密码);
修改指定用户密码:
set password for 用户名=password(密码);
用户重命名:
rename user 原来名字 to 新的名字;
用户授权(所有权限)
grant all privileges on *.* to 用户;

查询指定用户权限:
show grant for 用户;

删除用户:
drop 用户名

Three, database backup

1. Directly copy the physical file
2. Export from the visualization tool
3. Use the command line to export mysqldump Use the command line

Insert picture description here

Fourth, standardize database design

1. Why do we need to design?
When the database is more complex, you need to design

糟糕的数据库设计:
		数据冗余,浪费空间
		数据库插入和删除都会麻烦、异常【屏蔽使用物理外键】
		程序的性能差
良好的数据库设计:
		节省内存空间
		保证数据库完整性
		方便开发系统
软件开发者关于数据库的设计
		分析需求:分析业务和需要处理的数据库的需求
		概要设计:设计关系图E-R图
设计数据库的步骤:  (个人博客)
		1、收集信息,分析需求
					用户表(用户登录注销,用户的个人信息,写博客,创建分类)
					分类表(文章的分类,谁创建的)
					文章表(文章的信息)
					评论表
					友链表(友链信息)
		2.标识实体(把需求落地到每个字段)
		3.标识实体之间的关系
					写博客:user-->blog
					创建分类:user--->category
					关注:user--->user
					友链:links
					评论:user-->user-->blog

2. Three paradigms
Why do we need data standardization?
Duplicate information, update exception, insert exception, delete exception
Three paradigms

第一范式:
		原子性:保证每一列不可再分
第二范式:
		在第一范式基础上,每张表只描述一件信息
第三范式
		在第二范式基础上,确保数据表中每一列数据都和主键直接相关,而不能间接相关				
Insert picture description here