MySQL基础知识汇总

MySQL是一种 数据库操作软件

SQL(结构化查询语言):
1. DDL(数据定义语言) 用来定义数据库、表、列等信息
2. DML(数据操作语言) 用来 增删改 insert delete update 数据库中表的数据(也称为记录)
3. DQL(数据查询语言) 用来 查询 数据库中表的数据(满足一定条件) select where
4. DCL(数据控制语言) 用来 设置 数据库的访问权限和安全等级 GRANT REVOKE

DDL: 操作数据库、表
1.操作数据库(CRUD)
C:创建 create database if not exists 数据库名称 character set gbk/utf8; 创建数据库 先判断是否存在 并设置字符集
R:查询 show databases; 查询所有数据库
show create database 数据库名称; 查询某个数据库的创建语句
U:修改 alter database 数据库名称 character set utf8 修改数据库的字符集格式
D:删除 drop database 数据库名称
drop database if exists 数据库名称
使用数据库(也就是如果想要查询某个数据库中的表中的记录,必须先进入某个数据库中)
select database(); 查看当前正在使用的数据库
use 数据库名称; 使用某个数据库
2.操作数据库中的表( CRUD )
C:创建 create table student(
id int,
name varchar(32), // name表示名字,用变长字符进行存储 32表示最大字符个数
age int,
score double(4,1), // score表示成绩,最多4位,保留小数点后1位
birthday date, // date类型 yyyy-MM-dd
insert_time timestamp // timestamp类型 yyyy-MM-dd HH:mm:ss 精确到时分秒 默认为系统时间
);
复制表:
create table stu like student; // 创建一个字段结构和student一样的表
R:查询 show tables; 查询正在使用的数据库中存在的表
desc 表名; 查询某个表的结构 如 字段、数据类型、是否主键等
U:修改
修改表名 alter table 表名 rename to 新的表名
添加新的一列 alter table 表名 add 列名 数据类型
删除列 alter table 表名 drop 列名
D:删除 drop table if exists 表名

DML(增删改 数据/记录)
insert into 表名(字段1,…,字段n) values(值1,…,值n)
【注】 需要一一对应 字段个数、顺序、数据类型
delete from 表名 where 条件
【注】1. delete from 表名 删除表中所有数据(记录) 不推荐:速度慢,一条一条的执行delete
2. truncate table 表名 先执行drop table(删除表),再create table 创建一张一模一样的表 速度快
update 表名 set 字段1=值1,字段2=值2… where 条件

DQL(查询表中的数据(记录))
查询语句的语法:
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定

基础查询:
去重:distinct 是对select出来的满足条件的数据集做去重操作
ifnull(exp1,exp2): 如果exp1=null,则替换为exp2 ; exp1不为null,则原样输出【常用于四则运算中,某些字段值可能是null】
范围查询:between A and B => [A,B]
特定枚举查询: in(n1,n2,n3) => {n1,n2,n3}【满足这三种取值中的一种即可】
字段 = n1 or 字段 = n2 or 字段 = n3 【效果同上】
空值null的判断: 不能用 = !=
【只能用 字段 is null】【字段 is not null】
模糊查询:like
占位符:_ 表示 单个任意字符
% 表示 多个任意字符 [0,n]

排序查询:
多条件排序 order by 字段1 asc/desc , 字段2 asc/desc 【只有当字段1相等时,才启用字段2进行排序】
聚合函数:(计算完毕后,返回的都是 【单行单列的记录】)
将一列数据作为一个整体,进行纵向的计算【聚合函数的计算会排除null的值】
count: 如果遇到含有null的记录时,可以使用count(主键),或者count(ifnull(含null的列,0))
max:
min:
sum:
avg:

分组查询:
group by 字段
【注】1. 分组之后查询的字段,只能是分组字段、或者聚合函数,不能是其他字段 即 select 分组字段 … group by 分组字段
2. where 和 having 的区别
where 用于分组前的条件限定,不能进行聚合函数的判断
having 用于分组后的条件筛选,可以进行聚合函数的判断

分页查询:
limit 开始索引,每页查询的个数
开始索引 = (当前页码-1)*每页查询的个数

约束
对表中的数据进行约束,保证数据的正确性、有效性和完整性
分类:
主键约束 primary key 非空且唯一 综合了not null 和 unique两种约束
1. 一张表只能有一个字段为主键
2. 主键是表中记录的唯一标识
3. 删除主键:alter table 表名 drop primary key
添加主键:alter table 表名 modify 字段 primary key
非空约束 not null alter table 表名 modify 字段 非空约束
唯一约束 unique 【注】MySQL中,可以允许唯一约束的字段的值为多个null
删除:唯一约束也叫唯一索引 alter table 表名 drop index 字段名
添加:alter table 表名 modify 字段 unique
外键约束 foreign key 作用:使表和表之间产生约束关系,保证数据的正确性
使用方式:constraint 外键名称 foreign key (外键字段名称) references 主表(主表字段名称)
// 创建员工表
create table employee(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int, // 表示所属部门的id
constraint emp_dept_fk foreign key (dep_id) references department(id) // 外键约束
)

                // 创建部门表
                create table department(
                    id int primary key auto_increment,
                    dept_name varchar(20),
                    dept_location varchar(20)
                )

        【注】 创建时,如果有外键约束,应该先创建“部门表”,再创建“员工表”进行外键约束
级联操作:
    级联更新
    级联删除
    constraint emp_dept_fk foreign key (dep_id) references department(id) on update cascade on delete cascade

多表关系
1:1 学生姓名->学生学号
1:n 学生学号->学生所属班级
m: n 学生学号->学生选课编号

三大范式:1NF 2NF 3NF

多表查询:单行单列(=) 多行单列(in) 多行多列(设置子表)
多表连接:自然连接(,本质为笛卡尔积) 内连接(join on) 外连接(left/right join)

事务的四大特征
原子性 事务是不可分割的最小操作单元,要么全部成功,要么全部失败
一致性 事务操作前后,数据总量保持不变 例如 转账操作 前后金额总量保持不变
隔离性 多个事务之间,相互独立
持久性 当事务提交或者回滚后,数据库会持久化的保存数据(即写入磁盘)

事务的隔离级别
概念:多个事务并发操作同一个数据时,会引发一些问题,通过设置不同的隔离级别来解决这些问题
存在问题:
1. 脏读:一个事务,读取到另一个事务未提交的数据
2. 不可重复读(虚读):在同一个事务中,两次读取到的数据不一致
3. 幻读:一个事务操作数据库表中的所有记录,另一个事务添加了一条记录,则第一个事务查询不到自己的修改
隔离级别:
1. read uncommitted(读未提交)
产生的问题:脏读、不可重复读、幻读
2. read committed(读已提交)
产生的问题:不可重复读、幻读
3. repeatable read(可重复读)
产生的问题:幻读
4. serializable(串行化) 类似Java多线程里的Lock锁
可以解决所有问题
隔离级别越高,效率越低

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值