sql server约束

sql server约束
sql server约束

对于SQL Server中的约束,想必大家并不是很陌生。但是约束中真正的内涵是什么,并不是很多人都很清楚的。本文以详细的文字来介绍了什么是约束,以及如何在数据库编程中使用和使用这些约束,来达到更好的编程效果。(本文部分内容参考了SQL Server联机手册)

内容

数据完整性分类

实体完整性

域完整性

引用完整性

用户定义完整性

PRIMARY KEY约束

DEFAULT约束

CHECK约束

UNIQUE约束

FOREIGN KEY约束

正文

在数据库管理系统中,保证数据库中的数据完整性是非常重要的。所谓数据完整性,就是指存储在数据库中数据的一致性和正确性。约束定义关于列中允许值的规则,是强制完整性的标准机制。使用约束优先于使用触发器、规则和默认值。查询优化器也使用约束定义生成高性能的查询执行计划。

SQL Server联机丛书中,将数据完整性解释如下:“存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。”强制数据完整性可确保数据库中的数据质量。

例如,如果输入了employee_id 值为123 的职员,那么该数据库不应允许其他职员使用同一ID 值。如果计划将employee_rating 列的值范围设定为从1 到5,则数据库不应接受6。如果表有一dept_id 列,该列存储职员的部门编号,则数据库应只允许接受公司中的有效部门编号。

数据完整性分类

在SQL Server中,根据数据完整新措施所作用的数据库对象和范围不同,可以将数据完整性分为以下几种。

实体完整性

域完整性

引用完整性

用户定义完整性

SQL Server联机丛书中指明:“对表进行计划有两个重要步骤:标识列的有效值和确定如何强制列中的数据完整性。”

实体完整性

实体完整性简单的说,就是将表中的每一行看作一个实体。实体完整性要求表的标示符列或主键的完整性。可以通过建立唯一索引、PRIMARY KEY约束、UNIQUE约束,以及列的IDENTITY属性来实施实体完整性。

域完整性

域完整性是指给定列的输入有效性。要求表中指定列的数据具有正确的数据类型、格式和有效的数据范围。强制域有效性的方法有:限制类型(通过数据类型)、格式(通过CHECK 约束和规则)或可能值的范围。域完整性通过FOREIGN KEY 约束、CHECK 约束、DEFAULT 定义、NOT NULL 定义和规则来实现。

引用完整性

引用完整性又称参照完整性。引用完整性维持被参照表和参照表之间的数据一致性,他通过主键(PRIMARY KEY)约束和外键(FOREIGN KEY)约束来实现。引用完整性确保键值在所有表中一致。这样的一致性要求不能引用不存在的值,如果键值更改了,那么在整个数据库中,对该键值的所有引用要进行一致的更改。在被参照表中,当其主键值被其他表所参照时,该行不能被删除也不允许改变。在参照表中,不允许参照不存在的主键值。

强制引用完整性时,SQL Server 禁止用户进行下列操作:

当主表中没有关联的记录时,将记录添加到相关表中。

更改主表中的值并导致相关表中的记录孤立。

从主表中删除记录,但仍存在和该记录匹配的相关记录。

例如,对于pubs 数据库中的sales 和titles 表,引用完整性基于sales 表中的外键(title_id) 和titles 表中的主键(title_id) 之间的关系。

用户定义完整性

用户定义完整性使您得以定义不属于其它任何完整性分类的特定业务规则。所有的完整性类型都支持用户定义完整性。

建立和使用约束的目的是保证数据的完整性,约束是SQL Server强制实行的使用规则,他能够限制用户存放到表中数据的格式和可能值。约束作为数据库定义的一部分在CREATE TABLE语句中声明,所以又称做声明完整性约束。约束独立于表结构,可以在不改变表结构情况下,通过ALTER TABLE语句来添加或者删除。在删除一个表时,该表所带的所有约束定义也被随之删除。

PRIMARY KEY约束

在数据库的每个表中,经常有通过一列或者多个列,唯一的标识表中的每一行。就好像我们平时使用的身份证,能够唯一的标识每个人一样。这样的一列或者多个列,被称为主键,通过主键,可以强制表的实体完整性。

每一个表中只有一个PRIMARY KEY约束,更简单的说,他是通过建立唯一索引保证指定列的实体完整性。在使用PRIMARY KEY约束时,该列的空值属性必须定义为NOT NULL,也就是说拥有主键的那一列,不能为空。

由于PRIMARY KEY约束确保唯一数据,所以经常用来定义标识列。标识列就是表中已经指派了标识属性的列。标识属性生成唯一数字。

有些刚刚开始接触SQL Server编程的技术爱好者通常会有这样的疑问,为什么非要在一个表里面建立主键?其实答案是很明显的,建立主键不仅可以保证表内数据的完整性,而且在为表建立主键的同时,Microsoft SQL Server能够通过为主键创建唯一索引强制数据的唯一性。

当在查询中使用主键时,也就是利用主键所在的列作为关键字进行查询,该所因还可以用来对数据进行快速访问。如果在PRIMARY KEY约束中未指定索引类型时,默认情况下所建立的索引为簇索引。该索引只能通过删除PRIMARY KEY约束或其相关表的方法来删除,而不能使用DROP INDEX语句删除。当PRIMARY KEY约束由另一张表的FOREIGN KEY约束引用时,不能删除PRIMARY KEY约束;要删除它,必须先删除FOREIGN KEY约束。

通常建立一列约束时,我们称之为列级PRIMARY KEY约束,使用于多列时,称之为表级PRIMARY KEY 约束。

列级PRIMARY KEY约束的定义格式为:

[CONSTRAINT constraint_name]

PRIMARY KEY [CLUSTERED | NONCLUSTERED]

[WITH [FILLFACTOR = fillfactor]]

[ON {filegroup | DEFAULT}]

表级PRIMARY KEY约束定义风格为:

[CONSTRAINT constraint_name]

PRIMARY KEY [CLUSTERED | NONCLUSTERED]

{(column[,…n])}

[WITH [FILLFACTOR = fillfactor]]

[ON {filegroup | DEFAULT}]

在上面的PRIMARY KEY约束定义中,WITH子句设置为PRIMARY KEY约束所建立索引的页面填充度,ON子句指出存储索引的数据库文件组名称。将索引文件和表数据文件分寸到数据库中位于不同硬盘驱动器的数据文件中,有利于减轻单个硬盘的负载。

DEFAULT约束

使用DEFAULT约束,如果用户在插入新行是没有显示为列提供数据,系统会将默认支赋给该列。例如,在一个表的payterms列中,可以让数据库服务器在用户没有输入时填上”???”或者”fill in later”。默认值约束所提供的默认值约束所提供的默认值可以为常量、函数、系统零进函数、空值(NULL)等等。零进函数包括CURRENT_TIMESTAMP、SYSTEM_USER、CURRENT_USER、USER和SESSION_USER等。默认值约束的定义格式为:

[CONSREAINT constraint_name]

DEFAULT constant_expression

其中,constraint_name参数指出所建立的默认值约束名称。Constant_expression表达式为列提供默认值。在使用默认约束是,还应该注意以下两点:

1. 每列只能有一个默认约束。

2. 约束表达式不能参照表中的其他列和其他表、视图或存储过程。

CHECK约束

CHECK约束的主要作用是限制输入到一列或多列中的可能值,从而保证SQL Server数据库中数据的域完整性。例如,可以在建立用户使用库时,强制用户的密码在10位以上。每个标允许建立多个CHECK 约束。在CHECK约束中可以包含搜索条件,但不能包含子查询。

同样,我们可以为表中的每个列建立约束,每个列可以拥有多个CHECK约束,但是如果使用CREATE TABLE语句,只能为每个列建立一个CHECK约束。如果CHECK约束被使用于多列时,他必须被定义为表级CHECK约束。

在表达式中,可以输入搜索条件,条件中可以包括AND或者OR一类的连接词。列级CHECK约束只能参照被约束列,而表级CHECK约束则只能参照表中列,它不能参照其他表中列。

例如,我们使用下面的语句在TB_CHECK_CONSTRAINT表中新加入一列ZIP_CODE及其相应的CHECK约束:

ALTER Table TB_CHECK_CONSTRAINT

ADD

ZIP_CODE char(6) null

CONSTRAINT CH_ZIP_CODE check

(ZIP_CODE like ‘[0-9] [0-9] [0-9] [0-9] [0-9] [0-9]’)

同样,我们可以使用CHECK或NOCHECK来打开或者关闭某个约束。例如,下面的语句将关闭上面建立的CH_ZIP_CODE约束:

ALTER Table TB_CHECK_CONSTRAINT

NOCHECK CONSTRAINT CH_ZIP_CODE

如果希望使用编辑器来建立约束关系,需要在数据库关系图中,右击包含约束的表,然后从快捷菜单中选择“约束”命令。或者可以将包含约束的表打开表设计器,在表设计器中右击,然后选择“约束”命令。

UNIQUE约束

该约束使用于表中的非主键列,UNIQUE约束保证一列或者多列的试题完整性,确保这些猎不会输入重复的值。例如,表中UserName列为主键,但是其中还包括身份证号码列,由于所有身份证号码不可能出现重复,所以可以在此列上建立UNIQUE约束,确保不会输入重复的身份证号码。

它和PRIMARY KEY约束的不同之处在于,UNIQUE约束可以建立在多个列之上,而PRIMARY KEY 约束在一个表中只能有一个。

建立UNIQUE约束,可以使用如下办法:

1. 在数据库关系图中右击将包含约束的表,然后从快捷菜单中选择"属性"命令。

-或-

为将包含约束的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"属性"命

令。 2.

选择"索引/键"选项卡。 3.

选择"新建"命令。系统分配的名称出现在"索引名"框中。 4. 在"列名"下展开列的列表,选择要将约束附加到的列。若要将约束附加到多个列,在后续行中选择其它的列。

5.

选择"创建 UNIQUE"复选框。 6.

选择"约束"选项。 当保存表或关系图时,唯一约束即创建在数据库中。

当希望删除UNIQUE 索引时,可以使用如下步骤:

1. 在数据库关系图中,右击包含约束列的表,然后从快捷菜单中选择"索引/键"命令。

-或- 为包含约束的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"索引/键"

命令。

2. 从"选定的索引"列表中选择唯一约束。

3. 选择"删除"按钮。

同样,对于一列的UNIQUE 约束,我们称之为列级UNIQUE 约束,对于多列的UNIQUE 约束,我们称之为表级UNIQUE 约束。下面给出列级UNIQUE 约束的定义格式:

[CONSTRAINT constraint_name]

UNIQUE [CLUSTERED | NONCLUSTERED]

[WITH [FILLFACTOR = fillfactor]]

[ON {filegroup | DEFAULT}]

使用UNIQUE 约束的过程中,还需要注意,如果要对允许空值的列强制唯一性。可以允许空值的列附加UNIQUE 约束,而只能将主键的约束附加到不允许空值的列。但UNIQUE 约束不允许表中受约束列有一行以上的值同时为空。

例如,下面语句为TB_UNIQUE_CONSTRAINT 表添加UNIQUE 约束:

ALTER Table TB_UNIQUE_CONSTRAINT

ADD

CONSTRAINT UN_PHONE UNIQUE (username, phone)

FOREIGN KEY 约束

FOREIGN KEY 约束为表中的一列或者多列数据提供数据完整性参照。通常是和PRIMARY KEY 约束或者UNIQUE 约束同时使用的。

例如,在BookStores 表中的author_id 列以及title_id 列分别参照了Authors 表中的author_id 列以及Titles 表的title_id 列。在向BookStores 表中插入新行或修改其中的数据时,这两列的数据值必须在Authors 表和Titles 表中已经存在,否则将不能执行插入或者修改操作。

在使用FOREIGN KEY 约束是,需要注意以下几点: 1.

一个表最多只能参照253个不同的数据表,每个表也最多只能有253个FOREIGN KEY 约束。 2.

F OREIGN KEY 约束不能使用于临时表。 3. 在实施FOREIGN KEY 约束时,用户必须至少拥有被参照表中参照列的SELECT 或者REFERENCES 权限。

4.

F OREIGN KEY 约束同时也可以参照自身表中的其他列。 5. FOREIGN KEY 约束,只能参照本身数据库中的某个表,而不能参照其他数据库中的表。跨数据库的参照只能通过触发器来实现。

列举SQLServer几个基本的函数的应用.docx

-聚合函数 use pubs go select avg(distinct price) 一算平均数 from titles where type=*business' go use pubs go select max(ytd_sales) 一最大数 from titles go use pubs go select min(ytd_sales)"最小数 from titles go use pubs go select type,sum(price),sum(adva nee) —求和 from titles group by type order by type go use pubs go select count(distinct city) 一求个数 from authors go use pubs go select stdev(royalty) ■■返回给定表达式中所有值的统计标准偏差from titles go use pubs go select stdevp(royalty)-返回表达式中所有制的填充统计标准偏差

from titles go use pubs go select var(royalty)"返回所有值的统计方差 from titles go use pubs go select varp(royalty)-返回所有值的填充的统计方差 from titles go -数学函数 select sin(23.45),atan(1.234),rand(),PI(),sign(-2.34) 一其中rand 是获得一个随机数 -配置函数 SELECT @@VERSION 一获取当前数据库版本 SELECT @@LANGUAGE -当前语言 -时间函数 select getdate() as 'wawa_getdate' 一当前时间 select getutcdate() as !wawa_getutcdate' 一获取utc 时间 select day(getdate()) as 'wawa_day' 一取出天 select month(getdate()) as 'wawa_month' 一取岀月 select year(getdate()) as 'wawa_year' 一取出年 select dateadd(d,3,getdate()) as wawa_dateadd ?■力口三天,注意'd‘表示天,'m'表示月,yy表示年,下而一样 select datediff(d,*2004-07-01 *,*2004-07-15') as wawa_datediff 一计算两个时间的差 select datename(d,*2004-07-15!) as wawa_datename "取岀时间的某一部分select datepart(d,getdate()) as wawa_datepart 一取出时间的某一部分,和上面的那个差不多 "字符串函数 select ascii(123) as ,123',ascii('123') as ,H123m,ascii(,abc,) as H,abc M,一转换成ascii 码 select char(123),char(321 ),char(-123) ?■根据ascii 转换成字符 select lower('ABC'),lower('Abc'),upper('Abc'),upper('abc') 一转换大小写 select str(123.45,6,1), str(123.45,2,2) 一把数值转换成字符串

数据库系统试卷2010(基于sqlserver)及答案

数据库系统概论试卷(A) 一、选择题(15x1分) 1、_____是长期存储在计算机内的有组织,可共享的数据集合. A、数据库管理系统 B、数据库系统 C、数据库 D、文件组织 2、在数据库中存储的是_____。 A、数据 B、数据模型 C、数据以及数据之间的联系 D、信息 3、数据库系统阶段,数据_____。 A、具有物理独立性,没有逻辑独立性 B、具有物理独立性和逻辑独立性 C、独立性差 D、具有高度的物理独立性和一定程度的逻辑独立性 4、在数据模型的三要素中,数据的约束条件规定数据及其联系的_____。 A、制约和存储规则 B、动态特性 C、静态特性 D、数据结构 5.________由数据结构、关系操作集合和完整性约束三部分组成。 A、关系模型 B、关系 C、关系模式 D、关系数据库 6、一组具有相同数据类型的值的集合称为________。 A、关系 B、属性 C、分量 D、域 7、集合R与S的交可以用关系代数的5种基本运算表示为________。 A、R-(R-S) B、σF(R×S) C、R-(S-R) D、S-(R-S) 8、实体是信息世界中的术语,与之对应的数据库术语为_______。 A、文件 B、数据库 C、字段 D、记录 9、在嵌入式SQL语言中使用游标的目的在于________。 A、区分SQL与宿主语言 B、与数据库通信 C、处理错误信息 D、处理多行记录 10、FoxBASE、FoxPro属于________。 A、表式系统 B、最小关系系统 C、关系完备的系统 D、全关系系统 11、在R(U)中,如果X→Y,并且对于X的任何一个真子集X',都没有X'→Y, 则________。 A、Y函数依赖于X B、Y对X完全函数依赖 C、X为U的候选码 D、R属于2NF 12、3NF________规范为BCNF。 A、消除非主属性对码的部分函数依赖 B、消除非主属性对码的传递函数依赖 C、消除主属性对码的部分和传递函数依赖 D、消除非平凡且非函数依赖的多值依赖 13、下面的结论不正确的是______。 A、若R.A→R.B, R.B→R.C 则R.A→R.C B、若R.A→R.B, R.A→R.C 则R.A→R.(B,C) C、若R.B→R.A, R.C→R.A 则R.(B,C)→R.A D、若R.(B,C)→R.A 则R.B→R.A,R.C→R.A 14、需求分析阶段得到的结果是________。 数据字典描述的数据需求B、E-R图表示的概念模型 C、某个DBMS所支持的数据模型 D、某个DBMS所支持的数据模型 15、一个m:n联系转换为一个关系模式。关系的码为________。 A、实体的码 B、各实体码的组合 C、n端实体的码 D、每个实体的码 二、填空(20x1分) 数据库系统的主要特点:______________________________、数据冗余度小、 具有较高的数据程序独立性、具有统一的数据控制功能等。

SQLSERVER操作命令

SQLSERVER数据库操作 ******操作前,请确定SQL的服务已经开启******** 一:登录进入sql数据库 1、开始---所有程序---Microsoft SQL Server 2005---SQL Server Management Studio Express 2、此时出现“连接到服务器”的对话框, “服务器名称”设置为SQL数据库所在机器的IP地址 “身份验证”设置为SQL Server身份验证或者Windows 身份验证 填写登录名和密码后,点击“连接”按钮,即可进入到SQL数据库操作界面。 二:新建数据库 登录进去后,右击“数据库”,选择—“新建数据库” 设置数据库名称,在下面的选项卡中还可以设置数据库的初始大小,自动增长,路径。 点击确定,一个数据库就建好了。 三:如何备份的数据库文件。 登录进入后,右击相应的需要备份数据库----选择“任务” 目标下的备份到,点击“添加”按钮可以设置备份数据库保存的路径。 四:如何还原备份的数据库文件。(以本地机器为例子) 1、设置服务器名称,点击右边的下拉框的三角,选择“浏览更多…”。 此时出现查找服务器对话框,选择“本地服务器”---点开“数据库引擎”前面 的三角---选中出现的服务器名称—确定。 (注:可以在“网络服务器”选项卡中设置网络服务器) 2、设置身份验证,选择为“windows身份验证” 3、点击连接按钮,进入数据库管理页面 4、右击“数据库”,选择“还原数据库”,出现还原数据库的对话框 还原的目标----目标数据库,这里设置数据库的名字 还原的源----选择“源设备”,在弹出的对话框中点击“添加”按钮,找到所备 份的数据库文件,确定。 5、此时,在还原数据库对话框中会出现所还原的数据库的信息。在前面选中所需还 原的数据库。确定。 6、为刚刚还原的数据库设置相应的用户。 a点开“安全性”---右击“登录名”---新建登录名 b 设置登录名(假如为admin),并设置为SQL Server身份验证,输入密码,去除 “强制实施密码策略”前的勾。 C 找到导入的数据库,右击此数据库----选择“属性”,在选择页中,点击“文件” 设置所有者,点击右边的按钮,选择“浏览”,找到相应的用户(如admin)。确 定。。 7、此时重新以admin的身份进入,就可操作相应的数据库。

SQL建表语句约束

一、基础(建表、建约束、关系) 约束(constraint)是microsoft sql server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9 章)。在sql server 中有5 种约束:主关键字约束(primary key constraint)、外关键字约束(foreign key constraint)、惟一性约束(unique constraint)、检查约束(check constraint)和缺省约束(default constraint)。 (最后几页介绍sql基础约束) 1、说明:创建数据库 create database database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device use master exec sp_addumpdevice disk, testback, c:\mssql7backup\mynwind_1.dat --- 开始备份 backup database pubs to testback 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) --建表、建约束、关系 create table tableok ( col1 int, col2_notnull int not null, col3_default nchar(1) not null default(男), --默认男 col4_default datetime not null default(getdate()), --默认得到系统时间 col5_checkintnot null check(col5_check>=18 and col5_check<=55), --添加约束,数据值在18到55之间 col6_checknchar(9) not null check(col6_check like msd0902[0-9][^6-9]), --添加约束,数据值前7位必须是?msd0902?,倒数第两位可以是0-9中任意一个数字,最后一位不是6-9之间的数字。 cola_primary nchar(5) not null primary key, --建立主键 colb_unique int unique, --唯一约束 col7_identity int not null identity(100,1), --自增长,从100开始,每列值增加1个 col8_identity numeric(5,0) not null identity(1,1) --自增长,从1开始,每列值增加1个,最大值是5位的整数 col9_guid uniqueidentifier not null default(newid()) --使用newid()函数,随机获取列值 ) --alter

基于SQLServerMobile与RFID的身份认证设计与实现

基于SQL Server  Mobile与RFID的身份认证设计与实现 杜 丰,韩 博,杨 洁,李一鸣 (西安交通大学网络中心,陕西西安 710049 )摘 要:基于移动终端的校园卡身份认证不但扩展了校园卡的使用范围,而且为一卡通系统与学校各应用系统的对接提供了良好手段。利用微软SQL Server Mobile数据库的RDA(remote data access)技术建立远程访问模型,通过移动设备的无线网络和RFID(radio frequency identification)识别功能实现身份认证。关键词:身份认证;SQL Server  Mobile;RDA;RFID中图分类号:TP31 文献标志码:A 文章编号:1002- 4956(2011)05-0260-02Design and implementation of authentication basedon SQL Server Mobile and  RFIDDu Feng,Han Bo,Yang  Jie,Li Yiming(Network Center,Xi’an Jiaotong  University,Xi’an 710049,China)Abstract:Campus card authentication,based on mobile terminal,not only expanded the use of campus card,but also provided a good means for the docking of card system and other application systems of the university.Using RDA technology of Microsoft SQL Server Mobile database can establish the remote access model,andthrough wireless networks of mobile devices and RFID recognition can realize authentication.Key  words:authentication;SQL Server Mobile;RDA;RFID收稿日期:2010-12-27 作者简介:杜丰(1981—) ,男,陕西西安,工学学士,工程师,研究方向为网络编程. 近几年各高校开展建设的数字化校园已初具规 模,校园卡系统作为数字化校园的重要组成部分已经与越来越多的部门实现对接,为各应用系统提供了基础信息, 实现了身份认证。目前,移动终端已经拥有强大的处理能力、内存、固化存储介质以及操作系统,可以完成复杂的处理任务。移动终端也拥有非常丰富的通信方式,既可以通过GSM等无线运营网通信,也可以通过无线局域网、蓝牙和红外进行通信。如何利用便捷的移动终端,实现随时随地的身份认证是本文深入探讨的问题。 1 移动终端与相关技术 1.1 移动终端 广义上讲,移动终端是指可以在移动中使用的计 算机设备,包括手机、POS机、PDA、 车载电脑等[1] 。随着集成电路技术的飞速发展,移动终端正在从功能 简单的工具变为一个综合信息处理平台。今天的移动终端不仅可以通话、 拍照、听音乐、玩游戏,而且可以实现包括定位、信息处理、指纹扫描、身份证扫描、条码扫描、RFID扫描等丰富的功能, 成为移动办公、移动商务的重要工具[ 2] 。1.2 SQ L Server Mobile及数据同步技术1.2.1 SQL Server  MobileSQL Server Mobile(见图1)是一种压缩数据库,可以将企业数据管理能力延伸到移动设备。它提供多用户支持,提供RDA和Rep lication两种方法与SQLServer数据库交互, 提供行和列级跟踪,可反馈同步进度,支持SSL加密等, 可与其他微软产品集成[3] 。1.2.2 RDA和Rep licationRDA(remote data access,远程数据访问)使移动应用程序能够访问远程SQL Server数据库表中的数据,并将这些数据存储在本地SQL Server Mobile数据库表中。应用程序可以读取和更新本地数据库表,并跟踪对本地数据库表所做的更改,将更改过的记录更新回SQL  Server数据库表。Rep lication只SQL Server 2000配合使用。ISSN  1002-4956CN11-2034T 实 验 技 术 与 管 理Experimental Technology and Management 第28卷 第5期 2011年5月Vol.28 No.5 May .2011

sqlserver日期时间函数

sql server日期时间函数 Sql Server中的日期与时间函数 1. 当前系统日期、时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值 例如:向日期加上2天 select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000 3. datediff 返回跨两个指定日期的日期和时间边界数。 select datediff(day,'2004-09-01','2004-09-18') --返回:17 4. datepart 返回代表指定日期的指定日期部分的整数。 SELECT DATEPART(month, '2004-10-15') --返回 10 5. datename 返回代表指定日期的指定日期部分的字符串 SELECT datename(weekday, '2004-10-15') --返回:星期五 6. day(), month(),year() --可以与datepart对照一下 select 当前日期=convert(varchar(10),getdate(),120) ,当前时间=convert(varchar(8),getdate(),114) select datename(dw,'2004-10-15') select 本年第多少周=datename(week,'2004-10-15') ,今天是周几=datename(weekday,'2004-10-15') 函数参数/功能 GetDate( ) 返回系统目前的日期与时间 DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1 DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期 DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值

经典SQL语句大全_主外键_约束

一、基础(建表、建约束、关系) 约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9 章)。在SQL Server 中有5 种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。 (最后几页介绍SQL基础约束) 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1. dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) --建表、建约束、关系 create table tableok ( col1 int, col2_notnull int not null, col3_default nchar(1) not null default('男'), --默认男 col4_default datetime not null default(getdate()), --默认得到系统时间 col5_check int not null check(col5_check>=18 and col5_check<= 55),--添加约束,数据值在18到55之间 col6_check nchar(9) not null check(col6_check like 'msd0902[0-9][^ 6-9]'), --添加约束,数据值前7位必须是‘msd0902’,倒数第两位可以是0-9中任意一个数字,最后一位不是6-9之间的数字。 cola_primary nchar(5) not null primary key, --建立主键 colb_unique int unique, --唯一约束 col7_Identity int not null identity(100,1), --自增长,从100开始,每列值增加1个

基于MSSQLSERVER的学校教务管理系统

龙源期刊网 https://www.360docs.net/doc/2e9840973.html, 基于MSSQLSERVER的学校教务管理系统作者:吴蕊孙东山 来源:《无线互联科技》2019年第05期 摘要:文章研究了一种基于MSSQLSERVER与https://www.360docs.net/doc/2e9840973.html,的教务管理系统,采用C#语言设计创建窗体及其相关控件,并在相应的地方编写代码,实现了对学生、教师、用户、课程等表的增删改查,并根据用户的身份设定不同的权限,以保证数据库相对安全。在系统设计的过程中,采用了“自顶而下,逐步求精”的设计理念,成功实现一款简单实用的教务管理系统。 关键词:教务管理系统;MSSQLSERVER;https://www.360docs.net/doc/2e9840973.html,;数据库;系统设计 当今社会中,信息技术在管理上的应用越来越广泛,信息系统在技术上已经逐渐成熟。在现代社会中,任何企业事业单位想要生存和发展,都离不开信息管理系统的支持。而在高校中,教务管理系统是学校管理体系的重要组成部分[1]。过去的人工管理和文件管理方式既耗 时耗力,又容易出现错误和遗失,且不便于查询、更新和维护数据。 1 需求分析 1.1 性能需求 系统要求操作界面化,操作简单,界面友好,功能实用。数据库要求运行稳定,执行效率高,数据安全性可靠。软件运行期间,对软硬件设施要求适中,且具有一定的兼容性和可移植性[2]。 1.2 功能需求 本教务管理系统主要有以下几大功能:(1)登录管理。登录时根据身份进行不同的权限分配。(2)信息管理。对学生表、教师表、用户表的增删改查,对选修表、成绩表课程表的连接查询等。(3)系统管理。各个模块管理时既有一定的独立性,又有一定的联系性。 1.2.1 登录管理功能 该模块是对合法用户登录的界面,用户通过相应的身份、用户名、密码和验证码进行登录,若身份、用户名、密码和验证码都正确,系统则根据相应的身份,为该用户分配相应的权限,用户进入相应权限的操作界面。 1.2.2 对学生表的管理功能 该模块是对学生表进行管理的模块,首先可以检索出数据库的学生表的所有信息,用户可以在其中增加新的学生记录,并可以对指定的学生进行增删改操作。

SQL约束讲解

SQL约束讲解 编辑人:星辰·樱 一.约束的类型 SQL Server 系统提供了6种约束类型,即not null非空约束,primary key主键约束,Foreign key外键约束,unique唯一约束,check检查约束和default 默认约束。 约束与完整性之间的关系 域完整性:default ,check。实体完整性:primary key ,unique。 参照完整性:foreign key。 二.定义约束的方式 定义约束可以使用create table语句或alter table语句完成。前者表示创建表的同时定义约束,后者表示在已有表中定义约束。 定义约束时,即可以所约束放在一个列上,也可以约束放在多个列上。前者称为列级约束,后者称为表级约束。 定义约束和修改约束时,要考虑以下几个因素: 1.不必删除表,就可以直接创建、修改表和删除约束的定义。 2.应该在应用程序中增加错误检查机制,测试数据是否与约束相冲突。 3.当在表上增加约束时,SQL Server系统将检查表中的数据是否与约束冲突。 4.一般情况,约束的名称应该符合,约束类型简名_表名_列名_代号这样的形式。 1.主键约束 主键约束用来强制数据的实体完整性,它是在表中定义一个主建来唯一标识表中的每行记录。 --T-SQL语句 Create table 表名 (列名数据类型constraint 主键约束名primary key [,···n] ---列级主键Constraint 主键约束名primary key (列名[,···n]) ---表级主键——alter table命令 Alter table 表名 Add constraint 列名primary key [clustered|nonclustered] {(列名[,···n])} ·clustered:表示在该列上建立聚集索引。 ·nonclustered:表示在该列上建立非聚焦索引。 2.NUIQUE约束 Unique约束主要用来限制表的非主键列中允许输入重复值,用来强调数据的

sqlserver常用函数

Sql Server 常用函数 1,统计函数avg, count, max, min, sum 2, 3,多数聚会不统计值为null的行。可以与distinct一起使用去掉重复的行。可以与group by 来分组4, 5, 2,数学函数 6, 7, SQRT 8, ceiling(n) 返回大于或者等于n的最小整数 9, floor(n), 返回小于或者是等于n的最大整数 10,round(m,n), 四舍五入,n是保留小数的位数 11,abs(n) 12,sign(n), 当n>0, 返回1,n=0,返回0,n<0, 返回-1 13,PI(), 3.1415.... 14,rand(),rand(n), 返回0-1之间的一个随机数 15,3,字符串函数 16, 17,ascii(), 将字符转换为ASCII码, ASCII('abc') = 97 18,char(), ASCII 码转换为字符 19,low(),upper() 20,str(a,b,c)转换数字为字符串。a,是要转换的字符串。b是转换以后的长度,c是小数位数。 str(123.456,8,2) = 123.46 21,ltrim(), rtrim() 去空格 22,left(n), right(n), substring(str, start,length) 截取字符串 23,charindex(子串,母串),查找是否包含。返回第一次出现的位置,没有返回0 24,patindex('%pattern%', expression) 功能同上,可是使用通配符 25,replicate('char', rep_time), 重复字符串 26,reverse(char),颠倒字符串 27,replace(str, strold, strnew) 替换字符串 28,space(n), 产生n个空行 29,stuff(), SELECT STUFF('abcdef', 2, 3, 'ijklmn') ='aijklmnef', 2是开始位置,3是要从原来串中删除的字符长度,ijlmn是要插入的字符串。 30,3,类型转换函数: 31, 32,cast, cast( expression as data_type), Example: 33,SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales FROM titles WHERE CAST(ytd_sales AS char(20)) LIKE '3%' 34,convert(data_type, expression) 35,4,日期函数 36, 37,day(), month(), year() 38,dateadd(datepart, number, date), datapart指定对那一部分加,number知道加多少,date指定在谁的基础上加。datepart的取值包括,

SqlServer存储过程基本语法

动态语句基本语法 1 :普通SQL语句可以用exec执行 Select * from tableName exec('select * from tableName') exec sp_executesqlN'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL declare @fnamevarchar(20) set @fname = 'FiledName' Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。exec('select ' + @fname + ' from tableName') -- 请注意加号前后的单引号的边上加空格 当然将字符串改成变量的形式也可 declare @fnamevarchar(20) set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) set @s = 'select ' + @fname + ' from tableName' exec(@s) -- 成功 exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) set @s = 'select ' + @fname + ' from tableName' exec(@s) -- 成功 exec sp_executesql @s -- 此句正确 3. 输出参数 declare @numint, @sqlsnvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls) --如何将exec执行结果放入变量中? declare @numint, @sqlsnvarchar(4000) set @sqls='select @a=count(*) from tableName ' execsp_executesql @sqls,N'@aint output',@num output select @num 1 :普通SQL语句可以用Exec执行例: Select * from tableName Exec('select * from tableName')

SQL Server外关键字约束的定义

SQL Server外关键字约束的定义 SQL Server外关键字约束的重要性不言而喻,下面就让我们一起来了解一下应该如何定义SQL Server外关键字约束. 兰州中研SQL Server外关键字约束定义了表之间的关系.当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合哪个表中哪些列相关联.这样,当在定义SQL Server主关键字约束的表中更新列值,时其它表中有与之相关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新.外关键字约束的作用还体现在,当向含有外关键字的表插入数据时,如果与之相关联的表的列中无与插入的外关键字列值相同的值时,系统会拒绝插入数据.与主关键字相同,不能使用一个定义为TEXT或IMAGE数据类型的列创建外关键字.外关键字最多由16个列组成. 定义外关键字约束的语法如下: CONSTRAINT constraint_name FOREIGN KEY(column_name1[,column_name2,…,column_name16]) REFERENCES ref_table[(ref_column1[,ref_column2,…,ref_column16])] [ON DELETE{CASCADE|NO ACTION}] [ON UPDATE{CASCADE|NO ACTION}]] [NOT FOR REPLICATION] 各参数说明如下: REFERENCES 指定要建立关联的表的信息. ref_table 指定要建立关联的表的名称. ref_column 指定要建立关联的表中的相关列的名称. ON DELETE{CASCADE|NO ACTION} 指定在删除表中数据时,对关联表所做的相关操作.在子表中有数据行与父表中的对应数

SQLSERVER函数大全

SQL SERVER函数大全 SQL SERVER命令大全 SQLServer和Oracle的常用函数对比 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小) S:select floor(-1.001) value O:select floor(-1.001) value from dual 4.取整(截取) S:select cast(-1.002 as int) value O:select trunc(-1.002) value from dual 5.四舍五入 S:select round(1.23456,4) value 1.23460 O:select round(1.23456,4) value from dual 1.2346 6.e为底的幂 S:select Exp(1) value 2.7182818284590451 O:select Exp(1) value from dual 2.71828182 7.取e为底的对数 S:select log(2.7182818284590451) value 1 O:select ln(2.7182818284590451) value from dual; 1 8.取10为底对数 S:select log10(10) value 1 O:select log(10,10) value from dual; 1 9.取平方 S:select SQUARE(4) value 16 O:select power(4,2) value from dual 16

sql server约束

对于SQL Server中的约束,想必大家并不是很陌生。但是约束中真正的内涵是什么,并不是很多人都很清楚的。本文以详细的文字来介绍了什么是约束,以及如何在数据库编程中使用和使用这些约束,来达到更好的编程效果。(本文部分内容参考了SQL Server联机手册) 内容 数据完整性分类 实体完整性 域完整性 引用完整性 用户定义完整性 PRIMARY KEY约束 DEFAULT约束 CHECK约束 UNIQUE约束 FOREIGN KEY约束 正文 在数据库管理系统中,保证数据库中的数据完整性是非常重要的。所谓数据完整性,就是指存储在数据库中数据的一致性和正确性。约束定义关于列中允许值的规则,是强制完整性的标准机制。使用约束优先于使用触发器、规则和默认值。查询优化器也使用约束定义生成高性能的查询执行计划。 SQL Server联机丛书中,将数据完整性解释如下:“存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。”强制数据完整性可确保数据库中的数据质量。 例如,如果输入了employee_id 值为123 的职员,那么该数据库不应允许其他职员使用同一ID 值。如果计划将employee_rating 列的值范围设定为从1 到5,则数据库不应接受6。如果表有一dept_id 列,该列存储职员的部门编号,则数据库应只允许接受公司中的有效部门编号。 数据完整性分类 在SQL Server中,根据数据完整新措施所作用的数据库对象和范围不同,可以将数据完整性分为以下几种。

实体完整性 域完整性 引用完整性 用户定义完整性 SQL Server联机丛书中指明:“对表进行计划有两个重要步骤:标识列的有效值和确定如何强制列中的数据完整性。” 实体完整性 实体完整性简单的说,就是将表中的每一行看作一个实体。实体完整性要求表的标示符列或主键的完整性。可以通过建立唯一索引、PRIMARY KEY约束、UNIQUE约束,以及列的IDENTITY属性来实施实体完整性。 域完整性 域完整性是指给定列的输入有效性。要求表中指定列的数据具有正确的数据类型、格式和有效的数据范围。强制域有效性的方法有:限制类型(通过数据类型)、格式(通过CHECK 约束和规则)或可能值的范围。域完整性通过FOREIGN KEY 约束、CHECK 约束、DEFAULT 定义、NOT NULL 定义和规则来实现。 引用完整性 引用完整性又称参照完整性。引用完整性维持被参照表和参照表之间的数据一致性,他通过主键(PRIMARY KEY)约束和外键(FOREIGN KEY)约束来实现。引用完整性确保键值在所有表中一致。这样的一致性要求不能引用不存在的值,如果键值更改了,那么在整个数据库中,对该键值的所有引用要进行一致的更改。在被参照表中,当其主键值被其他表所参照时,该行不能被删除也不允许改变。在参照表中,不允许参照不存在的主键值。 强制引用完整性时,SQL Server 禁止用户进行下列操作: 当主表中没有关联的记录时,将记录添加到相关表中。 更改主表中的值并导致相关表中的记录孤立。 从主表中删除记录,但仍存在和该记录匹配的相关记录。

SQLSERVER数据库、表的创建及SQL语句命令

SQLSERVER数据库、表的创建及SQL语句命令 SQLSERVER数据库,安装、备份、还原等问题: 一、存在已安装了sql server 2000,或2005等数据库,再次安装2008,会出现的问题 1、卸载原来的sql server 2000、2005,然后再安装sql server 2008,否则经常sql server服务启动不了 2、sql server服务启动失败,解决方法: 进入sql server configure manager,点开Sql server 网络配置(非sql native client 配置),点sqlzhh(我sqlserver 的名字)协议,将VIA协议禁用。再启动Sql Server服务,成功 如图: 二、在第一次安装SQLSERVER2008结束后,查看安装过程明细,描述中有较多项插件或程度,显示安装失败。 解决方法:

1、重新启动安装程度setup.exe,选择进行修复安装,至完成即可。 三、先创建数据库XXX,再进行还原数据库时,选择好备份文件XXX.bak,确定后进行还原,会报如下图的错误。 解决方法: 选择好备份数据库文件后,再进入“选项”中,勾选“覆盖现在数据库”即可。

四、查看数据库版本的命令:select @@version 在数据库中,点击“新建查询”,然后输入命令,执行结果如下 五、数据库定义及操作命令: 按照数据结构来组织、存储和管理数据的仓库。由表、关系以及操作对象组成,把数据存放在数据表中。 1、修改数据库密码的命令: EXEC sp_password NULL, '你的新密码', 'sa' sp_password Null,'sa','sa'

SQLServer数据库入门学习总结

SQL Server数据库入门学习总结 经过一段时间的学习,也对数据库有了一些认识。 数据库基本是由表,关系,操作组成;对于初学者首先要学的: 1.数据库是如何存储数据的 表,约束,触发器 2.数据库是如何操作数据的 insert,update,delete T-sql 函数存储过程触发器 3.数据库是如何显示数据的 select SQLServer数据库学习总结 1.SQL基础 SQL Server2000安装、配置,服务器启动、停止,企业管理器、查询分析器 第一代数据库--网状数据库和层次数据库;第二代数据库--关系数据库 数据库(DB);数据库管理系统(DBMS);数据库系统(DBS) SQL Server 2000 提供了不同版本:企业版、标准版、个人版、开发版 SQL Server中的数据类型:整数:int,smallint,tinyint,bigint;浮点数:real,float,decimal;二进制:binary,varbinary;逻辑:bit;字符:char,nchar,varchar,nvarchar;文本和图形:text,ntext,image;日期和时间:datetime,smalldatetime;货币:money,smallmoney 数据库的创建和删除;数据库表的创建、修改和删除 数据完整性:实体完整性:Primary Key,Unique Key,Unique Index,Identity Column;域完整性:Default,Check,Foreign Key,Data type,Rule;参照完整性:Foreign Key,Check,Triggers,Procedure;用户定义完整性:Rule,Triggers,Procedure;Create Table中得全部列级和表级约束 SQL Server中有5种约束:主键约束(Primary Key Constraint)、默认约束(Default Constraint)、检查约束(Check Constraint)、唯一性约束(Unique Constraint)、外键约束(Foreign Key Constraint). 关系图 数据库设计的步骤:需求分析、概念结构设计、逻辑结构设计、数据库物理设计、数据库实施、数据库运行和维护 两个实体之间的联系:一对一(1:1)、一对多(1:n)、多对多(m:n) 实体关系模型-- E-R图

(整理)SQLServer数据库基本知识点.

SQL Server 数据库基本知识点一、数据类型

二、常用语句(用到的数据库Northwind) 查询语句 简单的Transact-SQL查询只包括选择列表、FROM子句与WHERE子句。它们分别说明所查询列、查询的 表或视图、以及搜索条件等。例如,下面的语句查询Customers 表中公司名称为“Alfreds Futterkiste”的ContactName字段与Address字段。 SELECT ContactName, Address FROM Customers WHERE CompanyName='Alfreds Futterkiste' (一) 选择列表 选择列表(select_list)指出所查询列,它可以就是一组列名列表、星号、表达式、变量(包括局部变量与全局变量)等构成。 1、选择所有列 例如,下面语句显示Customers表中所有列的数据: SELECT * FROM Customers 2、选择部分列并指定它们的显示次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 例如: SELECT ContactName, Address FROM Customers 3、更改列标题 在选择列表中,可重新指定列标题。定义格式为: 列标题as 列名 列名列标题如果指定的列标题不就是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:

SELECT ContactName as 联系人名称, Address as地址 FROM Customers 4、删除重复行 SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 SELECT DISTINCT(Country) FROM Customers 5、限制返回的行数 使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n就是 表示一百分数,指定返回的行数等于总行数的百分之几。 例如: SELECT TOP 2 * FROM Customers SELECT TOP 20 PERCENT * FROM Customers (二)FROM子句 FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 所属的表或视图。例如在Orders与Customers表中同时存在CustomerID列,在查询两个表中的CustomerID时应 使用下面语句格式加以限定: select * from Orders,Customers where Orders、CustomerID =Customers、CustomerID 在FROM子句中可用以下两种格式为表或视图指定别名: 表名as 别名 表名别名 select * from Orders as a,Customers as b where a、CustomerID =b、CustomerID SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 例如: select * from Customers where CustomerID in (select CustomerID from Orders where EmployeeID=4) 此例中,将SELECT返回的结果集合给予一别名CustomerID,然后再从中检索数据。 (三) 使用WHERE子句设置查询条件 WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据:

相关文档
最新文档