常规
增:INSERT INTO 表名 SET (b,...)VALUES(@B,...)
删:DELETE FROM 表 WHERE...
改:Update 表 SET b=@B WHERE...
查:Select 信息 FROM 表 WHERE...
温故知新
MYSQL语句分页——limit
Select * from table limit m,n
//m 记录开始index 从0开始 表示第一条记录
//n 表示取出几条 从m+1条开始
另外一种函数帮助分页:row_number()over()...用start 和end 参数打辅助
Select row_number()over(order by id desc)as name,* from 表名A
//查出按照降序把id排列(从表A里面) 行序号从0开始列名是name 所有信息
select *from 上面查到的信息 where name between @star and @end
//上面的表的结果中,想要的start 和end 序号之间的内容
综合一下:
with tempt as
(select ROW_NUMBER() over(order by id desc)as row,*from news )
select * from tempt where row between @start and @end
存储过程
内连接:两个表如下,要取出这个教育类下的所有新闻,要对把表进行内连接:
category表 | |
id | name |
7 | 教育 |
news表 | ||||
id | title | content | createTime | caId |
21 | 1 | 11 | 2019/1/15 | 7 |
22 | 2 | 22 | 2019/1/16 | 7 |
23 | 3 | 33 | 2019/1/17 | 7 |
24 | 4 | 44 | 2019/1/18 | 7 |
inner join | 按照caId取出新闻 | ||||
id | title | content | crteateTime | caId | name |
21 | 1 | 11 | 2019/1/15 | 7 | 教育 |
22 | 2 | 22 | 2019/1/16 | 7 | 教育 |
23 | 3 | 33 | 2019/1/17 | 7 | 教育 |
24 | 4 | 44 | 2019/1/18 | 7 | 教育 |
-- =============================================
-- Author: 牛腩
-- Create date: 2019年1月4日
-- Description: 根据类别ID取出该类别下的所有新闻
-- =============================================
ALTER PROCEDURE [dbo].[news_SelectByCaId]
@caid int
AS
BEGIN
--根据类别ID取出该类别下的所有新闻
select n.id ,n.title,n.crteateTime, n.content,c.[name] ,n.caId from news n
--内连接 表名c on n外键=c主键 and 类别id=选择的类别id
inner join category c on n.caId=c.id and caId=@caid
--按照时间降序排序
order by n.crteateTime desc
END
三表联查:
内连接,并条件判断
SELECT
*
FROM
tn_phonefic p
INNER JOIN tn_user_record ur ON ( NOT p.id = ur.phonefic_id )
INNER JOIN tn_user_set us ON ur.user_id = us.user_id
WHERE
ur.user_id = 1
AND p.id != ur.phonefic_id
AND ur.type = 2
ORDER BY
IF( us.is_random =1, RAND( ) ,p.id )
LIMIT 3
判断表的字段不为空
Where
....
AND (b.word_picture1 is not null or b.word_picture1 <>'' )
AND (b.word_picture5 is not null or b.word_picture5 <>'' )
AND (b.audio is not null or b.audio <>'' )
...
//具体如下,两个表联查
SELECT
DISTINCT a.user_id,a.word_id,a.word,a.phonefic_id,a.phonefic,a.type,a.status,
b.audio,
b.word_picture1,
b.word_picture5
FROM
`tn_user_record` AS a,
tn_word AS b
WHERE
a.word_id = b.id
AND (b.word_picture1 is not null or b.word_picture1 <>'' )
AND (b.word_picture5 is not null or b.word_picture5 <>'' )
AND (b.audio is not null or b.audio <>'' )
AND a.user_id = '26GnCMN2FwSmn1c7bZmXWe'
AND a.`status` = 0
AND a.is_delete = 0
AND a.type = 1
order by word_id;
小知识点:
create 和alter
在创建存储过程的时候是create,如果需要修改,在修改之后把它改为alter,就可以找到你修改后的存储过程了。
exec news_SelectByCaId
exec 存储过程名字:表示执行当前存储过程语句,排查存储过程建立过程中的错误
触发器:
需要用到临时表存储
create trigger[trigCategory]
on category
for DELETE
as
begin
--定义一个临时变量
declare @caId int
---在临时表deleted中找到要删除的id
select @caId = id from deleted
--删除这个ID类别下的所有评论
delete comment where newsId in(select news.Id from news where caId =@caId )
---删除这个ID类别下的所有新闻
delete news where caId =@caId
---删除这个ID类别
delete category where id =@caId
end
小毛驴意识到基础知识的重要性,特意提醒我的主人认真学习,不断更新
其实昨天在分享会上提到的分页limit在我们的数据库自考书上就有,我们早就接触过,只是不记得了,所以要不断颗粒归仓。