`
senton
  • 浏览: 200976 次
  • 性别: Icon_minigender_1
  • 来自: 紫禁城
社区版块
存档分类
最新评论

学习SQL server2005

阅读更多

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 条件表达式
  查询结果为右表中的全部数据加上左表中符合条件的数据 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics