Mysql
2020-08-18 18:45:11 2 举报
AI智能生成
mysql超详细知识点
作者其他创作
大纲/内容
DQL
基础查询
语法
select 查询列表 from 表名;
起别名
AS
空格
去重
DISTINCT
条件查询
语法
select 查询列表 from 表名 where 筛选条件;
关键字where
运算符
条件运算符
> < = != <> >= <=
逻辑运算符
&& || !
and or not
and or not
模糊查询
like
between and
in
is null
between and
in
is null
分组查询
语法
select 查询列表
from 表
【where 筛选条件】
group by 分组的字段
【order by 排序的字段】;
from 表
【where 筛选条件】
group by 分组的字段
【order by 排序的字段】;
关键字 group by
筛选
分组前筛选where
分组后筛选having
排序查询
语法
select 查询列表
from 表名
【where 筛选条件】
order by 排序的字段或表达式;
from 表名
【where 筛选条件】
order by 排序的字段或表达式;
关键字order by
asc 升序,可以省略
desc 降序
特点
order by子句可以支持 单个字段、别名、表达式、函数、多个字段
order by子句在查询语句的最后面,除了limit子句
连接查询
语法(sql199)
select 查询列表
from 表1 别名 【连接类型】
inner/left outer/right outer/full join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】
from 表1 别名 【连接类型】
inner/left outer/right outer/full join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】
内连接
inner 可省略
查询交集部分
外连接
左外(★):left 【outer】
右外(★):right 【outer】
全外:full【outer】
右外(★):right 【outer】
全外:full【outer】
查询除交集外不匹配的部分
交叉连接
cross
含义
又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
注意
为避免笛卡尔乘积现象,必须添加有效的连接条件
按功能分类
内连接
等值连接
结果为多表的交集部分
n表连接,至少需要n-1个连接条件
非等值连接
子主题
自连接
外连接
左外连接
右外连接
全外连接
交叉连接
按年代分类
sql92标准
仅仅支持内连接
sql99标准【推荐】
支持内连接+外连接(左外和右外)+交叉连接
分页查询★
应用场景
当要显示的数据,一页显示不全,需要分页提交sql请求
语法
select 查询列表
from 表
【join type join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limit 【offset,】size;
from 表
【join type join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limit 【offset,】size;
offset要显示条目的起始索引(起始索引从0开始)
size 要显示的条目个数
特点
limit语句放在查询语句的最后
子查询
含义
出现在其他语句中的select语句,称为子查询或内查询
外部的查询语句,称为主查询或外查询
分类
按查询出现的位置
select后面
仅仅支持标量子查询
from后面
支持表子查询
where或having后面
标量子查询(单行)
列子查询 (多行)
行子查询(多列多行)
特点
标量子查询,一般搭配着单行操作符使用
> < >= <= = <>
> < >= <= = <>
列子查询,一般搭配着多行操作符使用
in、any/some、all
in、any/some、all
子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果
exists后面(相关子查询)
表子查询
按结果集的行列数不同
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有一行多列)
表子查询(结果集一般为多行多列)
联合查询
含义
union 联合 合并:将多条查询语句的结果合并成一个结果
语法
查询语句1
union
查询语句2
union
...
union
查询语句2
union
...
应用场景
要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时
特点
1、要求多条查询语句的查询列数是一致的!
2、要求多条查询语句的查询的每一列的类型和顺序最好一致
3、union关键字默认去重,如果使用union all 可以包含重复项
标识符
关键字
AUTO_INCREMENT
又称为自增长列
含义
可以不用手动的插入值,系统提供默认的序列值
特点
1、标识列必须和主键搭配吗?不一定,但要求是一个key
2、一个表可以有几个标识列?至多一个!
3、标识列的类型只能是数值型
4、标识列可以通过 SET auto_increment_increment=3;设置步长
TCL
事务
含义
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行
特性ACID
原子性:一个事务不可再分割,要么都执行要么都不执行
一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
隔离性:一个事务的执行不受其他事务的干扰
持久性:一个事务一旦提交,则会永久的改变数据库的数据.
步骤
开启事务
set autocommit=0;
start transaction;可选的
start transaction;可选的
编写事务中的sql语句(select insert update delete)
结束事务
commit;提交事务
rollback;回滚事务
rollback;回滚事务
savepoint
节点名;设置保存点
搭配rollback回滚使用
并发事务
多个事务同时操作同一个数据库的相同数据时发生
并发问题
脏读
不可重复读
幻读
通过隔离解决并发问题
隔离级别
read uncommitted
读未提交
read committed
读已提交
repeatable read
可重复读
serializable
串行化
视图
含义
虚拟表,和普通表一样使用
应用场景
多个地方需要用到同样的查询结果
查询语句较为复杂
创建视图
create view 视图名
as
查询语句;
as
查询语句;
修改视图
create or replace view 视图名
as
查询语句;
as
查询语句;
修改该视图,如果该试图不存在,则创建
alter view 视图名
as
查询语句;
as
查询语句;
删除视图
drop view 视图名,视图名,...;
查看视图
DESC 视图名;
常见函数
字符函数
length:获取字节个数(utf-8一个汉字代表3个字节,gbk为2个字节)
concat
substr
instr
trim
upper
lower
lpad
rpad
replace
数学函数
round
ceil
floor
truncate
mod
日期函数
now
curdate
curtime
year
month
monthname
day
hour
minute
second
str_to_date
date_format
其他函数
version
database
user
控制函数
if
case
分组函数
sum
avg
max
min
count
DML语言
数据操作语言
插入:insert
方式一:经典的插入
语法
insert into 表名(列名,...)
values(值1,...);
values(值1,...);
特点
插入的值的类型要与列的类型一致或兼容
不可以为null的列必须插入值。可以为null的列用null
列的顺序是否可以调换
列数和值的个数必须一致
可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致
方式二
语法
insert into 表名
set 列名=值,列名=值,...
set 列名=值,列名=值,...
修改:update
修改多表
sql92语法
sql92语法:
update 表1 别名,表2 别名
set 列=值,...
where 连接条件
and 筛选条件;
update 表1 别名,表2 别名
set 列=值,...
where 连接条件
and 筛选条件;
sql99语法
sql99语法:
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列=值,...
where 筛选条件;
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列=值,...
where 筛选条件;
修改单表
update 表名
set 列=新值,列=新值,...
where 筛选条件;
set 列=新值,列=新值,...
where 筛选条件;
删除:delete
单表删除
delete from 表名 where 筛选条件
多表删除
方式一delete
sql92语法
delete 表1的别名,表2的别名
from 表1 别名,表2 别名
where 连接条件
and 筛选条件;
from 表1 别名,表2 别名
where 连接条件
and 筛选条件;
sql99语法
delete 表1的别名,表2的别名
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件;
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件;
方式二truncate
truncate table 表名;
删除所有
区别
1、delete可以加where,而truncate不行
2、用delete删除,后续添加数据,自增长的列的值从断点开始
而truncate是从1开始
而truncate是从1开始
3、delete有返回值,truncate没有
4、delete可以回滚,truncate不行
DDL 数据定义语言
CREATE(新建)ALTER(修改) DROP(删除) RENAME(重命名) TRUNCATE(截断)
库的管理
库的创建
create database [if not exists]库名;
库的修改
ALTER DATABASE books CHARACTER SET gbk;
库的删除
DROP DATABASE IF EXISTS books;
表的管理
表的创建
create table 表名(
列名 列的类型【(长度) 约束】,
列名 列的类型【(长度) 约束】,)
列名 列的类型【(长度) 约束】,
列名 列的类型【(长度) 约束】,)
表的修改
alter table 表名 add|drop|modify|change column 列名 【列类型 约束】;
数据类型
数值型
字符型
日期型
约束
含义
一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
六大约束
NOT NULL
非空,用于保证该字段的值不能为空
学号,姓名
DEFAULT
默认,用于保证该字段有默认值
性别
PRIMARY KEY
主键,用于保证该字段的值具有唯一性,并且非空
学号
UNIQUE
唯一,用于保证该字段的值具有唯一性,可以为空
座位号
CHECK
检查约束【mysql中不支持】
年龄、性别
FOREIGN KEY
外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
在从表添加外键约束,用于引用主表中某列的值
添加约束的时机
创建表时
修改表时
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
ALTER TABLE stuinfo ADD PRIMARY KEY(id);
约束的添加分类
列级约束
六大约束语法上都支持,但外键约束没有效果
表级约束
除了非空、默认,其他的都支持
删除约束
修改表时删除约束
添加外键
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
收藏
收藏
0 条评论
下一页