版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL语句基本概念及定义、更新操作
SQL语言概述结构化查询语言SQL(StructuredQueryLanguage)是一种包括数据定义、数据操纵和数据控制三方面功能的语言。由于它功能丰富、使用方式灵活、语言简洁易学等突出优点,在计算机工业界和计算机用户中备受欢迎。目前SQL语言已经被确定为关系数据库系统的国际标准,被绝大多数的商品化关系数据库系统所采用。第一个SQL标准,由ANSI(AmericanNationalStandardsInstitute,美国国家标准协会)于1986年10月制定,标准文本为ANSIX3.135一1986,简称为SQL86。1989年作了少许改进,推出的版本为ANSIX3.135—1989,简称为SQL89。1992年,由ANSI和ISO(InternationalOrganizationforStandardization,国际标准化组织)合作,对SQL89作了较大改动和完善,推出的版本为ANSIX3.135-1992,简称为SQL92,也被称之为SQL2,这是目前绝大多数商用RDBMS支持的版本。1999年推出SQL99,也被称作SQL3,表示是第三代SQL语言,是在SQL92的基础上扩展而成的。目前大多数商用RDBMS都遵循SQL92的大部分特性,同时为了提高自身的系统性能,还提供了特定的、非SQL标准的功能。为此大家在使用不同的关系数据库管理系统时,需参照其相应的RDBMS技术手册。下面将以微软的SQLServer2005关系数据库系统为背景,来介绍SQL语言的一些基本特征。
SQLServer2005下的数据类型可以在“联机丛书”的索引中通过键入“数据类型”来查询其详细资料,下面给出实际应用中经常用到的数据类型:
bigint从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据(所有数字)。
int从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据(所有数字)。
smallint从-2^15(-32,768)到2^15-1(32,767)数据。
tinyint从0到255的整数数据。
decimal从-10^38+1到10^38-1的固定精度和小数位的数字数据。
datetime从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒(或3.33毫秒)。
smalldatetime从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。
char固定长度的非Unicode字符数据,最大长度为8,000个字符。
varchar可变长度的非Unicode数据,最长为8,000个字符。SQLServer2005下的常用数据类型
SQLServer2005下的常用函数
SQLServer2005下的函数可以在“联机丛书”的索引中通过键入“函数”来查询其详细资料,下面给出实际应用中经常用到的函数(注意有些函数的参数是以字为单位的):
convert数值类型转换函数
left返回字符串左边指定数目的子字符串
right返回字符串右边指定数目的子字符串
len返回字符串中包含字符的数目例子:len(‘张三丰’)len(‘abc’)
lower将字符串中的字母转为小写
upper将字符串中的字母转为大写
ltrim删除字符串左边的所有空格
rtrim删除字符串右边的所有空格
str将数值型数据转换为字符串
substring返回一个字符串指定位置的子串
dateadd返回给定日期值增加一个时间间隔后的日期
datediff返回两个日期之间的时间间隔
datename返回日期的文本表示方式
datepart返回某数值对应的日期值
day返回日期值中天数的整数值
getdate返回当前系统日期
month返回日期值中月份的整数值
year返回日期值中年份的整数值SQL的数据定义关系模型中的关系,在RDBMS中被“具体化”为“表”。要对表中数据进行操纵(查询、插入、删除或修改表中的数据),首先应建立表的结构,即“表格”。附带地,还应定义好相关的完整性约束。下面将介绍建立和维护表结构的命令及语法。
创建表
1.利用SQLServer管理平台创建表在SQLServer管理平台中,展开指定的服务器和数据库,打开想要创建新表的数据库,右击表对象,并从弹出的快捷菜单中选择“新建表”选项,如图5-4所示。在图5-4的对话框中,可以对表的结构进行更改,设置主键及字段属性,使用SQLServer管理平台可以非常直观地修改数据库结构和添加数据。在表中任意行上右击,则弹出一个快捷菜单,如图5-6所示。设置字段属性对话框
新建表对话框
创建表
2.利用create命令创建表
使用create命令创建表非常灵活,它允许对表设置几种不同的选项,包括表名、存放位置和列的属性等。命令语法:createtable[database_name.owner.|owner.]table_name({column_definition|table_constraint}[,...n]
)语法说明:(1)在column_definition中的主要内容包括:列名、列类型、是否允许空值、初值和列级约束等;(2)table_constraint指的是设定表级约束,包括主键约束、唯一约束和外键约束等。
创建表
2.利用create命令创建表
其完整语法形式如下:
CREATETABLE
[database_name.[owner].|owner.]table_name
(
{<column_definition>|column_nameAScomputed_column_expression|<table_constraint>}[,…n])
[ON{filegroup|DEFAULT}][TEXTIMAGE_ON{filegroup|DEFAULT}]
<column_definition>::={column_name
data_type}
[COLLATE<collation_name>]
[[DEFAULTconstant_expression]
|[IDENTITY[(seed,increment)[NOTFORREPLICATION]]]]
[ROWGUIDCOL]
[<column_constraint>][...n]其中,各参数的说明如下:database_name:用于指定所创建表的数据库名称。owner:用于指定新建表的所有者的用户名。table_name:用于指定新建表的名称。column_name:用于指定新建表的列名。computed_column_expression:用于指定计算列的列值表达式。column_definition中的主要内容包括:列名、列类型、是否允许空值、初值和列级约束等;table_constraint指的是设定表级约束,包括主键约束、唯一约束和外键约束等。column_constraint:用于指定列约束ON{filegroup|DEFAULT}:用于指定存储表的文件组名。TEXTIMAGE_ON:用于指定text、ntext
和image列的数据存储的文件组。data_type:用于指定列的数据类型。DEFAULT:用于指定列的默认值。constant_expression:用于指定列的默认值的常量表达式、可以为一个常量或NULL或系统函数。IDENTITY:用于将列指定为标识列。Seed:用于指定标识列的初始值。Increment:用于指定标识列的增量值。NOTFORREPLICATION:用于指定列的IDENTITY属性,在把从其他表中复制的数据插入到表中时不发生作用,即不生成列值,使得复制的数据行保持原来的列值。ROWGUIDCOL:用于将列指定为全局惟一标识行号列(rowglobaluniqueidentifiercolumn)。COLLATE:用于指定表的校验方式。
创建表
2.利用create命令创建表
Table_name为新建立的表名。对于临时表,表名字符串长度不能超过116个字符,而永久表的表名字符串长度则不能超过128个字符。此外,在同一个数据库中,每个表所有者创建的表名必须保证唯一。
computed_column_expression指出计算列的定义表达式,计算列是一个虚拟列,它并不是存储在表中,而是由表中的其它非计算列(常规列)导出。计算列定义表达式可以为常规列、常量、变量、函数组成的表达式,但它不能由一个子查询构成。除了下面情况,计算列可以与常规列一样使用在SELECT列表、WHERE子句和ORDERBY子句中:
计算列不能用在索引的关键词列;
计算列不能作为PRIMARYKEY、UNIQUE、FOREIGNKEY或DEFAULT约束定义的一部分;
计算列不能用INSERT和UPDATE语句插入资料。
注意:①在建表语句中,不允许对计算列设置空值属性(NULL或NOTNULL)Createtablestudent(
snochar(8)notnull, namechar(10)notnull,
namelenaslen(name) sexchar(2)notnull,departmentchar(20)
constraintpk_idprimarykey(sno))
创建表
2.利用create命令创建表
示例:创建了一个学生信息表student,包括学号(主键)、姓名、性别、院系Createtablestudent(
snochar(8)notnull, namechar(10)notnull, sexchar(2)notnull,departmentchar(20)
constraintpk_idprimarykey(sno))作业1:创建了一个工人信息表worker,它包括工人编号(主键)、姓名、性别、出生时间、职位、工资和备注信息。备注:详细要求参考下表。列名数据类型是否为空备注numberchar(8)否工人编号namechar(8)否姓名sexchar(2)否性别birthdaydatetime否出生时间(精确到时分)Job_titlechar(12)是职位salarydecimal(7,2)否工资memoVarchar(255)是备注信息创建约束约束是SQLServer提供的自动保持数据库完整性的一种方法,它通过限制字段中数据、记录中数据和表之间的数据来保证数据的完整性。在SQLSERVER中,对于基本表的约束分为列约束和表约束。列约束是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名;表约束与列定义相互独立,不包括在列定义中,通常用于对多个列一起进行约束,与列定义用’,’分隔,定义表约束时必须指出要约束的那些列的名称。完整性约束的基本语法格式为:
[CONSTRAINTconstraint_name(约束名)]<约束类型>
约束不指定名称时,系统会给定一个名称。在SQLServer2005中有6种约束:主键约束(primarykeyconstraint)、惟一性约束(uniqueconstraint)、检查约束(checkconstraint)、默认约束(defaultconstraint)、外部键约束(foreignkeyconstraint)和空值(NULL)约束。
创建约束1.主键(PRIMARYKEY)约束
PRIMARYKEY约束用于定义基本表的主键,它是惟一确定表中每一条记录的标识符,其值不能为NULL,也不能重复,以此来保证实体的完整性。PRIMARYKEY与UNIQUE约束类似,通过建立唯一索引来保证基本表在主键列取值的唯一性,但它们之间存在着很大的区别:①在一个基本表中只能定义一个PRIMARYKEY约束,但可定义多个UNIQUE约束;②对于指定为PRIMARYKEY的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于UNIQUE所约束的唯一键,则允许为空。注意:不能为同一个列或一组列既定义UNIQUE约束,又定义PRIMARYKEY约束。PRIMARYKEY既可用于列约束,也可用于表约束。创建约束1.主键(PRIMARYKEY)约束
主键的创建操作方法有两种:SQLServer管理平台操作法和Transact-SQL语句操作法。(1)SQLServer管理平台操作法,如下图所示。创建约束1.主键(PRIMARYKEY)约束
(2)使用Transact-SQL语句操作法设置主键约束,其语法形式如下:
CONSTRAINTconstraint_namePRIMARYKEY[CLUSTERED|NONCLUSTERED](column_name)PRIMARYKEY用于定义表约束时,即将某些列的组合定义为主键,其语法格式如下:
CONSTRAINTconstraint_namePRIMARYKEY[CLUSTERED|NONCLUSTERED](column_name[,…n])示例:建立一个sc表,定义cno为主键
createtablesc( cnochar(5)notnull,
snochar(5)notnull, scorenumeric(3), constraintsc_primprimarykey(cno))
作业2:创建工人信息表(作业1),定义工人编号、姓名共同组成主键。创建约束2.
惟一性约束
惟一性约束用于指定一个或者多个列的组合值具有惟一性,以防止在列中输入重复的值。定义了UNIQUE约束的那些列称为唯一键,系统自动为唯一键建立唯一索引,从而保证了唯一键的唯一性。当使用惟一性约束时,需要考虑以下几个因素:使用惟一性约束的字段允许为空值;一个表中可以允许有多个惟一性约束;可以把惟一性约束定义在多个字段上;惟一性约束用于强制在指定字段上创建一个惟一性索引;默认情况下,创建的索引类型为非聚集索引。创建约束2.
惟一性约束
创建惟一性约束的方法有两种:通过SQLServer管理平台可以完成创建和修改惟一性约束的操作;使用Transact-SQL语句完成惟一性约束的操作。(1)通过SQLServer管理平台可以完成创建和修改惟一性约束的操作,如下图所示。
创建约束2.惟一性约束
创建惟一性约束的方法有两种:通过SQLServer管理平台可以完成创建和修改惟一性约束的操作;使用Transact-SQL语句完成惟一性约束的操作。
(2)使用Transact-SQL语句完成惟一性约束的操作,其语法形式如下:CONSTRAINTconstraint_nameUNIQUE[CLUSTERED|NONCLUSTERED]
(column_name[,…n])示例:创建一个学生信息表,其中name字段具有惟一性。createtablestudent(
snochar(8)notnull, namechar(10)notnullconstraintuk_identity
unique(name), sexchar(2)notnull,departmentchar(20)
, constraintpk_idprimarykey(sno))作业3:创建工人信息表(作业1),定义工人编号为主键,姓名字段具有惟一性。创建约束3.检查约束
检查约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。当使用检查约束时,应该考虑和注意以下几点:一个列级检查约束只能与限制的字段有关;一个表级检查约束只能与限制的表中字段有关;一个表中可以定义多个检查约束;每个CREATETABLE语句中每个字段只能定义一个检查约束;在多个字段上定义检查约束,则必须将检查约束定义为表级约束;当执行INSERT语句或者UPDATE语句时,检查约束将验证数据;检查约束中不能包含子查询。
创建约束3.检查约束
创建检查约束常用的操作方法有如下两种:使用SQLServer管理平台创建检查约束;用Transact-SQL语句创建检查约束。(1)使用SQLServer管理平台创建检查约束,如下图所示。创建约束3.检查约束
(2)用Transact-SQL语句创建检查约束。用Transact-SQL语句创建检查约束。其语法形式如下:
CONSTRAINTconstraint_nameCHECK[NOTFORREPLICATION](logical_expression)示例:建立一个sc表,定义score的取值范围为0到100之间。createtablesc(
cnochar(5),
snochar(5),scorenumeric(5,1)constraintscore_chkcheck(score>=0andscore<=100))作业4:创建工人信息表(作业1),定义工资的取值范围为3000到5000之间。创建约束4.默认(DEFAULT)约束
默认约束指定在插入操作中如果没有提供输入值时,则系统自动指定值。默认约束可以包括常量、函数、不带变元的内建函数或者空值。使用默认约束时,应该注意以下几点:
(1)每个字段只能定义一个默认约束;
(2)如果定义的默认值长于其对应字段的允许长度,那么输入到表中的默认值将被截断;
(3)不能加入到带有IDENTITY属性或者数据类型为timestamp(时间戳)的字段上;
(4)如果字段定义为用户定义的数据类型,而且有一个默认绑定到这个数据类型上,则不允许该字段有默认约束。创建约束4.默认(DEFAULT)约束
创建默认约束常用的操作方法有如下两种:使用SQLServer管理平台创建默认约束;创建默认约束的Transact-SQL语句操作法。
(1)使用SQLServer管理平台创建默认约束,如下图所示。创建约束4.默认(DEFAULT)约束
(2)创建默认约束的Transact-SQL语句操作法。其语法形式如下:
CONSTRAINTconstraint_nameDEFAULTconstraint_expression[FORcolumn_name]
示例:创建一个学生信息表,默认score为零、dept为计算机。createtablestudent(
snochar(8), namechar(10),sexchar(2), scoredecimal(4,2)notnull constraintdf_student_scoredefault0, departmentchar(20)notnull constraintdf_student_deptdefault'计算机')作业5:创建工人信息表(作业1),定义工资默认值为3000、职位为‘经理'。创建约束5.外部键约束外键(FOREIGNKEY)是用于建立和加强两个表数据之间的链接的一列或多列。外部键约束用于强制参照完整性。当使用外部键约束时,应该考虑以下几个因素:外部键约束提供了字段参照完整性;外部键从句中的字段数目和每个字段指定的数据类型都必须和REFERENCES从句中的字段相匹配;外部键约束不能自动创建索引,需要用户手动创建;一个表中最多可以有31个外部键约束;在临时表中,不能使用外部键约束;主键和外部键的数据类型必须严格匹配。创建约束5.外部键约束创建外部键约束常用的操作方法有如下两种:在SQLServer管理平台中添加外部键约束;使用Transact-SQL语句设置外部键约束。
(1)在SQLServer管理平台中添加外部键约束,在SQLServer管理平台中添加外部键约束。如下图所示。
创建约束5.外部键约束
(2)使用Transact-SQL语句设置外部键约束,其语法形式如下:
CONSTRAINTconstraint_nameFOREIGNKEY(column_name[,…n])
REFERENCESref_table[(ref_column[,…n])]例5-11建立一个sc表,定义sno为sc的外部键。createtablesc(
cnochar(8)
notnull,snochar(8)notnullconstraints_foreforeignkeyreferencesstudent(sno),scorenumeric(3),constraints_c_primprimarykey(cno))修改表
当数据库中的表创建完成后,可以根据需要改变表中原先定义的许多选项,以更改表的结构。用户可以增加、删除和修改列,增加、删除和修改约束,更改表名以及改变表的所有者等。命令语法:altertabletable_namealtercolumncolumn_name
data_type
[(precision[,scale])][null|notnull]|add
{column_definition|table_constraint}[,...n]|drop
{columncolumn_name|[constraint]constraint_name}[,...n]语法说明:(1)altercolumn用于修改表中原有列,可修改内容包括数据类型、大小和可空性;(2)add
{column_definition|table_constraint}用于增加新的列或新的表级约束;(3)drop
{columncolumn_name|[constraint]constraint_name}用于删除原有列或原有约束。修改表
示例:创建一个雇员信息表,然后在表中增加一个salary,jointime字段,删除表中的age字段,并且修改memo字段的数据类型。createtableemployees(idchar(8)primarykey,namechar(20)notnull,departmentchar(20)null,memochar(30)null,ageintnull)altertableemployeesaddsalary
decimal(8,2)notnull,jointime
datetimenotnullaltertableemployeesdropcolumnagealtertableemployeesaltercolumnmemovarchar(200)null作业6:在工人信息表(作业1)中增加地址(address)、补贴(subsidy)、入厂时间(jointime)列,要求补贴一列默认值为2000;删除表中的职位字段;修改备注字段的数据类型;改变表的主键为工人编号和姓名的联合主键。删除表
命令语法:droptabletable_name语法说明:要删除的表如果不在当前数据库中,则应在table_name中指明其所属的数据库和用户名(droptabledatabase.dbo.table_name
)。在删除一个表之前要先删除与此表相关联的表中的外部关键字约束。当删除表后,绑定的规则或者默认值会自动松绑。删除表操作会将表中所有数据删除,而且直接或间接地建立在该表上的视图,及相关授权等与此表有关的内容也会被自动撤销。由于其破坏性很大,因此在执行这类命令时,一定要非常小心。示例:删除employees表droptableemployees索引索引(index)是关于数据位置信息的关键字表,是数据库系统中的数据存取方法之一。利用索引,系统可较快地在磁盘上定位所需数据,而不需要在磁盘上从头到尾或从后往前,一个数据一个数据地匹配和查找,从而加快了数据查询的速度。索引的类型有:聚集(clustered)索引、非聚集(nonclustered)索引、唯一(unique)索引和普通索引。聚集索引:磁盘上表中数据与索引存储在相邻物理空间,并且表中行的物理顺序与索引的顺序一致。也就是说,表中的记录是按索引顺序存放的,表中数据一有变化,系统均须对表中数据重新排序。由于表中的数据在磁盘上是按索引顺序存放的,因此每张表最多只能建一个聚集索引。非聚集索引:与聚集索引不同,它不要求表中行的物理顺序与索引的顺序一致。唯一索引:该索引要求被索引的列不能有相同值出现。唯一索引可用来限定聚集索引和非聚集索引,如唯一的聚集索引、唯一的非聚集索引,表示限定这两类索引所索引的列不能有相同的值。这类索引适合于限定基于主键或候选键的聚簇或非聚集索引。普通索引:与唯一索引不同,普通索引允许在被索引列上的值出现重复。可以通过在查询条件中经常涉及的属性上建立各类索引以提高查询速度,到底在哪些列上建立索引,以及建立什么类型的索引,应当根据实际应用的情况来决定。比如可以在查询实时性要求较高的条件所涉及的属性上建立聚集索引,以达到最佳查询速度。一但建立好索引,系统会自动引用已存在的索引来加快查询速度,无须也不允许用户指明对索引的使用。应适当建立索引,索引会提高查询速度,但也会增加数据更新时的响应时间。索引除了可以在定义表时通过primarykey、unique等参数由系统自动创建之外,也可以通过createindex命令单独创建。创建索引命令语法:create[unique][clustered|nonclustered]indexindex_nameontable_name({column_name[asc|desc]}[,...n])语法说明:(1)索引的建立和删除,必须要有DBA权限或者是表的拥有者;(2)unique表示建立唯一性的索引;(3)clustered|nonclustered表示聚集索引或非聚集索引;(4)ontable_name表示为哪个表创建索引;(5)column_name[asc|desc]用于指定索引基于的列和索引排序方式。一个索引中最多可以指定16个列,但列的数据类型的长度和不能超过900个字节。
注意:数据类型为TEXT、NTEXT、IMAGE或BIT的列不能作为索引的列。由于索引的宽度不能超过900个字节,因此数据类型为CHAR、VARCHAR、BINARY和VARBINARY的列的列宽度超过了900字节,或数据类型为NCHAR、NVARCHAR的列的列宽度超过了450个字节时也不能作为索引的列。在使用索引创建向导创建索引时,不能将计算列包含在索引中,但在直接创建或使用CREATEINDEX命令创建索引时,则可以对计算机列创建索引。createindexpk_p_mainonproducts(p_id,p_name,sumvalue)--其中sumvalue
是一个计算列表达式为price*quantity示例:在employees中的有关列上建立索引。createuniqueindexemployees_nameonemployees(name)createindexemployees_departmentonemployees(department
)作业7:给工人信息表(作业1)的姓名列建立唯一性索引。创建索引完整命令语法:CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]
INDEXindex_nameON{table|view}column[ASC|DESC][,...n])
[WITH
[PAD_INDEX]
[[,]FILLFACTOR=fillfactor]
[[,]IGNORE_DUP_KEY]
[[,]DROP_EXISTING]
[[,]STATISTICS_NORECOMPUTE]
[[,]SORT_IN_TEMPDB]
]
[ONfilegroup]
各参数说明如下:UNIQUE
创建一个惟一索引,即索引的键值不重复。在列包含重复值时,不能建惟一索引。如要使用此选项,则应确定索引所包含的列均不允许NULL值,否则在使用时会经常出错。CLUSTERED
指明创建的索引为簇索引。如果此选项缺省,则创建的索引为非簇索引。NONCLUSTERED
指明创建的索引为非簇索引其索引。数据页中包含了指向数据库中实际的表数据页的指针。index_name
指定所创建的索引的名称。索引名称在一个表中应是惟一的,但在同一数据库或不同数据库中可以重复。table
指定创建索引的表的名称。必要时还应指明数据库名称和所有者名称。view
指定创建索引的视图的名称。视图必须是使用SCHEMABINDING选项定义过的,其具体信息请参见“视图创建”章节。ASC|DESC
指定特定的索引列的排序方式。默认值是升序(ASC)。column
指定被索引的列。如果使用两个或两个以上的列组成一个索引,则称为复合索引。创建索引PAD_INDEX
指定填充索引的内部节点的行数,至少应大于等于两行。PAD_INDEX选项只有在FILLFACTOR选项指定后才起作用。因为PAD_INDEX使用与FILLFACTOR相同的百分比。缺省时,SQLServer确保每个索引页至少有能容纳一条最大索引行数据的空闲空间。如果FILLFACTOR指定的百分比不够容纳一行数据S,QLServer会自动内部更改百分比。FILLFACTOR=fillfactor
FILLFACTOR
称为填充因子,它指定创建索引时,每个索引页的数据占索引页大小的百分比,fillfactor
的值为1到100。它其实同时指出了索引页保留的自由空间占索引页大小的百分比。即100-fillfactor。对于那些频繁进行大量数据插入或删除的表在建索引时应该为将来生成的索引数据预留较大的空间,即将fillfactor
设得较小,否则,索引页会因数据的插入而很快填满,并产生分页,而分页会大大增加系统的开销。但如果设得过小,又会浪费大量的磁盘空间,降低查询性能。因此,对于此类表通常设一个大约为10的fillfactor。而对于数据不更改的、高并发的、只读的表,fillfactor
可以设到95以上乃至100。
如果没有指定此选项,SQLServer默认其值为0。0是个特殊值,与其它小FILLFACTOR
值(如:1,2)的意义不同,其叶节点页被完全填满,而在索引页中还有一些空间。可以
用存储过程Sp_configure
来改变默认的FILLFACTOR值。IGNORE_DUP_KEY
此选项控制了当往包含于一个惟一约束中的列中插入重复数据时SQLServer所作的反应。当选择此选项时,SQLServer返回一个错误信息,跳过此行数据的插入,继续执行下面的插入数据的操作:当没选择此选项时,SQLServer不仅会返回一个错误信息,还会回滚(RollsBack)整个INSERT语句(关于回滚,请参见“数据库更新”章节中的“事务”一节)。DROP_EXISTING
指定要删除并重新创建簇索引。删除簇索引会导致所有的非簇索引被重建,因为需要用行指针来替换簇索引键。如果再重建簇索引,那么非簇索引又会再重建一次,以便用簇索引键来替换行指针。使用DROP_EXISTING选项可以使非簇索引只重建一次。STATISTICS_NORECOMPUTE
指定分布统计不自动更新。需要手动执行不带NORECOMPUTE子句的UPDATESTATISTICS命令。SORT_IN_TEMPDB
指定用于创建索引的分类排序结果将被存储到Tempdb
数据库中。如果Tempdb
数据库和用户数据库位于不同的磁盘设备上,那么使用这一选项可以减少创建索引的时间,但它会增加创建索引所需的磁盘空间。ONfilegroup
指定存放索引的文件组。创建索引索引的优点和不足索引有一些先天不足
1、系统要占用大约为表的1.2倍的硬盘和内存空间来保存索引;
2、更新数据的时候,系统必须要有额外的时间来同时对索引进行更新,以维持数据和索引的一致性。当然建立索引的优点也是显而易见的,在海量数据的情况下,如果合理的建立了索引,则会大大加强SQLS执行查询、对结果进行排序、分组的操作效率。实践表明,不恰当的索引不但于事无补,反而会降低系统性能。因为大量的索引在进行插入、修改和删除操作时比没有索引要花费更多的系统时间。在如下字段建立索引应该是不恰当的:
1、很少或从不引用的字段;
2、逻辑型的字段,如男或女(是或否)等。综上所述,提高查询效率是以消耗一定的系统资源为代价的,索引不能盲目的建立,必须要有统筹的规划,一定要在“加快查询速度”与“降低修改速度”之间做好平衡。索引使用原则:
1.逻辑主键使用惟一的成组索引,对系统键(作为存储过程)采用惟一的非成组索引,对任何外键列采用非成组索引。考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写;2.不要索引memo/note字段,不要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间;3.不要索引常用的小型表;4.一般不要为小型数据表设置过多的索引,如果经常有插入和删除操作就更不要设置索引,因为SQLS对插入和删除操作提供的索引维护可能比扫描表空间消耗的时间更多。
创建索引
类别对比项主键聚集索引用途强制表的实体完整性对数据行的排序,方便查询用一个表多少个一个表最多一个主键一个表最多一个聚集索引是否允许多个字段来定义一个主键可以多个字段来定义一个索引可以多个字段来定义是否允许null数据行出现如果要创建的数据列中数据存在null,无法建立主键。
创建表时指定的PRIMARYKEY约束列隐式转换为NOTNULL。没有限制建立聚集索引的列一定必须notnull.
也就是可以列的数据是null
参看最后一项比较是否要求数据必须唯一要求数据必须唯一数据即可以唯一,也可以不唯一。看你定义这个索引的UNIQUE设置。
(这一点需要看后面的一个比较,虽然你的数据列可能不唯一,但是系统会替你产生一个你看不到的唯一列)创建的逻辑数据库在创建主键同时,会自动建立一个唯一索引。
如果这个表之前没有聚集索引,同时建立主键时候没有强制指定使用非聚集索引,则建立主键时候,同时建立一个唯一的聚集索引如果未使用UNIQUE属性创建聚集索引,数据库引擎将向表自动添加一个四字节uniqueifier
列。
必要时,数据库引擎将向行自动添加一个uniqueifier
值,使每个键唯一。此列和列值供内部使用,用户不能查看或访问。主键和聚集索引的对比:删除索引
命令语法:dropindex
table_name.index_name语法说明:(1)只有索引的拥有者和具有DBA权限的用户,可以删除索引。索引删除后,有关索引的定义将从系统的数据字典(DD)中删除,并且包含在索引中的全部索引项将被清除。索引的删除,不会影响其它表和索引的正常使用,只会在某种程度上影响系统的性能。(2)在数据定义语言中,没有索引的修改功能。要修改索引,可以先删除要修改的索引,然后再创建一个同名的索引。备注:(1)索引的作用在于提高查询操作速度,但是这是以增加存储空间和降低数据更新效率为代价的,因此应删除那些不被引用或不常被引用的索引。(2)在被删除索引名前必须给出索引所属表名,中间用圆点分隔。示例:删除employees表中name列上的索引。
dropindexemployees.employees_name
作业8:删除工人信息表(作业1)姓名列上的索引。SQL的数据更新利用DDL数据定义语言建立起数据结构和完整性约束后,就可以利用DML数据操纵语言对数据库进行“插入”、“修改”和“删除”三种数据更新操作。 1.数据插入命令语法:格式一:insert[into]table_name|view_name[(column_list)]values
(data_values)格式二:insert[into]table_name|view_name[(column_list)]select_statement语法说明:(1)如果有列名表“column_list”,则要求其后的数据在顺序、个数和类型上,应与其一一对应;如果没有列名表,则要求插入的数据在顺序、个数和类型上,应
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 44838-2024绿色产品评价皮革、毛皮服饰产品
- 工地建材供货合同范例
- 纠正错字课程设计
- 天府新区信息职业学院《侵权法律实务》2023-2024学年第一学期期末试卷
- 天府新区信息职业学院《礼仪与形象塑造》2023-2024学年第一学期期末试卷
- 招商结算合同范例
- 工厂配件合同范例
- 招工修理合同范例
- 法院垫资合同范例
- 物业企业服务合同范例
- 殡葬行业的风险分析
- 下肢静脉血栓个案查房
- 《腰椎穿刺术》课件
- 北京市朝阳区2023-2024学年七年级上学期期末检测语文试卷+
- 拆迁赔偿保密协议
- 四年级艺术测评美术素养考试试题
- 办税服务外包投标方案(完整版)
- 电动葫芦作业吊装施工方案
- 一方出资金一方出资源合作协议范本
- 兔的饲养管理与疾病防治
- 基于单元的小学语文学习任务群设计案例
评论
0/150
提交评论