Mysql查询,函数,事务

基本结构

select 字段 from 表名;

去重

select distinct 列名 from 表名; //列名内容去重

取别名

select 列名 as "别名" , [表名.]列名 别名 from 表名 别名; //取别名,后面的as和""可以省略

模糊查询

select * from subject where subjectName like "高等数学%";//模糊查询
select * from subject where subjectName like "%数学%";//不加%代表以数学开头
select * from subject where subjectName like "_数学%";//一个下划线代表一个字符

取列

select * from subject where gradeId in (1,4);//取值为1和4的列

关联查询join

select stu_name,score from result join student on stuNo=stu_id where stu_name="张三";

纵向拼接union

select stu_name,score,subjectName from result join student on stuNo=stu_id join subject on subNo=subjectNo where stu_name="张三";
select * from 表名 union select * from 表名;//两张表合并去重

自连接

select a.categoryName 父栏目名称,b.categoryName 子栏目名称 from category a join category b on a.categoryid=b.pid;//自连接

关联:

  • 内关联:join或inner join会展示两表关联上的所有数据

  • 外关联:

  1. 左连接:left join会展示左表所有数据,右表展示关联上的所有数据,
    未关联上的以null填充
  2. 右连接:right join与左连接相反
  3. 全连接:mysql5.8之后支持,full join相当于左连接 union all 右连接

union和union all的区别:

两个表的列相同的情况下,使用union all会把数据纵向拼接,使用union会在union all的基础上去重

函数

数学函数:

abs(a)绝对值,
sqrt(a)开方,
power(x,y)x的y次方,
floor(a)向下取整,
ceil(a)向上取整,
round(a)四舍五入,
truncate(a)截取

字符串函数:

trim(a)去空格,
substring(a,1,length)从1开始截取,
insert(a,x,y,b)替换,
concat(a…)拼接

日期函数:

now(),
year(),
month(),
date(),
unix_timestamp()日期转时间戳,
from_unixtime()时间戳转日期,
datediff(),
date_add(),
date_format()

系统信息函数:

version()

统计函数:

count(列名),
max(),
min(),
sum(),
avg()

加编号

select r.*,@num:=@num+1 from test.result r join (select @num:=0) a on 1=1;//加编号

事务:

set autocommit=0;//中间写入对应事务语句
start transaction;
语句
commit;
rollback;
set autocommit

索引失效的原因:

索引查询失效的几个情况:

  1. like 以%开头,索引无效;当like前缀没有%,后缀有%时,索引有效。

  2. or语句前后没有同时使用索引。当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效

  3. 组合索引,不是使用第一列索引,索引失效。

  4. 数据类型出现隐式转化。如varchar不加单引号的话可能会自动转换为int型,使索引无效,产生全表扫描。

  5. 在索引字段上使用not,<>,!=。不等于操作符是永远不会用到索引的, 因此对它的处理只会产生全表扫描。 优化方法:
    key<>0 改为 key>0 or key<0。

  6. 对索引字段进行计算操作、字段上使用函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值