原生的mysql操作语句,从基础上讲,还是比较简单的,但是其实做一般的二次开发,能够手写大部分原生的mysql语句,已经足够进行使用了。一般用多了框架的,反而会觉得写原生mysql很不方便,实际上原生mysql有很多其天然的优势——如果调用框架,你需要熟悉框架的封装语法,而原生mysql可以在绝大部分的场合都可以直接用,一般框架都是支持原生mysql直接执行的,第二个方面原生的mysql可以节省一些框架的流程解析时间,第三个方面,原生的mysql可以让我们更加理解mysql的一些内部操作。这里总结一些常用的mysql原生语句:
SELECT 的常见用法:(一般大部分的命令都是select操作)
1.最常用的 select * from example where id>100 order by id Asc limit 10;
从例表里选取符合要求的进行顺序列表排序(基础版)
2.变种1:从列表里读取指定的字段 同时将指定字段转换成需要字段(用as)
Select aaaaaaa as a ,bbbbbbbbb as b ,count(*) as num from example as e where id>100 order by id Asc limit 10;
这样得到的结果集直接就是a b num 这种,不需要在php里面进行另外的赋值
3.变种2:从一个列表里找到符合另一个列表里对应列的值
Select e.aaaaaaa as a ,e.bbbbbbbbb as b from example as e join example1 on e.id=example1.id
(join分为left join join in right join三种方式,常见的left join已经可以应付大部分开发的场合)
4.变种3:分页读取。分页读取的原理一个是读取偏移量,另一个是读取每页的总数量
Select * from example where id>100 limit 100,10;
从符合要求的查询里后的第100个开始,读取10个记录 (第一个值是偏移开始位置,第二个值是读取的数据记录)
5.变种4:Having 的用法
Select sum(‘aaaaaa’),count(*),test from example having test>100 group by b;
当条件里有统计函数的时候,where是没有用的,只能用having
读取按照b作为组别分别对列aaaaaa的叠加统计还有总个数的统计 having的条件需要在select写出来
6.变种5:从一个mysql里面读取一些字段插入到另外一张表里(这个也是常用的操作,主要场景:从一个数据库把数据移动到另外一个数据库)
Insert into b(aa,bb,cc) select aa,bb,cc from example;
将样表里面的所有数据取出三个插入到b表里面
7.like 读取包含对应字段的 一般包括like的在text里面不适合多条件组合查询,否则查询效率会很低,这个用法还是比较简单的
Select * from example where aaaaaa like ‘%cets%’;
INSERT INTO
1.插入数据
Insert into example(aa) values(‘dede’);
UPDATE
Update example set aaaaaa=12 where bbb=’test’;
DELETE
Delete from example where bbb=’test’
后面的三个用法变化比较单一,也非常容易掌握。大体而言,在常用的二次开发里,可以手写这些基本的mysql语句,能应付大部分的场合,不过mysql里面还有些经典的函数和变量,也需要掌握。
1.时间戳相关 读取当前时间的时间戳
unix_timestamp(now())
应用场景:需要对储存了时间戳进行时间对比,的时候,需要用到该方法
2.按照条件随机读取一定的数据
SELECT * FROM phome_enewsdolog where 1=1 ORDER BY rand() LIMIT 10;
应用场景:需要随机显示投放的广告在前端的时候要用到
3.将随机数据填充到mysql里面,进行性能测试
FLOOR(RAND() * 10000) 随机生成1000以内的整数
Update examples SET aaa=FLOOR(RAND()*10000)
应用场景:需要随机生成一些随机价格数据