设为首页 收藏本站
查看: 703|回复: 0

[经验分享] 学习SQL server2005

[复制链接]

尚未签到

发表于 2016-11-10 04:44:41 | 显示全部楼层 |阅读模式
  SQL 语言分类:
 DQL:数据查询语言,比如select
 DML:数据操作语言,比如update
 DCL:数据控制语言,比如revoke
 DDL:数据定义语言,比如create
 CCL:通用命令语言,比如declare
  数据的完整性:
 1。实体完整性:针对行,建主键,唯一约束,标识列。
 2。引用完整性:多个表,建外键,注意:外键表所引用的数据在主键表中必须存在。
 3。域完整性:针对于列,建检查约束,默认值,not null 属性。
 4。用户定义的完整性:建存储过程和触发器。
  数据库文件和日志文件:
 1。主要数据文件,是指数据库起始点并且指向数据库的其他文件,每个数据库都有一个主要数据文件,扩展名(.mdf)
 2。次要数据文件,包括除主数据文件以外的所有数据文件,可有0个或多个,扩展名(.ndf)
 3。日志文件,包含所有用于恢复数据库的日志信息。每个数据库至少要有一个日志文件,也可以有多个。
 
数据库配置选项:
 1。exec sp_dboption 'pubs','read only','true' 含义:把pubs设为只读
 2。exec sp_dboption 'pubs',autoshrink,true 含义:设置pubs数据库自动周期性收缩。
 3。exec sp_dboption 'pubs','single user' 含义:设置pubs数据库在同一时间只允许一个用户访问。
 4。dbcc shrinkdatabase(pubs,10) 含义:收缩pubs数据库的大小。并允许其有10%的未用空间。
 5。修改数据库名称:
 alter database 原名 modify name=新名
 6。删除数据库:
 use master
 go
 if DB_id('Study') is not null
  drop database Study
 go
 
NULL 既不是0也不是""(空字符串),可以理解成“任何不确定的值”
  移动数据库:可以使用分离和附加,或者备份和还原。
  建表规则:
  1。每个表必须有一个键字段。
  2。不能存在重复键
  3。每个表必须包含单个实体的信息
  4。表的每个字段必须依赖于主键字段
  5。所有非主键字段不能相互依赖。
  
T-SQL语句中的通配符:
 1。'_' :一个字符
 2。'%' :任意长度的字符串
 3。'[]':括号中指定范围内的一个字符
 4。'[^]':不在括号中指定范围内的任意一个字符。
 
使用select into 将一个表中的数据添加到另一个表中:
 1。 insert into 表名(列表) select 选择列表 from 源表
 2。 select 选择列表 into 新建表名 from 源表
 注意:
 1).以上两种语句功能类似,但是不完全一样,前者是将一个结果集插入到一个现有的表中,而后者是利用结果集创建一个新表。
 2).采用第一种形式,你必须保证目的表存在。并且源表中列的数据类型与目的表中相应列的数据类型匹配。
 3).采用第一种形式,如果在源表中没有出现的列,你必须为目的表的列指定默认值,或者允许该列为空,否则不会成功。
 4).采用第二种形式,如果新表在数据库中存在,系统将会提示出错。
 
delete 和 truncate
 两者都能删除表中的所有行,并且保留表结构。
 不同之处在于:delete删除表数据时,会写日志,而truncate就不会写日志,所以在删除大量数据时如果不想写到日志文件中去的话用truncate的效率会高的多。
  备份表:
 select * into 新表名 from 旧表名 [where 0=1]
 可选部分含义:如果只想要表结构的话可加上此条件。
  使用top关键字:
 select top 10 * from 表名  (显示前十行)
 select top 40 percent * from 表名 (返回前百分之40的行)
  distince关键字:忽略重复行
  group by分组:
 注意:使用此语句时对select列表中的项目是有限制的,仅允许以下几项:
 1。分组列
 2。为每个分组返回一个值的表达式,例如用一个列名作为参数的聚合函数
  where , having, 和 group by
 where搜索条件应用于分组操作发生之前,而having条件应用于分组操作之后,所以having可以包含聚合函数,而where不能,where子句用于筛选由from子句中指定的操作产生的行,group by 子句用于将where子句的输出结果进行分组,having用于筛选汇总后的行,
 where --> group by --> having
 
常用时间函数:
 函数名:              含义:
 getdate()              当前日期
 day('2/18/2004')          取天,返回18
 month('2/18/2004')         取月,返回2 
 year('2/18/2004')          取年,返回2004
 datepart(month,'2/18/2004')     取月,返回2
 datediff(day,'3/15/2004',getdate()) 返回指定日期与当前日期相差的天数
 dateadd(day,50,getdate())           在当前日期上加50天
 
alter table 表名 add 列名 数据类型[是否可以为空] constraint 约束名 default(给定的默认值) with values
 with values 选项表示用给定的默认值填充现有行中刚添加的列的值
  主键的特点:
 (1) 主键(列)不允许空值。
 (2) 不能存在具有相同的主键值的两个行,因此主键值总是唯一标识单个行的。
 (3) 表中可以有不止一个列唯一标识行,每个列都称作候选键。只有一个候选键可以选作表的主键,所有其它候选键称作备用键。
 (4) 尽管表不要求具有主键,但定义主键是很好的做法。
  当一个表(这里称为外键表)的某列应用另一个表(主键表)的主键或者唯一键列作为外键时,如果想要删除或者修改主键表中被引用的列的数据,可以给定两种方法,即“级联更新”和“级联删除”,指定级联更新时,在修改主键列信息时,数据库管理系统会自动修改外键列中的相应的数据,与此类似,在指定级联删除时,在删除主键表中的数据时外键表中的相关数据行也一起被删除,纵然可以这样,一般都不建议这样做,因为这样就失去了外键应有的作用。语法如下:
通过使用级联引用完整性约束,你可以定义当用户试图删除或更新现有外键指向的键时,SQL Server 2005 执行的操作。
  CREATE TABLE 和 ALTER TABLE 语句的 REFERENCES 子句支持 ON DELETE 和 ON UPDATE 子句:
  [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
  [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
  如果没有指定 ON DELETE 或 ON UPDATE,则默认为 NO ACTION。
  ON DELETE NO ACTION
  指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 DELETE 语句。
  ON UPDATE NO ACTION
  指定如果试图更新某一行中的键值,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 UPDATE 语句。
  CASCADE、SET NULL 和 SET DEFAULT 允许通过删除或更新键值来影响指定具有外键关系的表,这些外键关系可追溯到在其中进行修改的表。如果为目标表也定义了级联引用操作,那么指定的级联操作也将应用于删除或更新的那些行。不能为具有 timestamp 列的外键或主键指定 CASCADE。
  ON DELETE CASCADE
  指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则也将删除所有包含那些外键的行。
  ON UPDATE CASCADE
  指定如果试图更新某一行中的键值,而该行的键值被其他表的现有行中的外键所引用,则组成外键的所有值也将更新到为该键指定的新值。
  注意: 
如果 timestamp 列是外键或被引用键的一部分,则不能指定 CASCADE。
  ON DELETE SET NULL
  指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为 NULL。目标表的所有外键列必须可为空值,此约束才可执行。
  ON DELETE SET NULL
  指定如果试图更新某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为 NULL。目标表的所有外键列必须可为空值,此约束才可执行。
  ON DELETE SET DEFAULT
  指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON DELETE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。
  ON UPDATE SET DEFAULT
  指定如果试图更新某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON UPDATE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性
  联接:
 1.内联:
 语法:select 列表 from table1 join table2 on 条件表达式
 2.外联:
  1).左外联:
  语法:select 列表 from 左表 left join 右表 on 条件表达式
  查询结果为左表中的全部数据加上右表中符合条件的数据
  2).右外联:
  语法:select 列表 from 左表 right join 右表 on 条件表达式
  查询结果为右表中的全部数据加上左表中符合条件的数据 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-298033-1-1.html 上篇帖子: T-SQL检查列校验 下篇帖子: 一步一步 Sql Azure
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表