SqlServer - 知识点

SqlServer - 知识点,第1张

概述SQL简介 SQL全称Structured Query Language 结构查询语言SQL是用于访问和处理数据库的标准的计算机语言SQL对大小写不敏感DML数据 *** 作语言 Data Manipulation Language DML语句执行完成时,不会被自动提交,可以回滚DDL数据定义语言 Data Definition Language DDL语句执行完成时,会被自动提交,不能回 sql简介
sql全称Structured query Language 结构查询语言sql是用于访问和处理数据库的标准的计算机语言sql对大小写不敏感DML数据 *** 作语言	Data Manipulation Language	DML语句执行完成时,不会被自动提交,可以回滚DDL数据定义语言	Data DeFinition Language	DDL语句执行完成时,会被自动提交,不能回滚DCL数据控制语言	Date Control Language	DCL用来设置用户或者角色权限
sqlServer数据类型
整型	bigint		从 -2^63 到 2^63-1 的整型数据	int		从 -2^31 到 2^31-1 的整型数据	smallint		从 -2^15 到 2^15-1 的整数数据	tinyint		从 0 到 255 的整数数据	bit		1 或 0 的整数数据浮点型	decimal		从 -10^38+1 到 10^38–1 的固定精度和小数位的数字数据	numeric		功能上等同于decimal货币	money		货币数据值介于 -2^63 到 2^63-1,精确到货币单位的千分之十	smallmoney		货币数据值介于 -214,748.3648 到 +214,748.3647,精确到货币单位的千分之十日期	datetime		从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据	smalldatetime		从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据,精确到分钟字符串	char		固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符	varchar		可变长度的非 Unicode 数据,最长为 8,000 个字符	text		可变长度的非 Unicode 数据,最大长度为 2^31-1 个字符Unicode字符串	nchar		固定长度的 Unicode 数据,最大长度为 4,000 个字符	nvarchar		可变长度 Unicode 数据,其最大长度为 4,000 字符	ntext		可变长度 Unicode 数据,其最大长度为 2^30-1 个字符二进制字符串	binary		固定长度的二进制数据,其最大长度为 8,000 个字节	varbinary		可变长度的二进制数据,000 个字节	image		可变长度的二进制数据,其最大长度为 2^31-1 个字节其他的类型	cursor		游标的引用	table		一种特殊的数据类型,存储供以后处理的结果集	timestamp		数据库范围的唯一数字,每次更新行时也进行更新	uniqueIDentifIEr		全局唯一标识符GUID
运行命令
打开查询分析器	isqlw,前提是环境变量path有sql的Bin路径打开和关闭MSsqlServer服务	启动默认实例		net start mssqlserver	启动命名实例		net start mssql$NewData	关闭默认实例		net stop mssqlserver	关闭命名实例		new stop mssql$NewData
备份和还原数据库
备份库	backup database qnmis to disk='e:\qnmis20110101'还原库	restore database qnmis from disk='e:\qnmis20110101'
标识符
@	局部变量@@	全局变量#	局部临时对象##	全局临时对象
语法 distinct
取不重复的数据	select distinct Js_bh from d_xt_yh
newID()
随即取10条数据	select top 10 * from d_xt_yh order by newID()
top
规定要返回的记录的数目返回前两条记录	select top 2 * from d_xt_yh	select top 2 yh_bh,yh_mm from d_xt_yh返回前百分比记录	select top 50 percent * from d_xt_yh	select top 50 percent yh_bh,yh_mm from d_xt_yh
like
用于在 WHERE子句中搜索列中的指定模式%	替代一个或多个字符	以"标段"结尾,"标段"前面有一个或者多个字符		select * from d_xt_yh where yh_mc like '%标段'	以"标段"开始,"标段"后面有一个或者多个字符		select * from d_xt_yh where yh_mc like 'B%'_	仅替代一个字符	以"1标段"结尾,"1标段"前面有一个字符		select * from d_xt_yh where yh_mc like '_1标段'	以"A1标"开始,"A1标"后面有一个字符		select * from d_xt_yh where yh_mc like 'A1标_'[   ]	指定范围	[a-f]表示[abcdef]中的任何单个字符	以"1标段"结尾,"1标段"前面有一个字符,字符是abcdef任意一个		select * from d_xt_yh where yh_mc like '[a-f]1标段'	'abc[def]'		表示abcd,abce,abcf[^  ]	不属于指定范围的任何单个字符	以"1标段"结尾,字符不是bcdef任意一个		select * from d_xt_yh where yh_mc like '[^bcdef]1标段'
运算符
andorinis nullbetween andnotnot inis not nullnot between and
waitfor
等待10秒钟再查询	waitfor delay '00:00:10'	select * from d_dept等待到16时54分30秒再查询	waitfor time '16:54:30'	select * from d_dept需要注意	delay 最多24小时time 必须是 datetime 类型,且不允许指定 datetime 值的日期部分
排序
升序排列  	select * from dbo.d_xt_yh order by yh_bh asc  降序排列  	select * from dbo.d_xt_yh order by yh_bh desc  别名排序  	select yh_bh as '用户编号' from dbo.d_xt_yh order by '用户编号' desc  列位置排序  	select * from dbo.d_xt_yh order by 1 desc  多列排序  	select * from dbo.d_xt_yh order by yh_bh desc,jg_bh asc	
连接
left join	左表为基础,左表全部显示出来,右表只显示符合条件的记录,右表记录不足均为nullright join	右表为基础,右表全部显示出来,左表只显示符合条件的记录,左表记录不足均为nullinner join	不以左右表为基础,只显示左右表匹配的full join	不以左右表为基础,只显示左右表匹配的union	合并两个或多个SELECT语句的结果集
对表的 *** 作
创建表并带有自增列	create table d_emp(		emp_ID int IDentity(1,1) primary key,emp_name varchar(50),emp_age int	)删除表  	delete from d_emp 	truncate table d_emp  	drop table d_emp  增加列 	alter table d_emp add dept_ID int删除列  	alter table d_emp drop column dept_ID  修改列的定义  	alter table d_emp alter column emp_name varchar(100)  修改表列名  	exec sp_rename 'd_emp.emp_name','name','column'修改表名  	exec sp_rename 'd_emp','d_emp_tmp','object' 
创建临时表的几种方法
方法一	select * into #temp from d_emp方法二	insert into #temp	select * from d_emp方法三	insert into #temp	select 1,'李文超',2
判断
declare @cph varchar(20)if @cph in ('',null,'null')	begin		set @cph='陕a88888'	endelse 	begin 		set @cph='陕a12345' 	endselect @cph
case when
select emp_name,casewhen emp_age<18 then '未成年'when emp_age>=18 then '成年人'endas markfrom d_emp
循环
declare @count intdeclare @index intset @index=1select @count=count(*) from d_xt_yhselect IDentity(int,1,1) as number,* into #temp from d_xt_yhwhile @index<=@count	begin		select * from #temp where number = @index		set @index=@index+1	enddrop table #temp
约束
对于基本表而言约束分为列约束:列约束是对某一列的约束,包含在列定义中,不必指定列的名称表约束:不包含在列定义中,通常用于多个列一起进行约束,必须指定列的名称
主键约束
约束唯一标识数据库表中的每条记录增加1	create table d_emp(		emp_ID int primary key not null,emp_age int,dept_ID int	)增加2	create table d_emp(		emp_ID int not null,dept_ID int,primary key (emp_ID)	)增加3	create table d_emp(		emp_ID int not null,constraint pk_d_emp primary key (emp_ID)	)增加4	alter table d_emp add primary key (emp_ID)增加5	alter table d_emp	add constraint pk_d_emp primary key (emp_ID)删除1	alter table d_emp  	drop constraint pk_d_emp如果不知道某个表的主键名称可以通过下面语句进行查找	select name from sysobjects	where parent_obj=object_ID('d_emp') and xtype='pk'
复合主键
增加1	create table d_emp(		emp_ID int not null,emp_name varchar(50)		primary key (emp_ID,emp_name)	)增加2	create table d_emp(		emp_ID int not null,emp_name varchar(50)		constraint pk_d_emp primary key (emp_ID,emp_name)	)增加3	alter table d_emp	add constraint pk_d_emp primary key (emp_ID,emp_name)
外键约束
foreign key约束	仅引用位于同一服务器上的同一数据库表,跨数据库的引用必须通过触发器来实现	可引用同一表的其他列,此行称为自引用	还可以定义为引用另一张表的unique约束列级foreign key约束	references子句只能列出一个引用列,引用列必须和定义约束列数据类型相同表级foreign key约束	references 子句可以列出多个引用列,引用列的个数,数据类型必须和定义约束列相同在临时表中不可以使用foreign key约束增加1	create table d_emp(		emp_ID int not null,dept_ID int foreign key references d_dept(dept_ID)	)增加2	create table d_emp(		emp_ID int not null,foreign key (dept_ID) references d_dept(dept_ID)	)增加3	create table d_emp(		emp_ID int not null,constraint fk_d_emp foreign key (dept_ID) references d_dept(dept_ID)	)增加4	alter table d_emp add foreign key (dept_ID)	references d_dept(dept_ID)增加5	alter table d_emp	add constraint fk_d_emp foreign key (dept_ID)	references d_dept(dept_ID)删除1	alter table d_emp drop constraint fk_d_emp如果不知道某个表的外键名称可以通过下面语句进行查找	select name from sysobjects	where parent_obj=object_ID('d_emp') and xtype='f'
级联引用完整性约束
删除或者更新某一行,而该行被其他表外键所引用,则产生错误并回滚	alter table d_emp add foreign key (dept_ID) references d_dept(dept_ID)	on delete no action on update no action删除或者更新某一行,则也将子表行删除	alter table d_emp add foreign key (dept_ID) references d_dept(dept_ID)	on delete cascade on update cascade (2005特有)删除或者更新某一行,则子表行设置为空	alter table d_emp add foreign key (dept_ID) references d_dept(dept_ID)	on delete set null on update set null(2005特有)删除或者更新某一行,则子表行设置为默认值	alter table d_emp add foreign key (dept_ID) references d_dept(dept_ID)	on delete set default on update set default
检查约束
约束用于限制列中的值的范围增加1	create table d_emp(		emp_ID int not null,check (emp_age>18 and emp_age<60)	)增加2	create table d_emp(		emp_ID int not null,constraint chk_d_emp_emp_age check (emp_age>18 and emp_age<60)	)增加3	create table d_emp(		emp_ID int not null,dept_ID int		constraint chk_d_emp_emp_age check (emp_age>18 and emp_age<60)	)增加4	alter table d_emp add check (emp_age>18 and emp_age<60)增加5	alter table d_emp add constraint chk_d_emp_emp_age	check (emp_age>18 and emp_age<60)删除1  	alter table d_emp    	drop constraint chk_d_emp_emp_age  如果不知道某个表的检查约束名称可以通过下面语句进行查找  	select name from sysobjects	where parent_obj=object_ID('d_emp') and xtype='c'禁用检查约束	alter table d_emp	nocheck constraint all
默认约束
约束用于向列中插入默认值增加1	create table d_emp(		emp_ID int not null primary key,emp_name varchar(50) default '李文超',dept_ID int	)增加2	alter table d_emp add default('李文超') for emp_name增加3	alter table d_emp add constraint df_d_emp_emp_name 	default('李文超') for emp_name删除1    	alter table d_emp      	drop constraint df_d_emp_emp_name    如果不知道某个表的默认约束名称可以通过下面语句进行查找    	select name from sysobjects	where parent_obj=object_ID('d_emp') and xtype='d' 
唯一约束
唯一标识数据库表中的每条记录主键约束和唯一约束的区别在于	一个表中可以定义多个唯一约束但只能定义一个主键约束	唯一约束允许一个null值,主键约束不允许增加1	create table d_emp(		emp_ID int not null,emp_name varchar(50) unique,unique (emp_name)	)增加3	create table d_emp(		emp_ID int not null,constraint uq_d_emp_emp_name unique (emp_name)	)增加2	alter table d_emp add unique (emp_name)增加3	alter table d_emp add constraint uq_d_emp_emp_name unique (emp_name)删除1    	alter table d_emp      	drop constraint uq_d_emp_emp_name    如果不知道某个表的默认约束名称可以通过下面语句进行查找    	select name from sysobjects	where parent_obj=object_ID('d_emp') and xtype='uq'
NOT NulL约束
指定该约束列不接受NulL值
系统对象 系统表
sysobjects 在数据库每创建一个对象在表中占一行name 		sysname 	对象名 ID 			int 		对象标识号xtype 		char(2) 	对象类型	C = CHECK 约束	D = 默认值或 DEFAulT 约束	F = FOREIGN KEY 约束	L = 日志	FN = 标量函数	IF = 内嵌表函数	P = 存储过程	PK = PRIMARY KEY 约束(类型是 K)	RF = 复制筛选存储过程	S = 系统表	TF = 表函数	TR = 触发器	U = 用户表	UQ = UNIQUE 约束(类型是 K)	V = 视图	X = 扩展存储过程uID 		smallint 	所有者对象的用户IDparent_obj 	int 		父对象的对象标识号(例如,对于触发器或约束,该标识号为表ID)crdate 		datetime 	对象的创建日期
系统存储过程
更新对象的名称	execute sp_rename 'd_dept','d_dept_new'查看可用的数据库	execute sp_helpdb查看对象定义内容	execute sp_helptext 'v_dept'强制在下次执行存储过程对其重新编译	execute sp_recompile 'p_dept'刷新视图	execute  sp_refreshvIEw 'v_emp'查看视图的特征	execute sp_help 'v_emp'查看视图所依赖的对象	execute sp_depends 'v_emp'查看表中的索引	execute sp_helpindex 'd_dept'启动 itlwc数据库 直接递归触发器	execute sp_dboption 'itlwc','recursive_triggers',true
系统函数
object_ID('')	返回对象的ID	得到d_emp表中主键约束		select name from sysobjects		where parent_obj=object_ID('d_emp') and xtype='fk'
对象 视图
视图不是真实存在的基础表而是一个虚拟表,视图所对应的数据并不实际以视图结构存储在数据库中,而是存储在视图所引用的表中视图的分类	标准视图:	索引视图:	分区视图:视图的作用	集中数据,定制数据,合并分隔数据,安全机制视图最多1024列创建视图  	create vIEw v_emp  	as   	    select * from d_emp  删除视图  	drop vIEw v_emp  对视图的 *** 作	insert into v_dept values(1,'开发部')	insert into v_dept values(2,'财务部')	update v_dept set dept_name='人事部' where dept_ID=2	delete from v_dept where dept_ID=2
存储过程
存储过程是存放在服务器端数据库中的子程序存储过程在第一次执行时,进行语法检测和编译,执行后他的执行计划就驻留在高速缓存中,用于后续调用存储过程的分类	系统存储过程:由系统提供,存放在MASTER数据库中,前缀为SP	用户存储过程:由用户创建系统存储过程主要包含	目录存储过程	复制类存储过程	安全管理类存储过程	分布式查询存储过程自定义的存储过程,应避免使用SP_为前缀.因为接收到SP_开头的存储过程,sql SERVER 首先会在 MASTER 数据库中寻找存储过程,这会影响执行效率存储过程最多可以有2100个参数,最大为128MB不带参数的存储过程	create proc p_dept	as	select * from d_dept带输入参数的存储过程	create proc p_dept		@dept_ID int	as		select * from d_dept where dept_ID=@dept_ID带输入输出参数的存储过程	create proc p_dept		@dept_ID int,@dept_name varchar(50) output	as		select @dept_name=dept_name from d_dept where dept_ID=@dept_ID存储过程中执行存储过程	create proc p_result		@dept_ID int	as		declare @emp_name varchar(50)		exec p_dept 			@dept_ID,@emp_name output		select @emp_name
函数
函数是由一个或者多个T-SQL语句组成的子程序,用于封装代码便于重新使用自定义函数只能返回单一值或者表函数不能对基表进行DML语句根据函数返回类型不同,将用户自定义的函数分为三种类型	标量函数:函数返回一个确定类型的标量值	内联表函数:以表的形式返回一个返回值	多语句表值函数:标量函数和内联表函数的结合体增加标量函数	create function fn_getDeptname(@dept_ID int)		returns varchar(50)	as	begin	 	declare @dept_name varchar(50)		select @dept_name=dept_name from d_dept where dept_ID=@dept_ID		return @dept_name	end执行标量函数	select dbo.fn_getDeptname(1)删除标量函数	drop function fn_getDeptname增加内联表函数	create function if_d_dept(@dept_ID int)		returns @temp table(ID int,name varchar(50))	as	begin		insert into @temp		select dept_ID,dept_name from d_dept where dept_ID=@dept_ID	 return	end执行内联表函数	select * from if_d_dept(1)删除内联表函数	drop function if_d_dept增加多语句表值函数	create function fnif_d_dept(@dept_name varchar(50))		returns @temp table(ID int,name varchar(50))	as	begin		--函数中使用临时表		declare @result table(ID int,name varchar(50))		insert into @result		select dept_ID,dept_name from d_dept where dept_name=@dept_name			insert into @temp		select * from @result	 return	end执行多语句表值函数	select * from fnif_d_dept('开发部')删除多语句表值函数	drop function fnif_d_dept
触发器
触发器是一种与数据表紧密关联的特殊存储过程当数据表进行 insert delete update 事件发生时,所设置的触发器就会自动执行,保持数据库的完整性触发器在数据库以独立的对象存储(存储过程通过其他程序启动),触发器不能直接调用,只能通过事件来启动触发器不能传递或者接收参数触发器的类型	DML触发器:在数据库数据发生 *** 作语言(DML)事件时将调用 DML 触发器		after 触发器:在执行了 insert delete update 语句之后,after 触发器才会被激发			用于对变动数据进行检查,如果错误,将拒绝后者回滚			after 触发器只能在表上指定			每个触发 *** 作可以包含多个触发器			插入和删除表中的 text,ntext,image 列引用,不能使用		instead of 触发器:数据变动之前被激活,转而去执行触发器定义的 *** 作,并不再执行原来sql *** 作			instead of 触发器可以指定在视图和表上			每个触发 *** 作只能包含一个触发器					DDL触发器(2005):当服务器或者数据库发生数据定义语言(DDL)事件,将调用触发器		DLL触发器主要有,数据库作用域和服务器作用域		DLL触发器用来管理任务,例如审核和控制数据库 *** 作触发器的作用	DML触发器可以实现级联更改,保证数据的完整性触发器两个特殊虚表	inserted和deleted表,系统在内存中创建两张表,不存储在数据库中,两张表是只读的	这两表被触发的表结构相同,当触发完成之后两张表被删除	inserted 表存放增加的记录和存放更新后的记录	deleted 表存放被删除的记录和存放更新之前的记录测试特定列的 update  *** 作	update 对某一个列的 update	columns_update 对多个列的 update	返回一个布尔值嵌套触发器	当某一个触发器执行,能够触发另外一个触发器执行,这种情况称为嵌套触发器	如果一个触发器修改一张表,而这张表已经有了其他触发器,这时就使用了嵌套触发器	由于触发器在事务中执行,如果在一组嵌套触发器的任意层发生错误,则整个事务将被取消,回滚	触发器最多嵌套32级递归触发器	直接递归:		默认情况sql server是禁止 after 触发器的直接递归		如果需要开启,sp_dboption 'itlwc',true	间接递归触发器的激发顺序	execute sp_settriggerorder 'tigger_curd1','first','insert'	execute sp_settriggerorder 'tigger_curd2','last','insert'创建 after 触发器	create table d_dept(		dept_ID int,dept_name varchar(20)		constraint pk_d_dept primary key (dept_ID)	)	create table d_deptBackup(		operate varchar(20),operateTime smalldatetime,dept_name varchar(20)	)	--判断是否存在	if(object_ID('tigger_curd','tr') is not null)		drop trigger tigger_curd	go	create trigger tigger_curd	on d_dept		after insert,delete,update	as		insert into d_deptBackup		select '插入数据',getDate(),dept_ID,dept_name from inserted		insert into d_deptBackup		select '删除数据',dept_name from deleted创建 after delete 触发器	if(object_ID('tigger_curd','tr') is not null)		drop trigger tigger_curd	go	create trigger tigger_curd	on d_dept		after delete	as		declare @rowcount int		select @rowcount=@@rowcount	--当前删除 *** 作影响的记录数				if @rowcount>1			begin				rollback transaction	--回滚取消 *** 作				raiserror('一次只能删除一条记录',16,1)	--给出错误信息			end		declare @dept_name varchar(20)		set @dept_name = '开发部'		if(@dept_name in (select dept_name from deleted))		begin			rollback transaction	--回滚取消 *** 作			raiserror('不能删除 开发部 ',1)	--给出错误信息		end使用 update()	if(object_ID('tigger_curd','tr') is not null)		drop trigger tigger_curd	go	create trigger tigger_curd	on d_dept		after update	as		if(update(dept_ID) or update(dept_name))			begin				rollback transaction	--回滚取消 *** 作				raiserror('不允许更新该列信息',1)	--给出错误信息			end创建 instead of 触发器	create table emp2005(		emp_ID varchar(10),emp_name varchar(10)	)	create table emp2006(		emp_ID varchar(10),emp_name varchar(10)	)	create table emp2007(		emp_ID varchar(10),emp_name varchar(10)	)	create vIEw v_emp	as		select * from emp2005		union all		select * from emp2006		union all			select * from emp2007				if(object_ID('tigger_curd','tr') is not null)		drop trigger tigger_curd	go	create trigger tigger_curd	on v_emp		instead of insert	as		declare @emp_ID char(4)		select @emp_ID = substring(emp_ID,4) from inserted		if @emp_ID ='2005'			begin				insert into emp2005				select * from inserted			end		else if @emp_ID ='2006'			begin				insert into emp2006				select * from inserted			end		else if @emp_ID ='2007'			begin				insert into emp2007				select * from inserted			end		else			begin				rollback transaction	--回滚取消 *** 作				raiserror('插入记录emp_ID不正确',1)	--给出错误信息			end创建 递归触发器	insert into d_dept values(1001,'开发部')	insert into d_dept values(1002,'开发部')	insert into d_dept values(1003,'开发部')	insert into d_dept values(1004,'开发部')	insert into d_dept values(2001,'开发部')	insert into d_dept values(2002,'开发部')	insert into d_dept values(3001,'开发部')	if(object_ID('tigger_curd','tr') is not null)		drop trigger tigger_curd	go	--删除本身并且删除前一个和后一个	create trigger tigger_curd	on d_dept		after delete	as		declare @rowcount int		set @rowcount = @@rowcount		if @rowcount=1			begin				declare @up_dept_ID int				declare @down_dept_ID int				select @up_dept_ID=dept_ID,@down_dept_ID=dept_ID from deleted				set @up_dept_ID=@up_dept_ID-1				set @down_dept_ID=@down_dept_ID+1				delete from d_dept where dept_ID=@up_dept_ID				delete from d_dept where dept_ID=@down_dept_ID			end	--测试:最后只剩下 2001,2002,3001	delete from d_dept where dept_ID=1002
索引
概念  	索引是对数据库表中一个或多个列的值进行排序的结构	建立索引目的是对表中记录的查询或者排序	当表中有别设置为 unique 的字段时,sql server 会自动建立一个非聚集的唯一性索引  	当表中有 primary key 的字段时,sql server 会自动建立一个聚集索引索引的作用  	索引相当与书的目录,无需对数据库进行整体扫描,加快数据检索速度  	通过唯一索引,可以保证数据的唯一性  	可以加速表与表之间的连接  	在使用 order by 和 group by 子句进行检索数据,显著减少查询中排序和分组的时间  	使用索引可以在检索数据的过程中使用优化隐藏器,提过系统的性能  使用索引	查询表中所有数据,使用索引是没有意义的  	索引列应该在 where 子句中频繁使用的列	当用户要检索字段的数据包含很多数值或者很多控制 NulL 时,为该列创建索引会大大提高速度	经常排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序速度	索引占用数据库空间,在设计数据库应该把索引空间考虑进去	尽量把表和他的索引存在不同的磁盘上,这样会提高查询速度	不给数据较少和数据较大但不经常查询的表建立索引  	多表连接查询的时候,最好能够为关联字段建立索引  	当表数据以查询为主导,更新相对少,则要多采用索引,增加检索速度  	当表数据更新为主导,查询相对少,则不要建立太多的索引,避免影响更新的速度	如果对表进行大量更新时,可以先销毁索引,等数据更新完成之后再创建索引  	要在表的更新速度与查询速度之间寻求一个平衡点索引分类	聚集索引:		是按照数据存放的物理位置为顺序的		也就是说改变了表中数据存放的物理位置		对于多行检索的检索很快		在插入新行或者更新聚集索引一部分列时,DBMS将自动重新排序	非聚集索引:		独立于数据行的结构		非聚集索引包含键值和行定位器		对于单行的检索很快		一个表中可以创建多个非聚集索引,sql Server 查询优化器会自动决定使用哪个索引  创建简单索引  	create index index_d_dept  	on d_dept(dept_name)  创建唯一索引  	create unique index index_d_dept  	on d_dept(dept_name)  创建多列索引  	create unique index index_d_dept  	on d_dept(dept_ID,dept_name)  删除索引  	drop index d_dept.index_d_dept 禁用索引(2005)	alter index index_d_dept	on d_dept disable启用索引(2005)	alter index index_d_dept	on d_dept rebuild重命名索引	execute sp_rename 'd_dept.index_d_dept','d_dept.index_d_dept_new','index'查看表中的索引	execute sp_helpindex 'd_dept'
自定义数据类型
增加自定义数据类型	execute sp_addtype lwctype,'varchar(60)','not null'删除自定义数据类型	execute sp_droptype lwctype
总结

以上是内存溢出为你收集整理的SqlServer - 知识点全部内容,希望文章能够帮你解决SqlServer - 知识点所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1177156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存