今天继续由杰龙标软技术总监讲解Sql Server数据库:
数据的完整性与约束:
用“宁可错杀一百,也不放过一个”和“一粒老鼠屎,坏了一锅粥的例子”来说明保持数据完整性的目的。就是宁可不让数据进去,也要保持进去的数据的正确性。
其中数据的不完整性又包括:
(1) 实体信息(行)导致的不完整。通过定义主键的方式来解决。
(2) 域(列)信息导致的不完整,例如输错了生日的情况,可以用表达式和Check约束等方式来解决。
(3) 表间引用的不完整性(很重要)。可以通过定义外键等方式解决。
(4) 业务规则的不完整性。可以通过程序,脚本和触发器等方式解决。
什么是约束?约束就是保证数据完整性的方式。
约束分为表级约束和列级约束。
实体完整性:
(1) 主键约束 (2)标识列 (3)唯一索引
域完整性:
(1) 指定相应的数据与宽度 (2)非空约束 (3)默认值 (4)Check约束
引用完整性:(表设计中用到的最多)
(1) 引用约束(外键约束)
一个表中的列要引用别人的列(这个列叫外键,别人的列叫主键),外键所在的表叫外键表,主键所在的表叫主键表。
一个例子:某公司招了一名员工,但是尚未给其安排部门,但是现在想将其先加入员工数据库中,如何解决?可设计员工的部门id允许为空。若要将一个现有的部门解散,但是又解雇员工,而又要在数据库中显示出最新的调整,如何解决?可以对删除外键的操作做设置,删除部门id,即主键表中的列,可将外键表中相应的列做几种处理:设置为null,设置为默认值,无操作,层叠(删除所有的记录),级联(删除相应的记录)。update和insert语句也有相应的操作。
SQL Server服务器端的设置:
1. 确认验证是混合验证模式(属性——安全性)
2. 创建帐号,安全性——登陆——创建帐号
a.创建时指定默认的数据库b.给一个角色(如系统管理员等)
c.用户映射,给用户访问数据库的权限,默认的数据库不一定有访问权限
通过脚本建数据库的一些细节:一个脚本,如果需要保证它是能够多次执行的(注意和一次执行的区别),是需要进行数据库或者表是否存在的判断的。
如果要删除一个包含外键关系的表,删除顺序应该是先删外键表,再删主键表。如果互相引用,怎么办?用select * from sys.all_objects查询,type为f,即为外键约束类型。
如果要将互相关联的表删除,应该先删除它们之间的引用关系。
例子:
if exits (select * from sys.all_objects where name=’FK_abc’ and type=f)
alter table student drop FK_abc
上面的语句删除了一个名为FK_abc的引用。
稍复杂的查询语句:
将查询的结果放入新表:select name,birthday into users2 from users
delete删除表的过程:删除所有的页,删除索引(如果有的话),日志是必须删除的,并且删除表时,需要将所有的记录写日志,当表的记录很多时,操作会很慢,如果不希望对删除操作记录日志,可使用truncate table user2语句。如果要完全删除表,则使用drop命令。
将查询结果放到存在的表中:inser users2(name,birthday) select name,birthday from users
SQL Server2000中,top后面跟常量,而SQL Server2005中,top后面可以跟变量。top是SQL Server中专用的,Oracle中没有。
联合查询union:合并结果集并且去掉重复(具体的执行顺序有待确认)
笛卡尔乘积:结果的列:参加乘积的表之和
结果的行:参加乘积的表之积
在写笛卡尔乘积相关的sql语句时,应该先用条件做过滤,再做笛卡尔,效率会比较高
内联接:先做笛卡尔乘积,再选出符合条件的记录。
左联接:做完笛卡尔乘积,除了挑选公共的记录,还会挑出左表中未被匹配的记录。(即左表中的记录,无论匹配与否,都会被挑出,但是记录数不能简单的理解为左表的数,应该是大于或者等于左表数)
右联接:做完笛卡尔乘积,除了挑选公共的记录,还会挑出右表中未被匹配的记录。
若要更改左右联接,只需要更改两表的顺序即可。
交叉联接(不重要):就是笛卡尔乘积
子查询:在查询内嵌套查询,一般来说,都可以用联接来代替,并且现在数据库的发展趋势是逐渐废除子查询,所以尽量不要使用。
分组 group:
原理:
1. 分组条件,根据一列或几列来分
2. 聚合函数
分组后,要显示符合某条件的记录,使用having关键字
where与having的区别:where过滤结果集,而having过滤组
例子:select DepID,count(*) from users group by DepID having DepID<>8
分享到:
相关推荐
唐骏日记,唐骏日记唐骏日记,唐骏日记唐骏日记,唐骏日记唐骏日记,唐骏日记
SAP 日记1SAP 日记1SAP 日记1SAP 日记1SAP 日记1SAP 日记1SAP 日记1SAP 日记1SAP 日记1SAP 日记1SAP 日记1SAP 日记1SAP 日记1SAP 日记1SAP 日记1
SAP 开发日记2SAP 开发日记2SAP 开发日记2SAP 开发日记2SAP 开发日记2SAP 开发日记2SAP 开发日记2SAP 开发日记2SAP 开发日记2SAP 开发日记2
记事本个人日记记事本个人日记记事本个人日记
c#初学日记c#初学日记c#初学日记c#初学日记c#初学日记c#初学日记c#初学日记c#初学日记
移动日记本功能包含传统的日记本和音频日记视频日记实现私密日记和普通日记。.zip
本软件起到了一个个人日记的功能。 日记记录的内容全部存放在tool\5b\artdiary.gtz下面,如果记录数量比较多的情况下,可以手工备份此文件,以免以外情况下丢失数据。 日记中的心情与天气,可以选择,也可以手工...
微信小程序 小熊的日记 (源码)微信小程序 小熊的日记 (源码)微信小程序 小熊的日记 (源码)微信小程序 小熊的日记 (源码)微信小程序 小熊的日记 (源码)微信小程序 小熊的日记 (源码)微信小程序 小熊的日记 (源码)微信...
9、日记站后台管理目录为a,访问请直接用"域名/a",a目录可随意命名。建议后台管理目录。 10、日记后台管理分系统设置、管理员密码、用户管理、用户密码、日记管理和推荐管理几大块。 11、日记演示站 [七日记...
9、日记站后台管理目录为a,访问请直接用"域名/a",a目录可随意命名。建议后台管理目录。 10、日记后台管理分系统设置、管理员密码、用户管理、用户密码、日记管理和推荐管理几大块。 11、日记演示站 [ 青春日记],如...
唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记唐俊日记
这是一款仿真日记,也是我个人认为最优秀的日记。(用过效能日记等日记软件,但没有一款符合我心意,惟独这款日记深得我心) 喜欢写日记的人可以尝试,相信你们也会认同我的观点并喜欢上这款日记。 这是我最爱的一...
[程序员实习日记大全]java程序员实习日记多篇.docx[程序员实习日记大全]java程序员实习日记多篇.docx[程序员实习日记大全]java程序员实习日记多篇.docx[程序员实习日记大全]java程序员实习日记多篇.docx[程序员实习...
营销系统员工培训日记.doc
小熊の日记小熊日记demo.rar
动力节点王勇老师的DRP项目培训日记,绝对经典!
SAP 日记SAP 日记SAP 日记SAP 日记SAP 日记SAP 日记SAP 日记SAP 日记SAP 日记SAP 日记SAP 日记
日记人多用户网络日记程序是一个漂亮精致的网络日记本,它界面美观、功能丰富、使用方便,包含了用户登录注册、日记本排行、日记搜索、日记管理、留言评论等功能,还有音乐播放、时钟日历、愿望小寺等小功能。...
小程序源码 小熊的日记 (代码+截图)小程序源码 小熊的日记 (代码+截图)小程序源码 小熊的日记 (代码+截图)小程序源码 小熊的日记 (代码+截图)小程序源码 小熊的日记 (代码+截图)小程序源码 小熊的日记 (代码+截图)小...