各数据库数据类型 | |||
ANSI SQL | SQL Server | MySql | Oracle 10 |
character | char | char | char |
character varying | varchar | varchar | varchar |
National character | nchar | char | nchar |
National character varying | nvarchar | varchar | nvarchar |
Integer | int | int | int |
Smallint | smallint | smallint | smallint |
Real | rael | real | real |
Decimal | decimal | decimal | decimal |
Date | date time | date | date |
Time | date time [W1] | time | date |
SQL Server 本身不支持正则表达式
M ysql : auto_increment 相当于 SQL Server 的 ..indentity(1,1) [W2]
//在数据库应用,我们经常要用到唯一编号,以标识记录。在MySQL中可通过数据列的AUTO_INCREMENT属性来自动生成。
连接列区别 | |
SQL Server、Access | select firstname + ' ' + lastname as fullname from ... |
MySql | select CONCAT( MemberId,firstname ,lastname ) from ... |
Oracle .DB2 | select firstname || ' ' || lastname as fullname from ... |
修改列区别 | |
Oracle 、MySql | alter table Mytable Modify Column2 varchar(20) Not Null
mysql 如果要改列名,用change alter table 表名 change 已有列名 新列名 新的列定义 |
其他 | alter table Mytable alter column Column2 varchar(20) Not Null |
SQL Server为每个独立的SQL语句都提供了隐含的事务控制,使得每个DML的数据操作得以完整提交或回滚,但是SQL Server还提供了显式事务控
事务可以嵌套
事务 区别 | |
SQL Server、MySql | begin transaction ... commit [W3] |
MySql 其他 | commit [W4] ... commit |
重命名表区别 | |
SQL Server | EXEC sp_rename ' ',' ' [W5] |
MySql | rename table tbl_name to new_tbl_name [W6] 如果要改列名,用 change alter table 表名 change 已有列名 新列名 新的列定义 |
Oracle | alter table xx rename to yy [W7] |
注释 | |
SQL Server | 用‘- -’关联到本行末尾 跨越多行注释/* */ |
Oracle | 用‘- -’关联到本行末尾 跨越多行注释/* */ |
MySql | 用‘#’字母直到本行结束 用‘- -’关联到本行 末尾 (符号后面要加个空格) 跨越多行注释/* */ |
存储 | |
SQL Server | create procedure 存储名 .... . exec 存储名 [W8] 执行存储过程时,区分大小写 [W9] |
Oracle |
|
MySql | create procedure 存储名 ( ) .... . call 存储名 ( ) |
创建 临时表:
CREATE TABLE #t(x INT PRIMARY KEY)
CREATE TABLE ##Globals -- 执行并重启Sql Server后,全局临时表##Globals会自动重建并一直持续到被显式删除。
Sql server 2005 快捷操作:
生成更改脚本
更改类型--生成表
右键--在编辑器中设计查询
打开模板 查询--指定模板参数值--创建自定义模板
视图--其他窗口--web 浏览器
查询--显示估计的执行计划 ctrl+L
数据收缩,分离
数据库 右键 任务 生成脚本
自动化管理:
使用本地系统账户不允许使用网络上的其他SQL SERVER,即无法执行多服务器作业
SQL SERVER Agent 服务---选择一个域用户
管理节点--维护计划
SQL SERVER 代理(展开) 创建 作业
警报
sql server2005 创建作业 计划任务
一个数据库维护计划就是一个作业,而作业是在SQL SERVER代理中的,
其实维护计划就是一些常用 作业 的向导
用户定义的错误事件警报,错误号从5001开始
主数据文件 : MDF
辅助数据文件 : NDF
事务日志文件 : LDF
注意:新数据库是Model 的副本
外模式 模式
[W10]
内模式
数据页面结构:
Page header( 页头 ) [W11] |
Date row1 Date row2 Date row3 ......
|
|
堆:
没有群集索引的表
主键索引:
定义一个主键将自动创建主键索引
主键索引是唯一索引的特殊类型
对架构添加索引会增加数据库的开销,因为索引需要持续的维护。
索引: 非聚集 索引, 聚集 索引。 ( sql server 2005还支持惟一索引 [W12] ,索引视图,全文索引,XML 索引)
一个表只能有一个 聚集索引
聚集 索引和 非聚集 索引 的根本区别是表记录的排列顺序和与索引的排列顺序是否一致, [W13] 创建聚集索引
聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。
聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。建议使用聚集索引的场合为:
a.此列包含有限数目的不同值;
b.查询的结果返回一个区间的值;
c.查询的结果返回某值相同的大量结果集。
非聚集索引 指 定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致,聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实 际的数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。非聚集索引比聚集索引层次多,添加记录不会引起数据顺序的重组。建议使用 非聚集索引的场合为:
a.此列包含了大量数目不同的值;
b.查询的结束返回的是少量的结果集;
c.order by 子句中使用了该列。
索引视图: 索引视图可通过以下方式提高查询性能: [W14]
• | 可预先计算聚合并将其保存在索引中,从而在查询执行时,最小化高成本的计算。 |
• | 可预先联接各个表并保存最终获得的数据集。 |
• | 可保存联接或聚合的组合。 |
索引视图还具有使用标准索引不能获得的其它性能优点
文件组织: [W15]
堆文件 (无序的文件,善于插入大批量数据,存取和删除一条记录必须线性查找,实删除的记录空间不可再用)
有序文件 (可以根据一个或多个字段的值来排序,二分查找,善于查找数据)
哈希文件
数据库设计总结: [W16]
animal | food |
猫 | 鱼 |
猫 | 骨头 |
... |
|
注意: 系统高峰期,考虑到系统结构,网络速度,安全性
聚集: 定义某一类型的组成部分
实体: 具有某些共同特性或行为的对象,可抽象为一个实体
实体、属性区分:
一般原则:
属性不能再分
属性不能与其他实体有联系(联系只发生在实体之间)
消除各分 E-R图合并时产生的冲突:
属性冲突 属性域冲突(值类型、聚会范围或取值集合不同)
属性取值范围冲突
结构冲突 “课程”在某一局部当作实体,在另一局部当作属性
“零件”在几个局部中,含有不同的属性
命名冲突
优化多个局部合并后全局E-R模型:
实体个数尽可能少
实体包含的属性尽可能少
实体间联系无冗余
一个实体转换为一个 关系模式 [W19] :
1:m m:1 m:n
( 一个表 ) ( 一个表 ) ( 一般三个表,即创建一个链接表 )
关系数据模型的优化通常以规范化理论为主导,并考虑系统的性能
对关系模式进行必要的分解,以提高数据的操作效率和存储空间的利用
数据完整性:
表级完整性 (主键...)
字段级完整性 (字段规范 ... )
关系级完整性 (关系表 ... )
完整性另一种分法:
实体完整性
参照完整性
用户定义完整性 (使用锁、时间戳等保征完整性,业务规则 business rule )
(外键实现机制,触发器实现机制, not null check default 等)
参与类型 :
表具有两种参与类型:
强制性的(在另一个表输入任何记录之前,这个表中必须至少存在一条记录);
可选的(不要求这个表存在任何记录);
//每个表的参与类型通常由表中数据相关联以及被使用的方式决定
参与程度
表中最少和最多有多少条记录可以和另一个表中的一条记录相关
如果 table A 中的一条记录最少可以和 table B 中的十条记录相关,那么 table A 的参与程度是 (1,10)
如果每个经纪人至少可以代理一个客户,但到多不能超过8个客户,则 clints表的 参与程度为 (1,8)
如果每个客户只能被指定给一个经纪人,则 agents 表的参与程度为(1,1)
每个表至少有一个候选键(CK,组合的称为CKK)
主键是从可用的候选键池中获得的(PK)
如果 x → y 但 y 不包含于 x, 则 x → y是非平凡 函数依赖 ( x 为决定因子)
如果 x → y,并且对于x 的任一个真子集 x' 都有 x' → y, 则完全函数依赖 x f y
如果 x' → y 成立,则部分 函数依赖 x p y
x → y(非平凡 函数依赖, y → x ),y → z ,则称 z 传递函数依赖于 x
即 x f y ,y f z ,则 x 传递 z
全码:候选码为整个属性组
包含在任意候选码中的 ... 为主属性, ... 为非主属性
需求分析方法 : 自底而下,自顶而上
数据字典 DD , 数据流程图 DFD
数据库优化总结:
通配符搜索的处理要比前面讨论的其他搜索花时间更长,不要过度使用
尽量不用游标,影响性能 ,很大
不要使用 select *
在程序编码时使用大数据量的数据库
尽量不要使用 TEXT 数据类型, 不易于查询,速度慢
一般地 Varchar 查以更好地处理数据
尽量不要使用临时表,除非必须那样做,/一般使用 子查询 可以代替临时表
如果需要删除或者插入大量的数据,删除索引并重建,效果更好
不要 true/false 字段创建索引
尽量避免使用触发器
采用视图
列命名技巧:
Customer 表的前缀是 C u_ ,
子段名 C u_name , C u_address. .
不要索引常用的小型表 (如果表中的字段数较少,每次从表中读取的记录百分比较大,则无好处)
不要索引 memo/notes 突出字段,而且不要索引大型文本字段
如果两实体存在多对一关系,而且还有可能转化为多对多关系。最好一开始就设置成多对多关系
有必须重复很多字段的表,可以用“代码”代替,这样减少容量
连接查询没有子查询效率高
列级完整性 约束定义:
not null
Default [W20]
Unique
Check
Primary key
Foreign key [W21]
表级完整性 : 以上除 not null , Default 不能 外, 其他的都可以设置 表级完整性
创建数据表时: [W22] clustered
创建PRIMARY KEY | UNIQUE 约束时,默认为 NONCLUSTERED 的 [W23]
Alter table qw
Add 列名
Drop column 列名
Alter column 列名 [W24]
Select from Where
Group by
Having [W25]
Order by
Select sno as shine from SC [W26]
select Cast( x as money ) from tabel1 [W27]
Convert ( 数据类型[长度],表达式 )
Select distinct sno from SC [W28]
Select sno from SC where not Sage >=20
Select sno from SC where Sage >=20 And Sage <=30 [W29]
Select sno from SC where Sage <20 And Sage >30 [W30]
Select sno from SC where sdept in (' 信息系', ' 数学系 ',' 计算机系 ') [W31]
字符 匹配 LIKE (like 子句中O racle 和 DB2是区分大小写的,而其他数据库不区分)
_ 任意一个字符 % 0个或多个字符 [ ] 任一个字符 [ ^ ] 不匹配里面的任一个字符
注意: Select * from course where Cname like 'DB/_system' [W32]
SQL语句中的模糊查找
搜索以PHP100开头:
SELECT * FROM teble WHERE title LIKE 'PHP100%'
搜索以PHP100结束:
SELECT * FROM teble WHERE title LIKE '%PHP100'
搜索包含PHP100:
SELECT * FROM teble WHERE title LIKE '%PHP100%'
Select sno,cno from sc Where grade is Null [W33]
对查询结果排序 :
Select …… Order by 列名 DESC | ASC [W34]
Select COUNT ( Distinct Sno ) from student [W35]
注意: 聚合 函数 不能出现在 where 子句中。但可以放在 having下
如:查询年龄最大的学生的姓名,如右写法是错的。 [W36]
Select Sno from SC Group By Sno Having COUNT(*) > 3 [W37]
多表连接查询 :
内连接 From 表1 [inner] join 表2 on 连接条件 [W38]
自连接(一种特殊的内连接,必须为表取别名) [W39]
外连接 From 表1 left |right|all [outer] join 表2 on 连接条件下 [W40]
/*SQL SERVER支持ANSI方式的外连接; join ... On ...
ORACLE支持 theta 方式的外连接 where ..=... */
连接查询没有子查询效率高
子查询 : [W41]
Where 表达式 [not] IN ( 子查询 ) ( 先执行内层再执行外层 )
Where 表达式 [not] Exists ( 子查询 ) [W42] ( 先执行外层再执行内层 )
注意:一般情况下,对于否定条件的查询都应该使用子查询来实现,而且应该将否定放在外层
更新表字段中的数据 : Update 表名 set (where)
更改表字段 : Alter 表名 alter
删除数据 :
无条件删除 delete from SC (SC 成空表 ) [W43]
有条件删除 delete from SC where ……
复制表 :
Select * into t2 from table1 [W44]
Select * into t2 from table1 where 1 = 2 [W45]
定义多源表视图 : [W46] create view < 视图名 > [视图列表名]
这样定义的视图一般只用于查询,不用于修改数据
可以在视图上再建立视图
查询语句中通常不包含 order by 和distinct 子句
在定义视图时要么指定全部视图,要么全部省略。但在如下情况必须明确指定组成视图的所有列名:
(某个目标列不是单纯的属性名,而是计算函数或者列表达式;
……
可以通过视图和基本表的 join 连接实现查询
Create view me(sno,average)
AS
Select sno,AVG(grade) from SC
Group by Sno [W47]
注意: D rop table 不能用于除去由 foreign key 约束的引用的表 必须先除去引用的 foreign key 约束或引用的表
注意:insert into 子句指出的属性顺序可以与表中顺序不同
插入多行数据 :
sql server
Insert into book1
Select 'dfffff','dfd',''dfdfdfdf,'dfdfd',''fdf,'df' union
Select 'dfffff','dfd',''dfdfdfdf,'dfdfd',''fdf,'df' union
Select 'dfffff','dfd',''dfdfdfdf,'dfdfd',''fdf,'df' /* 最后一行不用加 union*/
mysql
INSERT INTO `test` (`id`, `uid`, `regdate`, `remark`) VALUES
(1, '张三', '2008-07-02', '学生'),
(2, '李四', '2008-07-03', '学生'),
(3, '王五', '2008-07-02', '工人'),
(4, '赵六', '2008-07-01', '学生');
视图: create view
存储过程: [W48] create procedure 存储名 .... . exec 存储名 [W49]
执行存储过程时,区分大小写
系统存储过程:
sp_tables
sp_stored_procedures //查看存储过程df
sp_databases
sp_passwords // 修改而且只能修改标准登录的密码
sp_who //谁在使用数据库
sp_helptext ' 过程名,未加密的触发器名等 ' //查看定义存储过程等的文本命令格式
sp_help // 查看名称所有者,建立时间
sp_depends // 查看引用的表或列 (触发器等)
sp_depends ' 表名 ' //查看表被哪些存储过程调用
sp_rename 原存储过程名 , 新存储过程名 //修改名
sp_helptrigger // 查看触发器信息
sp_addumpdevice // 数据库备份
sp_addrolemember ///*添加数据库角色成员*/
sp_help_fulltext_tables // 获取已启用全文处理的所有表
sys.fulltext_catalogs //是一个系统视图 。 查询数据库的所有全文目录 [W50]
@@identity sqlserver中的全局变量(系统函数)
意思:返回上一个标示符的值 ,返回目前session,所有范围(scope)中,任何表所生成的最后一个IDENTITY值
例如:你曾经对某个表,有自增字段id int identity(1,1),有插入过一条纪录,id为77022,那么你
select @@identity as qq,qq 就等于 77022
存储过程进阶:
存储过程使用4种参数返回数据:
输出参数 , 可以返回数据(整型值或字符值),也可以返回游标变量 output [W51]
返回代码 始终是整型值 return [W52]
select 语句的结果集 SELECT 数据集返回值
可从存储过程外引用的全局游标 见SQL语言参考电子书
存储过程设置自动执行; (请勿从自动执行的存储过程中返回任何结果集,因为该存储过程由 sql server 而不是某位用户执行,所以结果集将无处可去)
sp_procoption 设置过程选项。 语法
sp_procoption[ @ProcName =] 'procedure'
,[ @OptionName =] 'option'
,[ @OptionValue =] 'value' (true或faule)
[W53]
alter proc 名称 AS ... //修改存储过程内容
打印东西:
print() // 发送错误信息,可给当事人发信息
raiserror() [W54] //可给任何人发信息
DML触发器、 DDL触发器 [W55] ( DDL触发器实例02 )
在 insert , update , delete 语句上创建DML触发
在 create , alter , drop , crant , revoke 语句上创建DDL触发
基本 触发器类型: [W56]
AFTER触发器(后触发);INSTEAD OF触发器(替代触发); [W57] .NET触发器
启用、禁用触发器: enable trigger ... on database
disable trigger ... on database
inserted表和deleted 表:
1. 执行 insert 操作,插入的到触发器表中的新行被插入到 inserted 表;
2. 执行 delete 操作,从触发器表中删除的行被插入到 deleted 表;
3. 执行 update 操作,先从触发器表中删除旧行,然后再插入新行。其中被删除的旧行被插入到 deleted 表中,插入的新行被插入到 inserted 表中。
AFTER触发器 和 INSTEAD OF触发器 功能比较 | ||
功能 | AFTER触发器 | INSTEAD OF触发器 |
适用范围 | 表 | 表和视图 |
每个表或者视图含触发 器数 | 每个触发动作(update,delete,insert) 含多个触发器 | 每个触发动作(update,delete,insert) 含一个触发器 |
级联引用 | 不应用任何限制 | 在作为级联引用完整性约束目标的表 上限制应用 |
执行 | 晚于: 1. 约束处理 2. 声明引用操作 3. insert 和 deleted 表的创建 4. 触发动作 | 早于: 约束处理 代替: 触发动作 晚于: insert 和 deleted 表的创建 |
执行顺序 | 可指定第一个和最后一个执行 | 不可用 |
在 instead 和 deleted 表中 引用 text 、 ntext 和 image 列 | 不允许 | 允许 |
如果发生约束侵犯,则永远不会执行after 触发器,因为这些触发器不能用于任何可能防止约束侵犯的处理
递归触发器 最多只能 32层 (嵌套触发器)
如果递归链中的第32个触发器激发第33个触发器,刚结果与发布Rollback 命令一样,一切东西都将被擦除
声明局部变量:
declare @××× int // 在一个批( go )内才可以用
声明多个变量:
declare @××× int,
@××× char(3)
变量赋值:
set @××× = ' ' [W58]
把查询结果赋给变量:
select @××× = (select ... from ...) [W59]
全部局部变量: (系统设置的,只能读,不能写)
@@version // 系统等信息
控制语句:
if ××× [W60]
begin
... ...
end
case 表达式
when 条件 then 结果
when 条件 then 结果
... ...
else
end
goto 跳转语句:
label1:
...
goto label1
waitfor 时间控制语句 [W61] 定时
BEGIN
waitfor delay '2:00' ; [W62]
execute sp_helpdb ;
END
GO
-- 指定在2小时后执行存储过程
并发控制:
基于锁的解决方案
锁定( locking ) 是一种预防性过程
锁(lock) 是一个与数据项相关的变量
常用锁定方案: [W63]
排他锁 (也称写锁 X锁 X- lock ) [W64]
共享锁 (也称读锁 S锁 S- lock ) 不允许写操作
锁级别 锁管理 死锁问题
基于时间戳的解决方案 (不出现死锁问题)
游标: [W66] 静态游标,动态游标,关键字游标
declare @qw cursor set @qw = cursor
sql server 2005支持3种游标实现:( 服务器游标( Transact-QL 游标、API 服务器游标 )、客户端游标 )
1. Transact-QL 游标,基于declare cursor 语法, 主要用于 Transact-QL脚本、存储过程和角 发器中;
2. 应用编程接口(API) 服务器游标,支持 OLE DB 、ODBC和DB - L ibrary 中的API游标 函数; [W67]
3. 客户端游标; (客户端游标不使用任何一个服务器游标功能, 客户端游标仅支持 只进的静态游标 ,不支持键集驱动游标和动态游标 )
下面是sql server 2005 支持的4种API服务器游标:
1. 静态游标(总是按照游标打开时的原样显示集,其结果集存储在tempdb 的工作表中,结果集中的行大小不能超过 sql server 表的最大行大小 ) static
2. 动态游标(与静态游标相对,反映结果集中所做的所有更改,所有用户做的全部update 、 insert 、 delete 语句均通过游标可见 ) [W68] dynamic
3. 只进游标(不支持滚动,只支持游标从头到尾顺序提取) fast_forward
4. 键集驱动游标 keyset
优化游标性能 :
1. 能避免时就避免使用游标
2. 除非必要否则不要使用static/insensitive游标。打开static游标会造成所有的行都被拷贝到临时表。
3. 除非必要否则不要使用keyset游标。和static游标一样,打开keyset游标会创建临时表。
4. 当处理单向的只读结果集时,使用fast_forward代替forward_only。
5. 使用read_only关键字定义只读游标。这样可以防止意外的修改,并且让服务器了解游标移动时不会修改行。
6. 善用 只进游标
游标说明见 SQL语言参考
fetch [W69]
游标的高级实例用法:
use student_course
go
alter table SC
add flag char(8)
go
declare @Score int
declare sc_cur cursor for select grade from SC for update of flag [W71]
open sc_cur
fetch next from sc_cur into @Score [W72]
while @@fetch_status = 0 [W73]
begin
if @score >= 90
update SC set flag = ' 优秀 ' where current of [W74] sc_cur
if ..
if ..
fetch next from sc_cur
end
close sc_cur [W75]
deallocate sc_cur [W76]
数据类型转换 (隐式转换,显式转换) [W77]
类型转换 函数: (显式转换)
CAST [W78]
CONVERT [W79]
权限:
grant 权限 on 表 to 用户 [W80]
revote 权限 on 表 from 用户 [W81]
deny 权限 on 表 to 用户 [W82]
创建架构(模式) create schema
在架构里创建权限等
创建文件组: 日志文件不能成为任何文件组织的成员,即日志文件只能单独存放
扩充数据库:
注意:如果你数据库已经用完分配给它的空间而又不能自动增长,则会出现 1105 错误
这里需要扩充数据库量
收缩数据库:
SQL语句修改数据库参数: alter database ... set AUTO_CLOSE ON
CREATE SCHEMA
创建一个架构,并且可以在概念上将其看作是包含表、视图和权限定义的对象
[W83]
数据库备份恢复:
2005 (完整) 数据库备份,差异数据库备份,事务日志备份
简单恢复,完全恢复,大容量日志记录恢复
备份模式之间的比较 | |||
恢复模式 | 优点 | 工作损失表现 | 能否恢复到即时点 |
简单恢复 | 允许高性能大容量复制操作 收回日志空间以使空间要求 最小 | 必须重做自最新的数据库 或差异备份后所发生的 更改 | 可以恢复到任何备份的结 尾处。随后必须重做更改 |
完全恢复 | 数据文件丢失或损坏不会导致工 作损失 可以恢复到任意即时点(例如, 应用程序或用户错误之前) | 正常情况下没有 如果日志损坏,则必须重做 自最新的日志备份后所发生 的更改 | 可以恢复到任何即时点 |
大容量日志记录 恢复 | 允许高性能大容量复制操作 大容量操作使用最小的日志空间 | 如果日志损坏,或者自最新 的日志备份后发生了大容量 操作,则必须重做自上次备 份后所做的更改 否则不丢失任何工作 | 可以恢复到任何备份的 结尾处,随后必须重做更 改 |
支持每种恢复模式的备份类型 | ||||
模式 | 备份类型 | |||
| 数据库 | 数据库差异 | 事务日志 | 文件或文件差异 |
简单恢复 | 必需 | 可选 | 不允许 | 不允许 |
完全恢复 | 必需(或文件备份) | 可选 | 必需 | 可选 |
大容量日志记录恢复 | 必需(或文件备份) | 可选 | 必需 | 可选 |
备份恢复数据库: [W84] backup restore 实例
backup database ××× to disk = ' d:/a.bak ' with INIT
restore database ××× from disk = ' d:/a.bak ' with replace
宿主: 能够请求 sql server 资源的个人、组、和进程,称为宿主 [W85]
服务器角色:
固定服务器角色的作用域在服务器范围内。它们存在于数据库之外,固定服务器角色的每个成员都能够向该角色中添加其他登录
2005 固定服务器角色 | |
角色 | 描述 |
Sysadmin | 执行 sql server 中的任何活动 |
Serveradmin | 配置服务器范围内的配置选项,以及关闭服务器 |
Setupadmin | 添加和删除链接的服务器,以及执行某些系统存储 过程(如sp_serveroption) |
securityadmin | 管理服务器范围内的安全设置(包括链接的服务器) 以及create database 权限。重置 sql server 身份验证 登录的密码 |
processadmin | 终止sql server 上运行的进程 |
dbcreator | 创建、改变、除去或者还原任何数据库 |
diskadmin | 管理磁盘文件 |
Bulkadmin | 允许非sysadmin 用户运行b ulkadmin 语句 |
数据库角色:
固定数据库角色在数据库级别定义,并在每个数据库中都存在。 db_owner 和 db_security 管理员角色的成员可以管理固定数据库角色的成员身份;但是,只有 db_owner 角色可以将其他用户添加到 db_owner 固定数据库角色中
2005 固定数据库角色 | |
角色 | 描述 |
db_owner | 执行数据库中的所有维护和配置活动 |
db_accessadmin | 添加或删除 windowds 用户、组和 sql server 登录的 访问权限 |
db_datareader | 读取所有用户表中的所有数据 |
db_datawriter | 添加、删除或更改所有用户表中的数据 |
db_ddladmin | 在数据库中运行任何数据定义语言(DLL)命令 |
db_securityadmin | 修改角色成员身份并管理权限 |
db_backupoperator | 备份数据库 |
db_denydatareader | 无法读取数据库用户表中的任何数据 |
db_denydatawriter | 无法添加、修改或删除任何用户表或视图中的数据 |
sql server 2005 创建登录名:
右键单击“ 安全性 ”文件夹,指向“ 新建 ”,然后单击“ 登录名 ”
VS 2005 SQL server 2005 安装顺序:
最好是 先 SQL server 2005 再装VS 2005 [W87]
更改SQL server 服务所使用的账户和密码:
SQL server配置管理器
账号的密码管理:
定期更改密码,数据库管理员应该定期查看是否有不符合密码要求的账号 [W88]
guest 用户账号。 没有数据库用户的用户能够通过此账号访问数据库,如果决定使用此账号,管理员就应该给它分配一个合适的权限
public 角色权限。 此角色包含所有数据库用户账号和那些角色从属关系不能改变的用户账号。注意给此角色分配哪种权限
系统 数据库:
master ( 控制用户数据库和SQL server 操作,记录 SQL server 实例的所有系统级信息,包括存储用户账户、可配置的环境变量、系统错误消息等信息 ) [W89]
model ( 用于SQL server 代理计划警报和作业 )
msdb ( 所有数据库实例的模板,每次启动sql server 时都会创建 tempdb 数据库 )
tempdb ( 用于保存时时对象或中间结果集 )
resource ( 隐藏了的 )
分离数据库 附加数据库
用户定义函数的分类: 见 (SQL语言参考)
标题函数: 也叫数值型函数,返回一个确定类型的数值
内联(单语句)表值型函数: 以表的形式返回一个值,相当于一个参数化的视图
多语句表值型函数: 上面两种函数的结合体,返回值是一个表,可以进行多次查询,对数据进行多次筛选与合并,弥补了内联表值型函数的不足
SQL Server系统表sysobjects [W90] sys.objects (Transact-SQL)参考网址
在大多数情况下,对你最有用的两个列是sysobjects.name和sysobjects.xtype。前面一个用来列出待考察对象的名字,而后一个用来定义对象的类型,其代码如下:
C:检查约束。
D:默认的约束
F:外键约束
L:日志
P:存储过程
PK:主键约束
RF:复制过滤存储过程
S:系统表格
TR:触发器
U:用于表格。
UQ:独特的约束。
V:视图
X:被扩展的存储过程
事务和批处理的区别:
批:一次一起执行的一组语句
事务:用户定义的一组操做系列。
他们之间的区别是:
当批中的语句有语法错误的时候,整个批不能执行,不是语法错误的时候,
批中没有错误的语句执行,
而事务则不同,事务要么都执行,要么都不执行!!!
SQL命令提示工具:
SQLCMD sqlcmd -? // 显示帮助
select * from....
go
管理日志:
服务器属性--安全性--登录审核
在管理--sql server 日志里查看是否有可疑的登录事件
Profiler 对数据库的跟踪:
数据库优化顾问(DTA3): 优化物理数据库设计
XML 与2005配合使用
全文索引 能够对对数据库中的字符(如 varchar 、 text 、 ntext 等)、 image 等类型列进行索引,并通过自身实现全文搜索查询,是全文搜索的重要一步 [W91]
全文目录包含数据库中的全文索引,在每个服务器上最多可创建256个全文目录
一个表只能有一个全文索引。全文索引和目录不存储在它们所属的数据库中。目录和索引由 microsoft 搜索服务分开管理。
create fulltext catalog qqq as default; // 建立一个全文目录qqq,存放在默认的地址
创建全文索引: 全文索引实例
通过软件的向导 (在表 右键 全文索引 定义全文索引)
通过 sql 语句 create fulltext index on ... [W92]
填充操作:(全文搜索引擎的技术精髓)
完全填充一般发生在第一次对目录或索引进行填充的过程中,以后对全文索引的维护一般使用跟踪或增量填充即可。在跟踪和增量填充模式下,如果对数据库有更改,可以很方便地反映在全文索引的填充中
全文查询:
select * from ... where contains (Description,"sdfsdf" or "dsfsdfds")
sp_help_fulltext_tables // 获取已启用全文处理的所有表
sys.fulltext_catalogs //是一个系统视图 。 查询数据库的所有全文目录 [W93]
sp_fulltext_database 启动或更改数据库的全文处理功能
sp_fulltext_catalog 建立或更改全文目录
sp_fulltext_table 在全文目录中注册需要全文索引的表,也可以取消已经注册为全文索引的表
sp_fulltext_column 指定的某个特定列是否参与全文索引
在全文索引中,不会存储全文索引列中的干扰词(如:a 、 and 、the等 ),干扰词文件(Microsoft SQL Server/MSSQL.1/MSSQL/FTData) -- noiseCHS 文件代表简体中文的干扰词, noiseCHT 文件代表繁体中文的干扰词.....
例如:高科技公司的管理员可以指导 "computer" 一词的添加到他们的干扰词列表中。如果对干扰词文件进行了编辑,则必须重新填充全文目录,更改才能生效。
在搜索中,标点将被忽略。 [W94] 搜索词或短语中的字符不区分大小写
mysql 支持contains ,但 contains 的用法不同,不是用于全文索引。
下面是一些特殊的 contains 搜索:
前缀搜索 contains (Description,' " chain *" ')
派生词搜索 contains (Description,' FORMSOF ( INFLECTIONAL ," foot ") ') [W95]
词加权搜索 contains ( Description,' ISABOUT (performance weight(.8) ,comfortable weight (.4),smooth weight (.2)) ' ) ; [W96]
邻近词搜索 也可以用字符 "~" 来代替 NEAR 关键字 [W97]
布尔逻辑检索 AND 、 AND NOT 、 OR [W98] 。其中 OR 也可以用 | 来代替
用FREETEXT进行模糊检索:
where freetext (Description,'sky shine me'); //搜索包含与 sky,shine,me 相关的单词的所有文档
containstable 和 freetexttable 的使用: (返回一个表)
select * from freetexttable ( 表名 ,列名,'dfdfd df df'); [W99]
使用 RANK 值:
select .. from .. INNER JOIN freetexttable( ) AS KTBL
.... where KTBL. RANK >= 10
order by KTBL. RANK DESC;
// 只返回排名值为10或更高的行,并且以全文查询得到的RANK值为标准排序输出。
限制结果集:
返回前 5 个 匹配项,只有 containstable 和 freetexttable 才有的可选参数
freetexttable ( 表名 ,列名,'dfdfd df df' , 5 );
同样也可以使用 top 子句来限制 contains 和 freetext 的结果集中返回的数
查找系统存储过程或者其他函数时,适当运用 筛选器
sql server 2005复制技术架构:
“出版--订购”模式结构示意图
server 2005的3种复制类型:
快照复制 事务日志复制 合并复制
配置分发服务器: 右键--复制--配置分发向导
右键--复制--启动复制监视器
Server Broker 处理异步消息:
消息 服务 队列
在默认情况下,创建数据库时数据库中的Server Broker 消息传递处于活动状态。当消息传递处于不活动状态,请检查 sys.databases 目录视图的 is_broker_enabled 列。如 [W100]
高级功能:
外围应用配置器 (开启其他功能等)
配置sql server odbc
单 击'添加',在'创建新数据源'对话框下选择'SQL Native Client',此时配置的是SQL Server2005数据源(如果不行,应该就是版本问题,因为微软好像已经不维护这块了),如果要配置SQL Server 2000的,则选择'SQL Server',单击'完成';
3.
给 出数据源命名和说明(可选的),在接下来的编辑框中,选择服务器,!一般情况下,该编辑框会给出本地主机名,'.'或者'LOCAL',这时你要给 出完整服务器名。如果本地机器上装了SQL Server 2005,则可以填上'./SQLEXPRESS'或者'本机名/SQLEXPRESS',不然向导会提示出错信息导致创建数据源失败!
4.好了,接下来取向导默认值,就可以完成数据源的配置了。
SQL Server时间格式输入:
2001-10-25 3 :28:56 PM /*12 小时格式 */
2001-10-25 15 :28:56 /*24 小时格式 */
Access 时间格式输入:
#2005-01-02#
Oracle 时间格式输入:
02 Jan 2005 //默认安装的Oracle数据库格式
非Oracle 数据库格式:
2005-01-02
SET IDENTITY_INSERT 【 database.【 owner.】 】 { table } { ON |OFF }
sql server事务处理:
begin transaction
commit transaction
设置一个保存点 save transaction 保存点名称
回滚到刚才的保存点 rollback transaction 保存点名称/单元名称
结束前面的事务
sp_rename 'tablename.fieldname','newfieldname' // SQLServer 修改字段名
alter table t1 modify tname varchar(100); //修改列定义:
alter table t1 change tname tname2 varchar(255); //修改列名:
alter table xx rename column yy to zz // Oracle 修改字段名
exec 名 '1/1/1987'
CREATE procedure pro_new3
@sn char(9)
as select sname,sc.cno,cname
from student join sc on student.sno=sc.sno
join course on sc.cno=course.cno
Where student.sno=@sn
EXEC proc_students ' 200215121 '
概念,逻辑
概念模式
单个数据页面能保存的实际数据量是8092;
单个数据页面的字节大小是8192;
一个表的存储是由两部分组成。一部分用来存放表的数据页面,另一部分存放索引页面。索引就存放在索引页面上,通常,索引页面相对数据页面来说小得多。SQL SERVER中的索引是以B-树结构来维护
索引: 非聚集 索引, 聚集 索引。
聚集 索引和 非聚集 索引 都可以是唯一索引
-不用索引查询
Select * FROM IndexTestTable WHIT(INDEX(0))
Where Status='B'
--创建聚集索引
Create CLUSTERED INDEX icIndexTestTable
ON IndexTestTable(Status)
GO
使用 索引 查询
Select * FROM IndexTestTable WITH(INDEX(icIndexTestTable))
Where Status='B'
http://www.microsoft.com/china/technet/prodtechnol/sql/2005/ipsql05iv.mspx
如果在视图上创建索引,那么视图中的数据将立即存储在数据库中,对索引视图进行修改,那么这些修改会立即反映到基础表中。同理,对基础表所进行的数据修改也会反映到索引视图里
在 执行查询时,有两种方法可以使用索引视图。查询可直接引用索引视图,更重要的是,如果查询优化器确定视图能够替换 为查询的部分或全部,而且这是低成本的查询计划,则可以选择索引视图。第二种情况是使用索引视图代替基础表及其普通索引。此时,不需要在查询中引用视图, 查询优化器即可在执行查询期间使用该视图。
维护索引视图比维护基础表的索引更为复杂。所以如果认为值得以因数据修改而增加系统负担为代价来提高数据检索的速度,那么应该在视图上创建索引
创建索引视图
在创建索引视图或对参与索引视图的表中的行进行操作时,有 7 个 SET 选项必须指派特定的值。SET 选项 ARITHABORT 、 CONCAT_NULL_YIELDS_NULL 、 QUOTED_IDENTIFIER 、 ANSI_NULLS 、 ANSI_PADDING 和 ANSI_WARNING 必须为 ON。SET 选项 NUMERIC_ROUNDABORT 必须为 OFF。
必须使用 WITH SCHEMABINDING 选项创建视图
CREATE VIEW Vdiscount1 WITH SCHEMABINDING AS
SELECT SUM(UnitPrice*OrderQty) AS SumPrice,
SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS SumDiscountPrice,
COUNT_BIG(*) AS Count, ProductID
FROM Sales.SalesOrderDetail
GROUP BY ProductID
GO
CREATE UNIQUE CLUSTERED INDEX VDiscountInd ON Vdiscount1 (ProductID)
SQL server 中会自动识别采取哪种文件组织的
数据库设计准则:
命名规范,大小写敏感
索引使用原则
数据的一致性和完整性
关系模型相关知识:
域: 一组具有相同数据类型的值的集合,如整数,字符串,{男,女},大于零小于等于100的正整数
笛卡尔积:
给定一组域 D1,D2, .... ,D n. 则D1,D2, .... ,D n.的 笛卡尔积为:
D1 × D2 × .... × D n = {(d1,d2,...,dn)|di ∈ D j, ,j = 1.2....n}
如 :
D1 = animal( 动物集合 ) = { 猫,狗,猪 }
D2 = food(食物集合) = {鱼,骨头,白菜}
D1 × D2 = {(猫,鱼),(狗,鱼)(猪,鱼)(猫,骨头)()}
这9个元组可列成一张二维表:
专门的关系运算:
一、 选择
σ F (R) = {t | t ∈ R ∩ F(t) = ' 真 '}
//从关系R中选取使逻辑表达式F为真的元组
设有一个 学生-课程关系数据库, 包括学生关系S,课程关系C,选修关系SC
查询数学系(MA)学生的信息 σ SD = 'MA' (S) // 其中SD 为所在系
查询年龄小于20的学生信息 σ SA <20 (S) // 其中SA 为年龄
二、 投影
关系R上的投影是从R中选择出若干属性列组成新的关系
∏ A (R) = {t[A] | t ∈ R} //A 为R中的属性列
查询学生的学号和姓名: ∏ S#,SN (S) 或 ∏ 1,2 (S)
查询选修了2号课程的学生的学号: ∏ S# ( ∞ c#='2' ( SC ) ) // 同一个表
查询选修了3号课程的学生的姓名: ∏ SN ( ∞ c#='3' ( SC ) S ) // 连接两个表
三、 连接
也称θ连接,从两关系的笛卡尔积中选取属性间满足一定条件的元组
R∞S = {t r t s | t r ∈ R∩t s ∈ S∩t r [A]θt s [B]} (A=B 为等值连接 )
关系模式 就是对关系的描述
学生(学号,姓名,姓别 .... )
add constraint 约束名 Default 默认值 for 列名
列级完整性的用法(不用加 for ): (与JAVA的 GridBag constraint 布局相似)
Create table qq
(
工资 int default 1000 check ( 工资 >= 500 )
)
http://www.w3school.com.cn/sql/sql_foreignkey.asp (W3)
列级:
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
表级:
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
clustered 是指定簇索引的关键字。例句中,ssn字段被指定为簇索引!
不写Clustered建立的是普通索引,索引有序而表中数据无序
写了Clustered建立的是聚集索引,索引和表中数据均有序
CREATE TABLE jobs
(
job_id smallint
IDENTITY(1,1)
PRIMARY KEY CLUSTERED ,
...
)
A dd 不用加 Coumn
配套用的
Group by 后不能是 text,ntext,image,bit 类型的列
等价于 Select sno shine from SC(即不用as)
数据类型转换
去掉重复行
等价于
Select sno from SC where Sage between 20 And 30/* 包括 20 同30 */
等价于
Select sno from SC where Sage not between 20 And 30
等价于
Select sno from SC where sdept =' 信息系' OR sdept =' 数学系 ' OR sdept =' 计算机系 '
相当于 DB_system 要用 /_ 转为通配符
查询 无考试成绩 的学生的学号和相应的课程号
对查询结果排序 升序 ,从小到大,默认的
统计 选修了课程 的学生的 人数
Selecft Sname from student Where Sage = MAX(Sage)
查询选课门数超过3门的学生的学号
相当于 自然连接查询: Where ... = .....
查询与刘晨在同一个系学习的学生的姓名和所在的系:
Select s2.name,s2.sdept
From student s1 join student s2 on s1.sdept = s2.sdept
Where s1.sname = ' 刘晨 ' and s2.Sname != ' 刘晨 '
Left 是左外连接(限制表2中的数据必须满足连接条件,而不管表1中的数据是否满足连接条件)
right 是右外连接(限制表1中的数据必须满足连接条件,而不管表2中的数据是否满足连接条件)
>ANY(1,2,3) -- 表示大于1
>ALL(1,2,3) -- 表示大于3
<>(a,b,c) -- 不等于 a 或者不等于 b 或者不等于 c
NOT IN(a,b,c) -- 不等于 a, 不等于 b ,且不等于 c
=ANY 与 IN 是等效的
使用 子查询 进行 存在性测试
等价于 Trancate table 表名
M ysql用法:truncate 数据表
复制表到 t2
复制表结构
Create view V_IS_S1(sno,sname,sage)
AS
Select student.sno,sname,sage From studen join sc on studen.sno = sc.sno
Where sdept = ' 信管系 ' and sc.cno = ''c01'
含 分组统计信息 的视图: 定义一个存放每个学生的学号及平均成绩的视图
CREATE procedure pro_new3
@sn char(9)
as select sname,sc.cno,cname
from student join sc on student.sno=sc.sno
join course on sc.cno=course.cno
Where student.sno=@sn
EXEC proc_students ' 200215121 '
exec 名 '1/1/1987'
使用默认参数值的存储过程:
create proc ... @qw varchar(10) = '...'
use ...
select * from sys.fulltext_catalogs
sql server 用法
CREATE PROC TEST2
@PA1 INT,
@PA2 INT,
@PA3 INT OUTPUT
AS
SET @PA3 = @PA1 + @PA2
GO
DECLARE @PA4 INT
EXEC TEST2 2,4, @PA4 OUTPUT
SELECT @PA4
mysql prcedure 返回值一般用法
mysql > CREATE PROCEDURE simpleproc (OUT param1 INT )
-> BEGIN -> SELECT COUNT ( * ) INTO param1 FROM t;
-> END ;
mysql > CALL simpleproc( @a );
mysql > SELECT @a ;
CREATE PROC TEST1
@PA1 INT,
@PA2 INT
AS
RETURN @PA1+@PA2
GO
DECLARE @PA3 INT
EXEC @PA3=TEST1 3,4
SELECT @PA3
CREATE PROCEDURE checkstate
@param varchar(11)
AS
IF (SELECT state FROM authors WHERE au_id = @param) = 'CA'
RETURN 1
ELSE
RETURN 2
下例显示从 checkstate 执行中返回的状态。第一个显示的是在加利福尼亚州的作者;第二个显示的是不在加利福尼亚州的作者,第三个显示的是无效的作者。必须先声明 @return_status 局部变量后才能使用它。
DECLARE @return_status int
EXEC @return_status = checkstate '172-32-1176'
SELECT 'Return Status' = @return_status
GO
use mm
go
create procedure GetLogoInfo
as
select * from ...
go
exec sp_procoption @Proname = 'GetLogoInfo' ,
@OptionName = 'starup' , @OptionValue = 'true'
@Proname这些参数可以省略,如下
exec sp_procoption 'GetLogoInfo' , 'starup' , 'true'
可以设置 sql server 的 scan for starup procs 配置选项以防止所有的存储过程在启动 sql server 时自动执行
raiserror ("it is wrong!",10,1)
其中上面的10 表示错误严重程度,1--25(最严重)
DDL触发器 不能是INSEAD OF触发
create trigger ...
on database
for DROP_TABLE,ALTER_TABLE
AS
print 'you must trigger "safety" to drop or alter tables!'
ROLLBACK ;
DDL 触发器可以响应一个或者多个 T-SQL 语句。但并非所有的DDL事件都能用DDL触发器中。有些事件只用于异步、非事务语句。例如, create database 事件不能用于 .....
EVENTDATA 函数 . 捕获DDL触发器的事件信息 返回的是XML类型
CREATE TRIGGER 触发器名
ON{表|视图}
[WITH ENCRYPTION]
{ FOR |AFTER |INSTEAD OF}{[INSERT][,][UPDATE] [,] [DELETE] }
[NOT FOR REPLICATION]
AS
[{IF UPDATE(列名)[(AND|OR) UPDATE(列名)][..n]}
SQL语句
//WITH ENCRYPTION用于加密CREATE TRIGGER语句文本的条目。
CREATE TRIGGER ins_kk ON sc
instead of insert
AS
declare @xh varchar(10)
select @xh=sno from inserted
if exists (select * from student where student.sno=@xh)
begin
print '插入成功'
end
else
begin
print '学号不存在,不能插入'
rollback tran
end
//在SC表中建立一个触发器,当向表中插入一条记录时,检查该学生的学号是否存在于student
也可以用 select ; 如: select @××× = ' '
print @××× // 输出
sele 查询语句 与赋值不能混合使用
条件里不能加括号
可用于创建作业等等
waitfor time '1:58:00' -- 指定在此时间执行
lock table ... write;
insert into ...; //nysql 使用锁
lock tables ...,...,... // mysql 锁多个表
select ... from person with (tablock) //sql server 使用排它锁
也可以使用:
select ... from .. limit 5
select top 5 from ...
DECLARE E1cursor cursor /* 声明游标,默认为FORWARD_ONLY游标 */
FOR SELECT * from c_example
OPEN E1cursor /* 打开游标 */
FETCH NEXT from E1cursor /* 读取第1行数据*/
WHILE @@FETCH_STATUS = 0 /* 用WHILE循环控制游标活动 */
BEGIN
FETCH NEXT from E1cursor /* 在循环体内将读取其余行数据 */
END
CLOSE E1cursor /* 关闭游标 */
DEALLOCATE E1cursor & ......
Transact-QL 游标和(API) 服务器游标 都在服务器端实现,它们一起被称为 服务器游标
服务器游标的一个潜在的缺点是它们目前并不支持所有的 Transact-SQL 语句。服务器游标不支持生成多个结果集的 Transact-SQL 语句,因此,当应用程序执行包含多个 select 语句的存储过程或批处理时,不能使用服务器游标。服务器游标也不支持包含 compute 、 compute by 、 for browse 或 into 关键字的 sql 语句
静态游标是以游标打开时刻的当时状态显示结果集的游标。静态游标在游标打开时不反映对基础数据进行的更新、删除或插入。有时称它们为快照游标。动态游标是可以在游标打开时反映对基础数据进行的修改的游标。用户所做的更新、删除和插入在动态游标中加以反映。
fetch cursorName INTO @Variable1,@Variable2
//使游标移动到下一条记录,并将游标
返回的每个列的数据分别赋值给本地变量,这些本地变量必须先声明
set cursor_close_on_commit {on|off}
控制在提交事务时是否关闭游标。
-- 如果不指明更新的字段,则它的全部字段都可以更新
第一次用 next 就是读第一条记录
滚动游标:(使用 scroll 关键字定义的游标,具有以下取数功能)
first last prior ( 取前一行 ) next ( 下一行 )
relative ( 相对位置取数据 ) absolute ( 按绝对位置取位置 )
若无定义 scroll ,fetch next 是唯一可用的选项
如果指定 SCROLL,则不能也指定 FAST_FORWARD。
fetch absolute 5 // 提取从第一行开始的第5行
fetch relative 5 //提取从上一个提取行数开始的第5行
@@fetch_status
0: 读取成功
-1: 不在结果集
CURRENT OF
指定更新在指定游标的当前位置进行。
关闭游标
释放游标
nchar 值无法转换为 image 值,而且只能显式转换为 binary ,而不支持隐式转换为 binary
nchar 要显式转换为 nvarchar
cast (表达式 As 数据类型[长度] )
convert ( 数据类型[长度],表达式 )
convert(int,substring(xh,1,2))
授予权限
收回权限
拒绝权限
成功执行了create schema st authorization wang
那么 wang 就是数据库中的一个用户
st 就是一个架构名
创建表的时候可以
create table st.表名(t1 int)
访问的时候
select * from st.表名
完全备份,差异备份,日志备份
系统存储过程:
sp_addumpdevice // 数据库备份
例如一个 windows登陆 账户就是单个宿主,而 windows组则是一个集合宿主对象
顺序:
登录名--选择数据库--用户名
BI IDE 可能会重复
use master
select name, password from syslogins where password is null
小心进行数据库的系统级别操作,如更改服务器或数据库的配置值、修改或添加登录账户等,而且执行这些操作后,应该尽快备份 master 数据库
单用户模式运行 SQL server 下才能 还原 master 数据库,
还没有完美解决方案
/*检查是否存在score表,若存在则删除*/
if exists (select name from sysobjects where name = 'score')
drop table score
go
你可以用下面的命令列出感兴趣的所有对象:
SELECT * FROM sysobjects WHERE xtype = <type of interest>
/*检查是否存在check_score触发器,若存在则删除*/
if exists (select name from sysobjects where name = 'check_score' and thpe = 'TR')
drop trigger check_score
go
先启动 全文搜索 服务,创建 全文目录 ,再进行 全文搜索 的 定义
修改全文目录
alter fulltext catalog ..
删除
drop fulltext catalog ..
修改全文索引
alter fulltext ..
use ...
select * from sys.fulltext_catalogs
contains(testing,"computer failure") 将匹配包含 "where is my computer?failure to find ." 主个值的行
匹配 foot ,feet, 等
权值用介于 0.0 和1.0之间
此代码搜索包含 performance ,comfortable ,smooth 等词的所有产品描述,并且给定每个词的不同加权。
sql server 2005 将对那些包含指定词较多的行赋予较高的排名。
select DocumentID,DocumentSummary,Document
from Production.Document
where contains (Document,'Reflector NEAR Bracket');
// 搜索与词 Reflector 和 Bracket 邻近的文档。
将子句改为: contains (Document,'Reflector ~ Bracket'); , 结果也是一样的
where contains (Description,"sdfsdf" AND "dsfsdfds")
select select_list
from table AS FT_TBL INNER JOIN
containstable( tabel,column,contains_search_condition ) AS KEY_TBL
ON FT_TBL.unique_key_column = KEY_TBL.[KEY]
use AdventureWorks
select is_broker_enabled
from sys.databases
where database_id = db_id()
若结果是1,表明此数据库的 Server Broker 消息传递处于活动状态