mysql
查询关键字的使用顺序
1.查询中用到的关键词主要包含六个,并且他们的顺序依次为 select–from–where–group by–having–order by
其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序 与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行
from:需要从哪个数据表检索数据
where:过滤表中数据的条件
group by:如何将上面过滤出的数据分组
having:对上面已经分组的数据进行过滤的条件
select:查看结果集中的哪个列,或列的计算结果
*order by 😗按照什么样的顺序来查看返回的数据
触发器
触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的。
它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。
1.创建table1,table2 表:
create table table1(name char(30),age int)charset="utf8";
create table table2(name char(30),age int)charset="utf8";
2.创建触发器:
DELIMITER ||
create trigger tb2_auto_add after insert on table1
for each row
begin
insert into table2(name,age)value("老旧",33);
end
DELIMITER ;
insert into table1(name,age)value("老刘",23);
视图
简化复杂的sql操作
CREATE TABLE #Products (
ProductID INT PRIMARY KEY,
ProductName varchar
);
全局临时表(表明带有二个##)
CREATE TABLE ##Products (
ProductID INT PRIMARY KEY,
ProductName varchar
);
从临时表插入和查询数据
INSERT #Products (ProductID, ProductName, ProductDescription)
VALUES (1, 'The temporary time leap', 'A novel about temporary time leaping.');
通配符
%通配符使用:
匹配以"yves"开头的记录:(包括记录"yves") SELECT *FROM products WHERE products.prod_name like ‘yves%’;
匹配包含"yves"的记录(包括记录"yves") * SELECT FROM products WHERE products.prod_name like ‘%yves%’;
匹配以"yves"结尾的记录(包括记录"yves",不包括记录"yves ",也就是yves后面有空格的记录,这里需要注意) SELECT * FROM products WHERE products.prod_name like ‘%yves’;
*通配符使用:
匹配结果为: 像"yyves"这样记录 SELECT FROM products WHERE products.prod_name like ‘_yves’;
匹配结果为: 像"yvesHe"这样的记录.(一个下划线只能匹配一个字符,不能多也不能少) SELECT FROM products WHERE products.prod*name like ‘yves**’;
sql优化
1、添加索引
2、in代替or,或者between代替in
3、禁用select *
4、where 判断null(对null判断会扫描全表)
5、where后面添加表达式
6、inner join 代替左右连接
7、禁用%开头的模糊查询
8、避免锁
没有索引进行变更时会有表锁,有索引是进行变更会有行锁
innodb引擎使用update时,会有行锁/表锁两种模式, 如果where 字段没有索引的时候会升级成表锁
update table set xx=1 where name=xx (name没有索引,此时是表锁)
update table set xx=1 where id=xx (id有索引,此时是行锁)
索引
单列索引
以表的单个字段创建的索引
联合索引
以表的多个字段创建的索引
普通索引
非主键非唯一性的索引
主键索引
唯一索引
索引失效
1、模糊查询
2、大于小于不等于
3.函数
4、模糊查询(以%开头的like)
5、not in ,not exist
5,or
6、is not null
连接类型
内连接
只获取连接匹配的值
左连接
返回左表的全部数据和右边相等的数据
右连接
返回全部的右表数据和左表相等的数据
mysql的sql语句的执行流程
1、客户端发送一条查询给服务器
2、查询缓存,如果没有缓存就进入下一阶段
3、服务端进行sql解析,预处理,再由优化器生成对应的执行计划
4、mysql根据优化器生成的执行计划,调用引擎的Api来执行查询
5、数据返回
mysql的事务特性
原子性 一致性 隔离性 持久性
事务的并发问题
脏独
读取到未提交的数据或操作
幻读
A,B同时在修改一条数据的事务里面,A将数据1改为二并提交显示数据为2,同时B将2改为了1,并结果显示为1,等A返回发现结果为1,这是A就出现了幻读
不可重复读
A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果因此本事务先后两次读到的数据结果会不一致
事务的隔离级别
mysql的事务的传播行为
1、需要事务
没有事务就创建一个事务,有事务就加入该事务
2.支持事务
有事务就按照事务走,没有就按照非事务走
3、创建事务
无论是否有事务都创建事务
4、不支持事务进行
有事务就挂起,非事务就执行
5、非事务
有事务就抛出异常
vchar和char的区别
char 是定长 vchar是可变的
char定长不够时会使用空格进行代替存储 ,空间换取效率
mysql的读写锁
锁的本质就是为Id打上标记
表锁和行锁
行锁分为共享锁和排它锁
max最大值
min最小值
avg 平均值
sum 总数
random 随机数 : select random() as random; 函数返回一个介于-9223372036854775808 和 +9223372036854775807 之间的伪随机整数。
abs 绝对值
upper 把该字段内容进行全部大写
length 返回内容字符串的长度 SELECT name, length(name) FROM COMPANY
floor(x):取小于等于x的最大整数, 向下取整函数 ceiling(x):取大于等于x的最小整数,向上取整函数
浙公网安备 33010602011771号