学习完牛腩的新闻发布系统后台部分,与原先的机房收费系统相比,又学习到了很多的东西。
一:数据库
1.代码建立数据库
机房的时候一直是手动建立数据库,这次用代码建立数据库,感觉还是挺简答的。
-- 建立数据库
create database newssystem
-- 建立类别表
create table category
(
id int identity(1,1) primary key,
[name] varchar(20) not null
)
-- 建立新闻表
create table news
(
id int identity(1,1) primary key,
title varchar(100) not null,
[content] text not null,
createTime datetime not null,
caId int
)
-- 建立评论表
create table comment
(
id int identity(1,1) primary key
,[content] text not null,createTime datetime not null,userIp varchar(15) not null,newsId int)
这次才真正明白了主外键的作用。主键是唯一标识你这一行数据的字段,并且不能为空,外键是联系两个表之间关系的键,如果两个表中建立了外键的关系,那么就不能随便将其中一个表删除。
设置主键可以用primary key设置,外键可以用数据关系图来设置,很方便。
3.自增长
有的时候可以把主键设置为自增长,当然其他也可以,看你自己的需要,下面来说两种方法设置自增长。
idintidentity(1,1)primarykey其中黄色部分就是设置自增长的代码。
还可以手动设置。
当id自增长太多,如果想让自增长还原,就是重新从某个数开始增长,我们可以执行这个SQL语句 Dbcc Checkident ('dbo.category' ,Reseed,5),dbo.category是数据库名,5是下次添加行的时候从5开始自增长。
4.默认值或绑定
5.存储过程
这次存储过程用的也比较多,表与表之间连接用了好多,desc降序,asc升序。
-- =============================================
-- Author: NQQ
-- Create date: 2017-6-12
-- Description: 选择最新十条新闻
-- =============================================
ALTER PROCEDURE [dbo].[news_selectNewNews]
AS
BEGIN
select top 10 n.id,n.title,n.createtime,c.name from news n
inner join category c on n.caId =c.id
order by n.createTime desc
END
-- =============================================
-- Author: NQQ
-- Create date: 2017-08-07
-- Description: 取出10条热点新闻(评论回复最多的十条新闻)
-- =============================================
ALTER PROCEDURE [dbo].[news_selectHotNews]
AS
BEGIN
select top 10 n.id,n.title,n.createTime,c.name,count(com.id )as comCount from news n
inner join category c on n.caId =c.id
inner join comment com on com.newsId =n.id
group by n.id ,n.title ,n.createTime ,c.name
order by comCount desc
END
6.触发器
触发器是一个特殊的存储过程,它的执行不由程序调用,也不是手工启动,而是由事件来触发的,例如对一个表进行(insert、delete、update)时候就会激活它执行。触发器常用语加强数据的完整性约束和业务规范等。
新闻发布系统中删除新闻的类别,不仅仅要把这个类别删除,连同这个类下的新闻和新闻评论一并删除。如果只删除新闻类别的话,就会由于主外键的约束产生错误,所以可以在这里用到触发器。牛腩新闻发布系统(1)——浅入浅出SQL触发器