问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

他们的优点和缺点分别是什么: 视图、索引、存储过程、触发器

发布网友 发布时间:2022-04-25 10:49

我来回答

4个回答

懂视网 时间:2022-04-08 11:15

1 、 Primary Key 约束

    SQLServer 中有五种约束, Primary Key 约束、 Foreign Key 约束、 Unique 约束、 Default 约束和 Check 约束.

    在表中常有一列或多列的组合,其值能唯一标识表中的每一行。

    这样的一列或多列成为表的主键(PrimaryKey)。一个表只能有一个主键,而且主键约束中的列不能为空值。只有主键列才能被作为其他表的外键所创建。

   创建主键约束可以右键单击表,选择设计 。

 技术分享

   选中要创建主键的列,然后单击上面的小钥匙。

 技术分享

    也可以右键需要创建主键的列,然后单击小钥匙。

 技术分享

2 、 Foreign Key 约束

    外键约束是用来加强两个表(主表和从表)的一列或多列数据之间的连接的。创建外键约束的顺序是先定义主表的主键,然后定义从表的外键。也就是说只有主表的主键才能被从表用来作为外键使用,被约束的从表中的列可以不是主键,主表限制了从表更新和插入的操作。

   右键单击需要设置外键的列(此时的表是作为从表在外键中出现),选择关系。

 技术分享

   接下来点击添加 --> 表和列规范。

 技术分享

   在主键表中选择主表和主表的主键列。

 技术分享

 

   设置完后保存即可。

 

3 、 Unique 约束

    唯一约束确保表中的一列数据没有相同的值。与主键约束类似,唯一约束也强制唯一性,但唯一约束用于非主键的一列或者多列的组合,且一个表可以定义多个唯一约束。

   右键单击要设置的列选择索引 / 键。

 技术分享

   然后单击添加按钮。

 技术分享

   选择需要设置的列,可以是一列也可以是多列的组合。

 技术分享

   关闭并保存设置。

4 、 Default 约束

    若在表中定义了默认值约束,用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列,如果我们不设置默认值,系统默认为 NULL 。

  以学生信息表为例,在表设计器中,为性别 sex 列填写默认值男。

 技术分享

5 、 Check 约束

    Check 约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围。在列中更新数据时,所要输入的内容必须满足 Check 约束的条件,否则将无法正确输入。

   以学生信息表中的 sex 为例,我们要限制 sex 列的值只能为男或女。

 技术分享

 技术分享

  技术分享

技术分享

 

关闭并保存设计。

 

6.选择出年月日

 select year(getdate()) //获取当前的年

select month(getdate()) //获取当前的月

select day(getdate()) //获取当前的天

 select * from employ where month(birthday)=8   // 打印出8月份过生日的员工的所有信息

 select * from employ where year(getdate())-year(birthday)>25// year(getdate())为当前年份,打印出年龄大于25岁的员工的所有信息

 select * from employ where year(birthday)=2008 and month(birthday)=8 and day(birthday)=12 //打印出生日为2008-8-12日的所有员工信息

 select dateadd(yy,100,getdate())//当天加上100年的时间,getdate()也可以换成具体的某一天比如写成:‘2108/12/31‘

select dateadd(mm,1,getdate())//当天加上1个月的时间

select dateadd(dd,100,getdate())//当天加上100天的时间 

select datediff(yy,getdate(),‘2108/12/31‘)//当天距离2108/12/31还有多少年

select datediff(mm,getdate(),‘2108/12/31‘)

select datediff(dd,getdate(),‘2108/12/31‘)

 

 7.isnull的用法

 select title,content,isnull(categoryID,0) from news  //为null的categoryID用0显示出来

 8.case用法

//查找categoryID=13的state,并对state进行判断

select state,case

when(state=1)then ‘待审‘

when(state=2)then ‘已审‘

end as pro_state

from category where categoryID=13

 

//查找出低级的多少个,中级的多少个,高级的多少个

select Count(*) as [Count] from category

group by

case

when categoryID<15 then ‘低级‘

when categoryID between 15 and 20 then ‘中级‘

else  ‘高级‘

end

 

//查出category 中的CategoryID,name以及判断每个categoryID 的大小

select CategoryID,name,

case

when categoryID<15 then ‘低级‘

when categoryID between 15 and 20 then ‘中级‘

else  ‘高级‘

end as categoryRange from category

 

9.Category与新表cr(select结果集作为新表),做左联接的应用。

Select c.*, IsNull(cr.Count,0) as [Count]

From Category c

Left Join

(

       select cr.CategoryID,Count(*) as [Count] from CategoryRelative cr

       right Join Entry e ON cr.ChildID = e.ID and e.state <> 2 and e.IsActive = 1

       where cr.blogid = 8785

       Group by cr.CategoryID

) cr ON c.CategoryID = cr.CategoryID

Where BlogID = 8785 and CategoryType = 1 

 

10.exists的用法 

//查出Category 表中categoryID不等于n.categoryID的c.categoryID,c.[name]

第一种查询语句:select c.categoryID,c.[name] from Category c  left join News n on c.categoryID=n.categoryID where n.categoryID is null  

第二种查询语句:select categoryID,[name] from category where not exists

(

   select * from News where category.categoryID=News.categoryID

)

 

*当News 表中categoryID无大量重复时第一种性能无疑是最好的,反之,第二种性能好。

 

11.SQL 语句转换格式函数Cast、Convert

  CAST和CONVERT都经常被使用。特别提取出来作为一篇文章,方便查找。

  CAST、CONVERT都可以执行数据类型转换。在大部分情况下,两者执行同样的功能,不同的是CONVERT还提供一些特别的日期格式转换,而CAST没有这个功能。

  既然CONVERT包括了CAST的所有功能,而且CONVERT还能进行日期转换,那么为什么需要使用CAST呢?实际上,这是为了ANSI/ISO兼容。CAST是ANSI兼容的,而CONVERT则不是。

  语法:

  CAST (expression AS data_type [ (length ) ]) 

  CONVERT (data_type [ ( length ) ] , expression [ , style ]) 

  示例:

  SELECT ‘AB‘ + 1    --此语句报错,在将 varchar 值 ‘AB‘ 转换成数据类型 int 时失败。

   SELECT ‘AB‘ + CAST(1 AS varchar)    --输出 AB1 

  SELECT ‘AB‘ + CONVERT(varchar,1)    --输出 AB1

  CAST和CONVERT都能转换时间:

  SELECT CONVERT(DateTime,‘2011-07-11‘)    --输出 2011-07-11 00:00:00.000

   SELECT CAST(‘2011-07-11‘ AS DateTime)    --输出 2011-07-11 00:00:00.000

  但是时间转字符串,CAST没有CONVERT这么多花样:

  SELECT CONVERT(varchar,GETDATE(),5)    --输出 01-07-13

  SELECT CONVERT(varchar,GETDATE(),111)  --输出 2013/07/01

  SELECT CONVERT(varchar,GETDATE(),1)    --输出 07/01/13

   SELECT CAST(GETDATE() AS varchar)    --输出 07 1 2013 9:56PM

  

12.索引:

http://www.cnblogs.com/AK2012/archive/2013/01/04/2844283.html

详细内容可以通过以上网页了解。

表的存储由两部分组成,一部分用来存放数据页面,另一部分存放索引页面。

索引的功能类似百科全书中的目录,使用索引是快速查找数据库中实际信息的一种方法。

索引分为:

聚集索引--------每一个表只能有一个聚集索引,它对应的表按照其索引进行物理排序,对于百科全书,聚集索引就类似于书的页码,按页码顺序保存着百科全书的信息。

非聚集索引-------每一个表可以有多个非聚集索引,对于百科群书,非聚集索引指的是百科全书后面的关键字目录。

  

13.视图

视图是一种虚拟表,它的使用基本和表的使用类似,主要目的是控制用户所要显示的数据。

创建一个视图:

Eg:

create view CurrentEmployees_vw

as

select categoryID,[name],age from Category

where state=1

 

 技术分享

操作方法:

1、右键添加新视图;

2、选择要查询的表格;

3、选择对应的关联字段;

4、保存即可生成视图,即相当于全联接的SQl语句。

 

14.存储过程

1)优点:在创建时进行编译,以后每次执行存储过程不需要再编译,而一般的SQL语句要每执行一次编译一次(所以一些复杂逻辑的SQL建议写在存储过程里面);存储过程过重复使用,可减少数据库开发人员的工作量(所以一些经常被调用到的SQL建议写在存储过程里面);安全性高,可设定只有某些用户才具有指定存储过程的使用权。

 

1)基本语法

Eg:

create proc procCategorySelect

(

  @name varchar(200),

  @age  int

)

as

select * from Category where [name]=@name and age=@age

1)  查看结果exec procCategorySelect ‘xudads‘,11

2)       更改/删除存储过程

ALTER proc      //修改存储过程

Drop proc      //删除存储过程

 

4)流控制语句

Eg:

create proc procNewsInsert

(

   @creatTime datetime             //设置一个CratTime的变量,执行时加入实参

)

as

if datediff(dd,@creatTime,getdate())>7  /*creatTime距离当天大于天*/

begin;

select * from News

end;

else

begin;

select top 3* from News

end;

 

执行:exec procNewsInsert ‘2009-05-10 11:36:43.810‘

 

结果:

 技术分享

 15. 触发器

触发器是一种特殊的存储过程,它是在数据在进行增、删、改的时候同时进行的操作,相当于一个事件。

新建一个触发器:

 技术分享

写的脚本:

Eg1:

create trigger trigCategoryDelete

   ON  Category

   after delete /* 有三种INSERT,DELETE,UPDATE*/

AS

begin

    select * from deleted /*在删除后同时查出删除后的内容*/

end

GO

 执行:

 技术分享

 Eg2:

create trigger trigCategoryDelete

   ON  Category

   instead of delete /* instead of,表示当执行删除的时候这个删除语句被begin下面的语句所代替*/

AS

begin

    declare @id int

select @id=id from deleted

delete news where caID=@id

delete category where id=@id

end

GO

 

执行:

delete from category where id=5 /*这样就可以删除category里面id=5的东东的同时删除news里面id=5的东东了 */

 

16.数据库备份与还原

一、SQL数据库的备份:

1、依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Server Management Studio → 数据库:Dsideal_school_db既是我们需要备份的学籍数据库

 技术分享

图(1)

2、选择要备份的数据库“Dsideal_school_db”,点击鼠标右键 → 任务 → 备份,如图(2):

技术分享 

图(2)

3、在打开的“备份数据库 —Dsideal_school_db”对话框中,先点击删除,然后点击“添加”,如图(3):

技术分享 

图(3)

4、在弹出的“选择备份目标”对话框中,如图(4)

 技术分享

图(4)

5、选择好备份的路径(如D盘的江西-学籍-数据库备份文件夹中),文件类型选择“所有文件”,“文件名”那个位置填写上您要备份的数据库的名字(最好在您备份的数据库的名字后面加上日期,以方便以后查找),之后连续点击“确定”按钮即可完成数据库的备份操作,如图(5):

 技术分享

图(5

二、SQL数据库的还原:

1、选择您要还原的数据库“Dsideal_school_db”,点击鼠标右键 → 任务 → 还原 → 数据库,如图(6):

 技术分享

图(6)

2、在出现的“还原数据库 — school_web_db”对话框中选择“源设备”,然后点击后面的“…”按钮,如图(7):

 技术分享

图(7)

3、在出现的“指定备份”对话框中,点击“添加”按钮,如图(8):

 技术分享

图(8)

4、找到数据库备份的路径,选择您所要还原的数据库“Dsideal_school_db”(注意:文件类型选择所有文件),然后连续“两次”点击“确定”按钮,如图(9):

 技术分享

图(9)

5、在出现的“还原数据库 — Dsideal_school_db”对话框中,勾选上“选择用户还原的备份集”下的数据库前的复选框,如图(10)

 技术分享

图(10)

6、然后选择“选项”,勾选上“覆盖现有数据库”,如图(11):

技术分享 

图(11)

三、还原数据库问题解决方案

技术分享 

在还原数据库“Dsideal_school_db”时,有时会遇见上图中的问题“因为数据库正在使用,所以无法获得对数据库的独占访问权”,此时我们可以按照以下步骤解决此问题

1、右键数据库“Dsideal_school_db”,然后选择“属性”,如下图

技术分享 

2、在出现的“数据库属性 — Dsideal_school_db ”对话框中,选择“选项”,在“其他选项”下的“状态”中找到“限制访问”。选择“SINGLE_USER”,点击“确定”按钮,如下图:

 技术分享

3、按照正常还原数据库的步骤,还原数据库。

sql2(约束、日期、isnull、case、exists、castconvert、索引、视图、存储过程、触发器、备份与还原)

标签:

热心网友 时间:2022-04-08 08:23

1、索引的优缺点
1)优点:可以大大提高系统的性能。它不仅可以加快数据检索的速度,还能在检索数据的过程中提高系统的性能,并且可以加速表与表之间的连接。
2)缺点:占用更多的磁盘空间,并且降低添加、删除和更新行的速度。虽然在大多数情况下,索引所带来的数据检索速度的优势远远超过了它的缺陷,但过多的索引不一定能提高数据库的性能。
2、视图优点
1)集中用户数据
2)简化用户操作
3)提高数据安全性
4)降低应用程序对底层表的依赖性
3、存储过程优点
1)提高执行效率:存储过程的执行速度比批处理的执行速度快。
2)增加系统编程能力:存储过程使用编程设计模块化。
3)减少网络通信量:在客户计算机上执行存储过程时,网络中传送的只是该执行语句,而不用传送组成该存储过程中的SQL语句,从而大大减少了网络流量。
4)保证系统安全:系统管理员通过对执行某一存储过程的权限进行*,从而能够实现对相应的数据访问权限的*,避免非授权用户对数据的访问,保证数据的安全。
4、触发器优点
1)强化约束:强制复杂业务的规则和要求,能实现比check语句更为复杂的约束。
2)跟踪变化:触发器可以侦测数据库内的操作,从而禁止数据库中未经许可的更新和变化。
3)级联运行:侦测数据库内的操作时,可自动地级联影响整个数据库的各项内容。
4)嵌套调用:触发器可以调用一个或多个存储过程。触发器最多可以嵌套32层。
缺点:性能较低。因为在运行触发器时,系统处理的大部分时间花费在参照其他表的处理上,这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中。

热心网友 时间:2022-04-08 09:41

视图:只是一种预先把语句编写好的一种快照,在使用中,真正执行的还是这个语句问题;
索引:主要是考虑到操作性能的优化
存储过程:是数据库的逻辑块处理
触发器:主要考虑连带性;
这4个种功能都不一样;没有什么好比较的

热心网友 时间:2022-04-08 11:16

哪有什么优缺点 这些事各自的功能,要看你如何应用到各个场合。

就好像你问,“羽绒服”,“衬衫” 有缺点是什么一样
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
梦见和同性发生关糸了 梦见和同性朋友发生亲密关系 学生党如何科学护肤? 学生党该怎么基础护肤? 有什么美容护肤的技巧适合学生党? 怎么@全部成员啊? 新洲摩尔城一楼小吃租金多少 武汉王家湾有哪些广场 你好 请问 晚上6点开始 学瑜伽 可以吗? 因为我想在下班时间去 锻炼锻 ... 电脑联网有哪些条件台式电脑无线上网需要具备哪些条件 存储过程是什么?它的特点是什么?为什么要用它?它有什么优缺点? 什么时候用存储过程?存储过程的优点及缺点 sql存储过程的优缺点? SQL存储过程的作用和优缺点 存储过程有什么优缺点 存储过程有什么优点 存储过程有什么优缺点?为什么要用存储过程 使用存储过程有哪些优点? 什么是存储过程?有什么优点? 凌渡行车记录仪出现问题,怎么办? 凌渡行车记录仪hs850c一直卡死在开机界面怎么办,复位键不管用,大神帮... 我的凌度行车记录仪,按那个键没有反应。不知道怎么了!有师傅给指点一下... 凌度行车记录仪出现时间,日期不准还识别不出内存卡,还死机是什么... 凌度行车记录仪怎么会自动关机 凌度行车记录仪开机10秒后自动关机 凌度行车记录仪在待机中老自动关机是怎么回事? 凌渡行车记录仪死机了怎么办? 凌度行车记录仪死机了怎么办 凌度记录仪不录像了,只有凌度两个字是怎么回事?熄火后这两个字还是在... 凌度行车记录仪hs850b开不了机怎么办? 存储程序的作用 及优缺点 什么时候要用存储过程,存储过程的优点 存储过程跟SQL语句比较,各有什么优点和缺点 CAD中的梁的虚线如何彻底改为实线? CAD怎么画虚线?如何在CAD中画虚线 打开CAD图后,发现梁呈现虚线的状态,是怎么回事?怎么恢复? java中如何判断一个字符串不是像“aaaaaa”、“88888”、“@@@”这样... java系统怎么做性能测试调优?是不是掌握了jvm就差不多了? Kotlin怎么判断一个文件是否存在? macd表示什么 股票MACD线是什么意思? macd代表什么 macd在股票中代表什么? 网线插座串联怎么接线 捕鱼假日的介绍 《捕鱼假日》怎么样召唤海怪? -5676网页游戏? QQ捕鱼假日游戏问题求客服改进. QQ游戏假日捕鱼里面的cdkey是什么东西? qq游戏捕鱼假日 签到怎么拿到CDKEY 在捕鱼假日游戏中如何在好友家使用面包虫钓鱼