当前位置:文档之家› 郝斌SqlServer2005

郝斌SqlServer2005

郝斌SqlServer2005
郝斌SqlServer2005

一、数据库是如何解决数据存储问题的

1.从三个方面来学习数据库

a)数据库是如何存储的

i.字段,记录,表,约束(主键,外键,唯一键,非空,check, default, 触发器)

b)数据库是如何操作数据的

i.Insert, update, delete, T-SQL, 存储过程,函数,触发器

c)数据库是如何显示数据的

i.select(重点中的重点)

2.必备的一些操作

d)如何建数据库

i..mdf是数据文件.LDF是日志文件

ii.右键->新建数据库->输入名字->确定

e)如何删除一个库;如何附加和分离数据库

f)设置登录用户名和密码;建用户

3.用鼠标建立的第一个数据库Test

g)nvarchar() 国际化编码的可变的字符串。n表示国际化,对汉字也支持;var是

变量,字符的长度是可变化的

h),其中的dbo表示一个系统的身份

i)

j)存在外键的表叫外键表

k)当要选择是否可以为空时,用空格键来进行控制,即:可以用空格来选择

l)PK,primary 主要的;FK, foreign 外部的

4.通过sql命令建表和主外键约束

m)在sql server里最后一句写不写逗号都可以,但是在oracle里不可以写逗号,因此在写命令时,最后一个字段的后面就不要写逗号了

n)create table dept

(

--设置了非空

dept_address nvarchar(100)

)

create table emp

( --这个是注释

--此处给主键起了

--一个名字,红字部分可以不写

emp_name nvarchar(20) not null,

emp_sex nchar(1),

dept_id int constraint FK_dept_id_hd

--在此处建立了一个外键,使用了references )

5.约束

o)约束的分类

i.主键约束不允许重复元素,避免了数据的冗余(实体完整性)

ii.外键约束通过外键约束从语法上保证了本事物所关联的其他事物一定是存在的(引用完整性)事物和事物之间的关系是通过外键来体现的p)check约束

i.create table student

{

)

在此处使用了check约束,限定了stu_sal的值在1000与8000之间ii.保证事物属性的取值在合法的范围之内

q)default约束

i.

ii.保证事物的属性一定有一个值

iii.create table student2

(

stu_id int primary key,

是可以省略的,在数据库中字符串是

--必须用’’括起来

)

insert into student2(stu_id, stu_sal) values (1, 1000)

insert into student2 values (2, 5000, '女')

--insert into student2 values (3, 10000) 这样写是不对的

在此处,声明了三个属性,在第一个命令中,指定了二个属性,所以填入了两

个值;第二个命令中,没有指定要填写几个属性,所以要填写全部的三个值;

第三个命令中,没有指定要填写几个属性,不过只写了两个值,这是不对的r)unique约束(唯一约束)

i.保证了事物的取值不允许重复,

ii.create table student5

(

stu_id int primary key,

stu_sal int check (stu_sal >= 1000 and stu_sal <= 8000),

)

insert into student5 values (1, 6000, '男', '张三') --此句话正确

insert into student5 values (2, 6000, '男', '张三') --违反了唯一键约束,不正确

insert into student5 values (null, 6000, '男', '王五') --主键不能为空,不正确

insert into student5 values (3, 6000, '男',null) --唯一键可以为空iii.unique键是否允许多列为空?

1.Sql Server 2012只允许一个unique列为空

2.Oracle11G允许多个unique列为空

s)主键和唯一键区别及其两者配合使用举例

i.不要用业务逻辑作主键(编号不是一个事物的属性)

ii.把编号(代理主键)当主键,

iii.create table student6

(

stu_name nvarchar(50) not null unique,

stu_email nvarchar(50) not null,

stu_address nvarchar(50)

--这一句是删除一个表

在此处,identity是自增的意思;设定了一个编号当作主键,把用户名作为唯一键;通常不会删除一个用户,一般每个用户都有一个标识位,1或者0,

如果注消一个用户的话可以把他的标识位改一个,就不能使用此帐户了t)not null(可以当作一个约束)和default的区别

i.not null要求用户必须为该属性赋一个值,否则语法出错

ii.如果有默认值,如果不指定要为哪一个属性赋值的话,必须为全部属性赋值iii.如果指定了为哪些属性赋值,有一个属性没在括号内且可以为空的话,这个值就是NULL;如果指定了为哪些属性赋值,有一个属性没在括号内且有默认值,

那么这个值就是默认值

6.表和约束的区别(他自己的理解)

u)数据库是通过表来解决事物的存储问题的

v)数据库是通过约束来解决事物取值的有效性和合法性的问题

w)建表的过程就是指定事物属性及其事物属性各种约束的过程

7.什么是关系

x)定义:表和表之间的联系

y)实现方式:通过设置不同形式的外键来体现表和表的不同关系

z)分类:一对一,一对多,多对多

aa)一对一:

i.可以把表A的主键充当表B的外键,也可以把表B的主键当充当表A的主键

bb)一对多:

i.在多的一方添加外键

cc)多对多:

i.任何一个表都有一个主键,但不一定都有外键

ii.多对多的关系需要另外一张表来表示(通常至少有两列)

iii.--班级表

create table banji

(

banji_id int primary key,

banji_num int not null,

banji_name nvarchar(100)

)

--教师表

create table jiaoshi

(

jiaoshi_id int primary key,

jiaoshi_name nvarchar(200)

)

--第三张表用来模拟班级和教师的关系

create table banji_jiaoshi_mapping

(

kecheng nvarchar(20),

)

--删除表

drop table banji_jiaoshi_mapping

在第三张表里面,constraint fk_banji_id为banji_id这个外键设置了一个别名;foreign key references banji(banji_id)这句话,设置了一个外键,其中“一”

的一方是banji里的banji_id;下面一条命令同样设置了一外键,不过是省略了

外键的名字;最后一条命令设置了一个联合主键,设其名字为

pk_banji_id_jiao_id,只能用这种方法来设置联合主键,不能一个一个地单独写

主键;在第三张表里面,删除了这个关系表

dd)数据库关系图的使用

i.在一个库里右击数据库关系图,新建数据库关系图,选中要选择的表

ii.在删除一个关系时,不会把属性同时删除

iii.要放大和缩小关系图,Ctrl+鼠标滚轮

iv.利用可以快速改变视图的位置

8.主键的具体定义及注意事项

ee)主键定义:能够唯一标识一个事物的一个字段或者多个字段的组合

ff)主键特征:

i.含有主键的表叫做主键表

ii.主键通常都是整数,不建议使用字符串当主键(如果主键是用于集群式服务,才可以考虑用字符串当主键)

iii.主键的值通常都不允许修改,除非本记录被删除

iv.主键不要定义成id,而要定义成“表名id”或者“表名_id”

v.要用代理主键,不要用业务主键

1.任何一张表,强烈建议不要使用有业务含义的字段充当主键

2.我们通常都是在表中单独添加一个整型的编号充当主键字段

9.外键的具体定义及要注意的问题

定义:如果一个表中的若干个字段是来自另外若干个表的主键或唯一键,则这若干个字段就是外键

注意:

vi.外键通常是来自另外表的主键而不是唯一键,因为唯一键可能为null

vii.外键不一定是来自另外的表,也可能来自本表的主键

viii.含有外键的表叫外键表,外键字段来自的那一张表叫做主键表

gg)问题:先删主键表还是外键表?先删外键表

二、查询(顺序)

10.计算列(scott库)

a)select * from emp;

b)select empno, ename from emp;

c);

i.这里所写的sal*12是指把一个月的工资乘以12之后的结果;as在这里写不写

都可以;年薪这里要写的是双引号,不要写其他的符号,值是5

d)select 888 from emp;

i.这里写888,查询出来的没有列名,输出的行数是emp表的行,每行只有一

个字段

e)select 5;

i.这里写的5,查询出来的是没有列名,只有一个记录(不推荐这样写)

ii.在Oracle里不能通过

f)注意:在Oracle SqlServer2012却允许,

11.distinct(不允许重复的)的用法

a)这里,distinct deptno会过滤掉重复的deptno

b)distinct也可以过滤掉重复的null,或者说如果有多

个null,只输出一个

c)把comm和deptnor的组合进行过滤

d)select deptno, distinct comm from emp; 逻辑上有冲突

e)select ename, * from emp; 这个在SqlServer里正确,在Oracle里不正确

12.between(在某个范围)的用法

a)select * from emp; 在这里,先执行from emp,知道要在哪个表里查找,然后

执行select *,知道要找哪些数据

b)查找工资在1500和

i.等价于:

ii.

c)查找工资小于1500或大于3000的所有的员工的信息

i.select * from emp where sal < 1500 or sal > 3000; 等价于:

ii.select * from emp where sal not between 1500 and 3000

13.in(属于若干个孤立的值)

a)在emp表中取出sal为1500和3000

的所有记录,等价于:

b)

c)emp表中取出sal既不是1500也

不是3000的记录,等价于:

d)

i.在数据库中不等于有两种表示方式:!= <>推荐使用第二种

ii.对或取反是并且,对并且取反是或

14.top(最前面的若干个记录,专属于SqlServer的语法,不可移植到其他数据

库中)

a)选出emp表中的前两个记录

b)输出emp表中的前15%个,如果不是整数的

话,就进位。如,14 * 15% = 2.1,则输出3个值

c)select top 2 from emp; 这里没有*会出错

d)把工资在1500和3000之间(包括1500和3000)的员工中工资最高的4 个人的

信息输出

i.

ii.其中desc是降序的意思,默认情况下是升序

15.null(没有值空值)

a)零和null是不一样的,

b)null

c)null

d)例如:

i.select * from emp where comm <> null; --错误

ii.select * from emp where comm != null; --错误

iii.--错误

iv.--输出奖金为空的员工的信息

v.--输出奖金不为空的员工的信息

e)任何类型的数据都允许为null,如:

i.create table t1(name nvarchar(20), cnt int , riqi datetime),

insert into t1 values (null, null, null);

f)任何数字与null参与数学运算的结果永远是null,例如:

i.–输出第个员工的姓名年薪(包含了资金),comm假设是一年的资金

select empno, ename, sal * 12 +comm “年薪” from emp;

如果有null参与运算的话,结果全部为null

ii.正确的写法是:

1.

2.

16.order by 的用法(以某个字段排序)

a)order by a, b; a 和b都是升序

b)order by a, b desc; a升序,b降序

c)order by a desc, b; a降序,b升序

d)order by a desc, b desc; a降序,b降序

e)文字描述:

i.默认可以省略不写,

ii.为一个字段指定的排序标准并不会对另一个字段产生影响

iii.强烈建议为第一个字段都指定排序的标准

f)例子:

i.默认是按照升序排列

ii.先按照deptno排序,如果deptno

iii.这里deptno里面写了desc,则deptno按照降序来排列;如果deptno相同,后面的sal没有写排序类型,则

sal按照升序来排序(Oracle也是这样)

iv.select * from emp order by deptno, sal desc; 与上相同,先按deptno升序,如果deptno相同,则再按sal的降序来排列;不会对deptno产生影响

17.模糊查询[搜索时经常使用]

a)

b)

i.

只要含有A就输出

--ename只要首字母为A就输出ii.

iii.

1.select * from emp where ename like '_[A-F]%';--把ename中第二个字母是

iv.

v.

1.select * from emp where ename like '_[^A-C]%';--把ename中第二个字母不

是A,不是B,也不是C的记录输出

vi.

vii.

c)模糊查询中通配符作为普通字符使用的问题

i.s elect * from student where name like ‘%\_%’ escape ‘\’

ii.这表示把所有记录中name列包含下划线‘_’字符的记录输出

iii.escape ‘\’ 表示把‘\’字符当做转义字符的标志

iv.在sql中可以把任意的字符当做转义字符的标志,具体是把哪个字符当做转义字符,这是由escape ‘要制定为转义字符的字符’来决定的

18.聚合函数[多行记录返回一个值,通常用于统计分组的信息]

a)函数的分类:

i.单行函数,每一行返回一个值

ii.多行函数,多行返回记录一个值;聚合函数是多行函数

iii.例子:select lower(ename) from emp; --最终返回的是14行lower()是单行函数(lower()是将大写的转换成小写的;upper()将小写的转换成大写的)

select max(sal) from emp; 返回行max()是多行函数

b)聚合函数的分类:(当聚合函数作用某个字段时,会忽略所有的NULL行)

i.常用的聚合函数:

1.AVG(ALL|DISTINCT expression) 数字表达式中所有值的平均值

2.SUM(ALL|DISTINCT expression) 表达式中所有值的平均值

3.COUNT(ALL|DISTINCT expression) 表达式中值的个数

4.COUNT(*) 选定的行数

5.MAX(expression) 表达式中的最高值

6.MIN(expression) 表达式中的最低值

ii.max() 适用于数值型,字符型和日期型的列,对于列值为NULL的列,MAX 不将其列为对比的对象

iii.min() avg()(平均值)

iv.

1.--返回emp表所有记录的个数

--返回emp表所有记录的个数

2.--返回字段值非空的记录的个数,重复的记录也会被当

做有效的记录

a)select count(deptno) from emp; --返回值是14,说明deptno重复的

记录也被当做有效值

b)select count(comm) from emp; --返回值是4,说明comm为null的

记录不会被当做有效的记录

3.--返回字段不重复并且非空的记录的个数

a)select count(distinct deptno) from emp; --返回值是3,统计deptno

中不重复的个数

b)select count (distinct comm) from emp; --返回值是4,这说明comm

为null的记录不会被当做有效的记录

c)注意的问题:

i.select max(sal) "最高工资", min(sal) "最低工资", count(*) "员工人数" from emp;

--这样写没有冲突

ii.select max(sal), lower(sal) from emp; --错误,单行函数和多行函数不能混用19.grout by用法[对于查询的结果分组统计][重难点]

a)

b)格式:group by 字段的集合

c)功能:把表中的记录按照字段分成不同的组

d)例子:

i.查询不同部门的平均工资

部门平均工资” from emp group by deptno

e)

i.b分组;如果b相同,再按c

ii.下面几行语句是错误的:

1.select deptno, avg(sal) as”部门平均工资”, ename from emp group by deptno

在这里按照部门deptno来分组,只能写组的信息,不能写组内部的信息。

这样写部门分组只有三组,名字却有14个,所以不行

2.select deptno, ename from emp group by deptno

3.

iii.之后select

f)出现在SELECT列表中的字段,如果不是包含在分组函数中,那么该字段必须同时

在GROUP BY子句中出现。但是在GROUP BY子句中的字段则不必须出现在SELECT

列表中,例如:

i.select avg(sal) from emp group by deptno; --OK

ii.select deptno, avg(sal) from emp group by deptno; --OK

iii.select ename, avg(sal) from emp group by deptno --error 一定要明白该句为什么是错误的

20.having

a)having子句是用来对分组之后的数据进行过滤,

因此使用having时通常都会先使用group by

b)如果没有使用group by 但使用了having,则意味着把所有的记录当做一组来进行

过滤。一般很少这样用select count(*) from emp having avg(sal) > 1000;

c)having子句出现的字段必须得是分组之后的组的整体信息,having不允许出现组内

的详细的信息

d)尽管select字段中可以出现别名,但是having子句中不能出现字段的别名,只能

使用字段最原始的名字

e)having和where的异同

i.相同点:

1.都是对数据过滤,只保留有效的数据

2.where和having一样,都不允许出现字段的别名,只允许出现最原始的字

段名字,在SqlServer2012和Oracle中都成立

ii.不同点:

1.

2.

3.

iii.例子:

1.select deptno, avg(sal) from emp

where sal > 2000 group by deptno having avg(sal) > 3000; (正确)

2.select deptno, avg(sal) from emp

group by deptno having avg(sal) > 3000; where sal > 2000; (不正确)

f)总结:

SELECT select_list

[INTO new_table_name]

FROM table_list

[WHERE search_conditions]

[GROUP BY group_by_list]

[HAVING search_conditions]

[ORDER BY order_list[ASC|DESC]]

union运算符可以合并多个查询结果

21.连接查询

a)定义:将两个或者两个以上的表以一定的连接条件连接起来,

从中检索出满足条件的数据

分类:内连接,外连接,完全连接,交叉连接,自连接,联合

b)内连接(重点,但不难)

i.select …from A, B 的用法

1.产生的结果:行数是A和B的乘积,列数是A和B之和;或者说:把A

(或B)表的每一条记录都和B(或A)表的每一条记录组合在一起,形

成的是个笛卡尔积

2.注意:select * from A, B输出结果和select * from B, A的结果是一样的

3.例子:--输出70行11列

select * from emp, dept;

ii.select …from A, B where … 的用法

1.对select … from A, B 产生的笛卡尔积用where中的条件进行过滤(A和B

互换输出结果一样)

2.例子:--输出5行11列

select * from emp, dept where empno = 7369

这条语句可以理解成:将emp 中的empno 为7369的记录分别与dept

中的每一条记录相连,其中dept表中只有5行,所以结果只有5行记录iii.select …from A join B on …的用法(有join,必须有on)

1.A和B互换输出结果不变

2.on中是连接条件

iv.select …from A, B where … 与

select …from A join B on … 的比较

v.select、from、where、join、on、group by、order、top、having 的混合使用(having里面只能有原始字段的名字)

1.查询的顺序:

select top …

from A

join B

on …

join C

on …

where …

group by …

having …

order by …

2.例子:

--把工资大于1500的所有的员工按部门分组把部门平均工资大于

2000的最高前2个的部门的编号部门的名称部门平均工资的等级

--第一种写法

select "T".*, "D".dname, "S".grade

from dept "D"

join (

select top 2 "E".deptno, avg(sal) "avg_sal"

from emp "E"

join dept "D"

on "E".deptno = "D".deptno

join salgrade "S"

on "E".sal between "S".losal and "S".hisal

where "E".sal > 1500

group by "E".deptno

having avg("E".sal) > 2000

order by avg("E".sal) desc

) "T"

on "D".deptno = "T".deptno

join salgrade "S"

on "T"."avg_sal" between "S".losal and "S".hisal

--第二种写法

select "T".*, "D".dname, "S".grade

from dept "D"

inner join (

select top 2 deptno, avg(sal) as "avg_sal"

from emp

where sal > 1500

group by deptno

having avg(sal) > 2000

order by "avg_sal" desc

) "T"

on "D".deptno = "T".deptno

inner join salgrade "S"

on "T"."avg_sal" between "S".losal and "S".hisal

vi.习题:

1.判断以下语句输出是几行:

a)select * from emp, dept where emp.deptno = 10 --15行

b)select * from emp, dept where dept.deptno = 10 --14行这里是过

--滤条件不是连接条件如何把select * from emp, dept where dept.deptno = 10以sql99标准来完成select * from emp join dept on 1 = 1 where dept. deptno = 10;

2.求出每个员工的姓名、部门编号、薪水和薪水的等级

a)select "E".ename, "E".sal, "S".GRADE

from emp "E"

join SALGRADE "S"

on 1 = 1

where "E".sal >= "S".LOSAL and "E".sal <= "S".HISAL;

3.查找每个部门的编号、该部门所有员工的平均工资、平均工资的等级

a)select "T".deptno, "T".avg_sal "部门平均工资", "S".GRADE "工资等级"

from (

select deptno, avg(sal) as "avg_sal"

from emp

group by deptno

) "T"

join SALGRADE "S"

on "T".avg_sal between "S".LOSAL and "S".HISAL

4.查找每个部门的编号、部门名称、该部门所有员工的平均工资、平均工

资的等级

a)select "T".deptno, "T"."avg_Sal" "部门平均工资", "S".grade "工资等级" ,

"D".dname "部门名称"

from (

select deptno, avg(sal) as "avg_sal"

from emp

group by deptno

) "T"

join salgrade "S"

on "T".avg_sal between "S".losal and "S".hisal

join dept "D"

on "T".deptno = "D".deptno

5.求出emp表中所有领导的信息

a)select * from emp

where empno in (select mgr from emp)

b)思考:求出emp表中所有非领导的信息

select * from emp

where empno not in (select mgr from emp)

这样写是不对的,思考in与null的组合所带来的问题

6.求出平均薪水最高的部门的编号和部门的平均工资

a)第一种写法:

select top 1 deptno "部门的编号",avg(sal)"平均工资"

from emp

group by deptno

order by avg(sal) desc

b)第二种写法:

select "E".*

from (

select deptno, avg(sal) "avg_sal"

from emp

group by deptno

) "E"

where "E"."avg_sal" = (

select max("avg_sal") from (select deptno, avg(sal)

"avg_sal" from emp group by deptno) "T"

)

7.把工资大于所有员工中工资最低的人中,前3个人的姓名、工资、部门

编号、部门名称、工资等级输出

a)select top 3 "T".ename, "T".sal, "T".deptno, "D".dname, "S".grade

from (

select *

from emp "E" --153行

where sal > ( select min(sal) from emp )

) "T" --这里的"E"与153行的"E"是没有冲突的,因为范围不一样

join dept "D"

on "T".deptno = "D".deptno

join salgrade "S"

on "T".sal between "S".losal and "S".hisal

order by "T".sal asc

c)外连接

i.定义:不但返回满足连接条件的所有记录,而且会返回部分不满足条件的记录

ii.分类:左(右)外连接:不但返回满足连接条件的所有记录,而且会返回左(右)表不满足连接条件的记录

iii.左外连接运行原理:

select * from emp “E”

left join dept “D”

on E.deptno = D.deptno

1.用左表的第一行分别和右表的所有行进行连接,如果有匹配的行,则一起

输出,如果右表有多行匹配,则结果集输出多行,如果没有匹配行,则结

果集中只输出一行,该输出行左边为左表第一行内容,右边全部输出null

2.然后再用左表第二行和右边所有行进行连接,如果有匹配的行,则一起输

出,如果右表有多行匹配,则结果集输出多行,如果没有匹配行,则结果

集中只输出一行,该输出行左边为左表第二行内容,右边全部输出null

3.以此类推,直至左边所有行连接完毕

4.因为右边很可能出现有多行和左边的某一行匹配,所以左连接产生的结果

集的行数很可能大于left join左边表的记录的总数

5.帮助文档:左向外连接的结果集包括LEFT OUTER子句中指定的左表的所

有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配

行,则在相关联的结果集行中右表的所有选择列表列均为空值

6.实际上左连接产生的结果集的行数很可能大于left join左边表的记录的总

数,不能理解为:left join 左边表有n行,最终产生的记录也是n行。实

际上左连接产生的结果集的行数很可能大于left join左边表的记录的总数

7.select * from dept ”D”

left join emp “E”

on D.deptno = E.deptno

8.在这个语句中,结果有16行,左面的dept有5行(10,20,30,40,

50),前三行分别与emp表中的值进行连接,将有14行,其中40与50

与右面的表没有连接成功,则第15,16行,左面为dept表中的值,右面

没有值

iv.左外连接的实际意义

1.返回一个事物及其该事物的相关信息,如果该事物没相关信息,则输出

null

2.例子:

a)已知条件:

productStocks货物库存表orderForm订单表

pId产品的编号

3.sql语句:

a)select productStocks.*, orderForm.*

from productStocks

left join orderForm

on productStocks.pId = orderForm.pId

4.实际意义:

返回仓库中现存货物的信息及其该货物的订单信息,如果货物没有订单信息,在把该货物的订单信息全部输出为null

d)完全连接

i.例子:

select * from productStocks

full join orderForm

on productStocks.pId = orderForm.pId

ii.结果集中包含二部分内容

1.两个表匹配的所有行记录

2.左(右)表中那些在右(左)表中找不到匹配的行的记录,这些记录的右

边全为null

e)交叉连接

select * from emp cross join dept

等价于

select * from emp, dept

f)自连接

i.定义:一张表自己和自己连接起来查询数据

ii.例子:不准用聚合函数,求薪水最高的员工的信息

select * from emp

where empno not in(

select distinct "E1".empno

from emp "E1"

join emp "E2"

on "E1".sal < "E2".sal

)

iii.如果使用聚合函数,求薪水最高的员工的信息(这里不是自连接):

select *

from emp

where sal = (select max(sal) from emp)

g)联合

i.定义:表和表之间的数据以纵向的方式连接在一起

ii.我们以前讲的所有的连接是以横向的方式连接在一起的

iii.例子:输出每个员工的姓名,工资,上司的姓名

1.select "E1".ename, "E1".sal, "E2".ename "上司的姓名"

2.from emp "E1"

3.join emp "E2"

4.on "E1".mgr = "E2".empno

5.union

6.select ename, sal, '已是最大老板'

7.from emp

8.where mgr is null

iv.注意:若干个select子句要联合成功的话,必须得满足两个条件,

1.这若干个select子句输出的列数必须是相等的

2.这若干个select子句输出列的数据类型至少是兼容的

22.嵌套查询

a)oracle中讲

23.identity【主键自动增长,用户不需要为identity修饰的主键赋值】

a)identity表示该字段的值会自动更新,不需要我们维护,通常情况下我们不可以直

接给identity修饰的字符赋值,否则编译时会报错

b)语法格式为:

i.identity(m, n)

ii.m表示的是初始值,n表示的是每次自动增加的值

iii.要么同时指定m和n的值,要么m和n都不指定,不能只写其中一个值;如果m和n都未指定,则取默认值(1, 1)

c)数据类型是整型的列才能被定义成标识列

i.int, bigint, smallint列都可以被定义成identity

ii.不含有小数位的decimal和numeric也可以被标记为identity,如:decimal, decimal(6, 0)字段都可以被标记为identity,但是decimal(6, 2)字段就不能被标

记为identity

d)标识列通常与primary key约束一起用作表的唯一行标识符(非主键也是可以被定

义为identity的,但不推荐)

e)如何重新设置identity字段的值

create table emp(

empid identity(1, 1),

ename nvarchar(20) not null,

);

insert into emp values(‘aaaa’);

insert into emp values(‘bbbb’);

insert into emp values(‘cccc’);

insert into emp values(‘dddd’); --8行

select * from emp

delete from emp where empid = 4 --删除empid为4的记录

select * from emp

insert into emp values(‘eeee’)--因为执行8行时empid为4,所以执行

--本句时,empid为5

select * from emp

delete from emp where empid = 5

dbcc checkident(‘emp’, reseed, 3)--16行,把emp表中identity字段的初始

--值重新设置为3

insert into emp values(‘eeee’)--此时插入记录时,empid为4,因为16

行代码已经把empid设置成了3 select * from emp

f)dbcc checkident(‘emp’, reseed, 0)

i.种子的值也可以是零,这样设置的话,用户插入值时,种子的初始值将从1

开始

g)如何向identity字段插入数据(不是重点)

i.通常identity标记的字段我们是不需要插入数据的,即我们不需要维护identity

字段的值,它会自动更新,如果我们需要向identity修饰的字段插入值,则必

须满足如下两点:

1.先得执行setidentity_insert[database.[owner]] {bable} {on|off}

2.插入数据时必须得指定identity修饰的字段的名字

ii.向identity字段插入数据示例:

1.create database Test

https://www.doczj.com/doc/0816628659.html,e Test

3.create bable dept(

a)deptid decimal(6, 0) identity,

b)deptname varchar(20)

4.);

5.set identity_insert test.dbo.dept on

i.–执行本句的目的是:希望可以各identity修饰的字段插入值

ii.–不可以改为set identity _insert dept on

iii.–不可以改为set identity _insert dbo.test.dept on

iv.–不可以改为set identity _insert dbo.test.dept.on

6.insert into dept(deptid, deptname) values (1, ‘zhangsan’)

i.–不能改为:insert into dept values(1, ‘zhangsan’)

24.视图

a)为什么需要视图:简化查询(避免了代码的冗余,改名了书写大量重复的sql语句)

b)什么是视图:

i.视图从代码上看是一个select语句

ii.视图从逻辑上看被当做一个虚拟表看待

c)如何创建视图:

i.create view 实图的名字

1.as

i.–select 的前面不能添加begin

b)select 语句

i.–select的后面不能添加end

ii.例子:

求出平均工资最高的部门的编号和部门的平均工资

select *

from (

select deptno, avg(sal) "avg_sal"

from emp

group by deptno

) "T"

where "T"."avg_sal" = (

select max("E"."avg_sal") from (

select deptno, avg(sal) "avg_sal"

from emp

group by deptno

) "E"

)

iii.如果使用视图:

create view v$_emp_1

as

select deptno, avg(sal) "avg_sal"

from emp

group by deptno

select * from v$_emp_1

1.where avg_sal = (select max(avg_sal) from v$_emp_1)

d)视图的优点:简化查询,增加数据的保密性

e)视图的缺点:增加了数据库维护的成本

只是简化了查询,但是并不能加快查询的速度

f)注意的问题:

i.创建视图的select语句必须为所有的计算列指定别名

1.create view v$_a

as

select avg(sal) from emp; --error

2.create view v$_a

as

select avg(sal) as “avg_sal”from emp; --正确

ii.视图不是物理表,是虚拟表

iii.不建议通过视图更新视图所依附的原始表的数据或结构

25.事务【重要,初学者重在理解概念】

a)初学者必须理解的三个概念:

i.事务是用来研究什么的

1.事务主要用来保证数据的合理性和并发处理的能力

2.通俗点说:

a)事务可以保证避免数据处于一种不合理的中间状态(要么全部执行失

败,要么全部执行成功,不能出现半对半错的情况。例如银行转帐)

b)利用事务可以实现多个用户对共享资源的同时访问

b)事务和线程的关系:

i.事务是通过锁来解决并发访问的

ii.线程同步也是通过锁来解决并发访问的synchronized

iii.所谓并发访问是指:多用户同时访问同一个数据

c)事务和第三方插件的关系

i.直接使用事务库技术难度大,很多人是借助第三方插件来实现,因此一般人不

需要细细研究数据库中事务的语法细节

ii.第三方插件要想完成预期的功能,一般必须得借助数据库中的事物机制来实现

d)T-SQL使用下列语句来管理事务(不重要)

i.开始事务:begin transaction

ii.提交事务:commit transaction

iii.回滚(撤销)事务:rollback transaction

iv.一旦事务提交或回滚,则事务结束

e)事务三种运行模式:

i.显式事务:

1.第个事务均以begin transaction语句显式开始

2.以commit或rollback语句显式结束

ii.自动提交事务:

1.第条单独的语句都是一个事务。如果成功执行,则自动提交;如果错误,

则自动回滚;这是sql server 2005默认的模式

iii.隐性事务:

1.在前一个事务完成时新事务隐式启动,但每个事务仍以commit或rollback

语句

f)总结事务的四大特性(简称ACID属性,一般在面试的时候能用到):

i.原子性:事务是一个完整的操作。事务的各步操作是不可分的;要么都执行,

要么都不执行

ii.一致性:当事务完成时,数据必须处于一致状态,要么处于开始状态要么处于结束状态,不允许出现中间状态

iii.隔离性:指当前的事务与其他未完成的事务是隔离的。在不同的隔离级别下,事务的为读取操作,可以得到的结果是不同的

iv.持久性:事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性

g)注意问题:不能在sql server中单独使用commi,rollback语句

26.索引(可以加快查询)

27.存储过程

28.游标

29.TL-SQL

30.触发器

31.分页查询

假设每而显示n条记录,当前要显示的是第m而,表名是A,主键是A_id:

select top n *

from A

where A_id not in (select top (m - 1) * n A_id from emp)

SQLServer的简介及发展历程

S Q L S e r v e r的简介及发展历程SQL简介 SYSTEMR开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM 语言作为查询语言。 织,负责开发美国的商务和通讯标准。ANSI同时也是ISO和InternationalElectrotechnicalCommission(IEC)的 ANSI随之发布的相应标准是ANSISQL-92。ANSISQL-92有时被称为ANSISQL。尽管不同的关系数据库使用的SQL版本有一些差异,但大多数都遵循ANSISQL标准。SQLServer使用ANSISQL-92的扩展集,称为T-SQL,其遵循ANSI 制定的SQL-92标准。 SQL发展历史 1970:E.J.Codd发表了关系数据库理论(relationaldatabasetheory); 1974-79:IBM以Codd的理论为基础开发了“Sequel”,并重命名为"SQL"; 1979:Oracle发布了商业版SQL 1981-84:出现了其他商业版本,分别来自IBM(DB2),DataGeneral(DG/SQL),RelationalTechnology(INGRES); SQL/86:ANSI跟ISO的第一个标准; SQL/89:增加了引用完整性(referentialintegrity); SQL/92(akaSQL2):被数据库管理系统(DBMS)生产商广发接受; 包括oids; SQL/2003:包含了XML相关内容,自动生成列值(columnvalues); 2005-09-30:“Dataisthenextgenerationinside...SQListhenewHTML”!TimO'eilly提出了Web2.0理念,称数据将是核心,SQL将成为“新的HTML"; SQL/2006:定义了SQL与XML(包含XQuery)的关联应用; 2006:Sun公司将以SQL基础的数据库管理系统嵌入JavaV6 2007:SQLServer2008(Katmi)在过去的SQL2005基础上增强了它的安全性,主要在:简单的数据加密,外键管理,增强了审查,改进了数据库镜像,加强了可支持性。 SQLServer的基本信息 SQLServer是一个关系数据库管理系统。它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,于1988年推出了第一个OS/2版本。在WindowsNT推出后,Microsoft与Sybase在SQLServer的开发上就分道扬镳了,Microsoft将SQLServer移植到WindowsNT系统上,专注于开发推广SQLServer的WindowsNT版本。Sybase则较专注于SQLServer在UNIX?操作系统上的应用。数据库引擎是SQLServer系统的核心服务,负责完成数据的存储、处理和安全管理。

sqlserver2005分割字符串,循环输出示例

create function f_splitstr(@source varchar(500),@split varchar(5)) returns @temp table(tid varchar(50)) as begin declare @ch as varchar(50) set @source=@source+@split while(@source<>'') begin set @ch=left(@source,charindex(',',@source,1)-1) insert @temp values(@ch) set @source=stuff(@source,1,charindex(',',@source,1),'') end return end --select tid from dbo.f_splitstr('xxxxxxx,ttttt,yyyyyy,ererer',',') --select getdate() declare @i int,@countNum int, @para varchar(50) declare tid_cursor CURSOR for select tid from dbo.f_splitstr('xxxxxxx,ttttt,yyyyyy,ererer',',') open tid_cursor FETCH NEXT FROM tid_cursor into @para WHILE@@FETCH_STATUS= 0 BEGIN print @para FETCH NEXT FROM tid_cursor into @para END; CLOSE tid_cursor DEALLOCATE tid_cursor GO

熟悉SQLserver2005系统

西北师范大学计算机科学与工程学院学生实验报告 学号201271040109 专业软件工程班级软件工程1班姓名郭宏乐 课程类型 课程名称熟悉SQLserver2005系 统 实验名称熟悉SQLserver2005系统 实验目的:1:熟悉SQLserver2005系统. 2:学会安装SQLserver2005系统。 3学会运用SQLserver2005系统。 实验内容: 1实验步骤: (1)SQLserver2005安装: 安装过SQL Server的人可能知道,它的有些服务要依赖于IIS,所以为了保证数据库的顺利安装,先启用IIS服务吧!Win7比XP好的一点是:启用IIS功能无需借助系统安装盘了,只要在控制面板里启用即可,如图: step1

step2 第三步需要注意的是,选中红框中的复选项,分别为“Internet Information Services 可承载的Web 核心”、“Web 管理工具”和“万维网服务”,这里我不确定“Web 管理工具”是否需要,因为我选中它们的父节点“Internet 信息服务”后选中了它的一些子项,多选总比少选全面,需要将它们的子项全部选中才显示为“√”,否则显示为“■”,记住,一定要显示为“√”才行,效果就和step3一样就可以了!点击确定后会出现线面的框框

如果我们不启用IIS功能,在后续安装SQL Server时会遇见如图画面 到此,IIS功能就算启用完成了,下面开始安装SQL Server 安装文件解压后是一个ISO的镜像,其实是一个DVD文件,将两张光盘合并到一起了,所以你的电脑需要安装虚拟光驱,虚拟光驱不会用请先百度一下,我就不在这里赘述了。 首先启动虚拟光驱软件,把SQL Server的镜像加载进来,如图

SQLServer2005函数大全

SQL Server 2005 函数大全 字符串函数 (2) 日期和时间函数 (3) 日期部分 (5) 数学函数 (6) 数据类型转换函数 (7) 日期类型数据转换为字符数据类型的日期格式的部分样式表 (8) 系统函数 (11) 排名函数 (11) 聚合函数 (12)

字符串函数 表达式:是常量、变量、列或函数等与运算符的任意组合。以下参数中表达式类型是指表达式经运算后返回的值的类型 函数名称参数示例说明 ascii (字符串表达式) select ascii('abc') 返回 97返回字符串中最左侧的字符的ASCII码。 char(整数表达式) select char(100) 返回 d 把ASCII 码转换为字符。 介于0 和255 之间的整数。如果该整数表达式不在此范围内,将返回NULL 值。 charindex (字符串表达式1,字符串表达式 2[,整数表达式]) select charindex('ab','BCabTabD')返回3 select charindex('ab','BCabTabD',4)返回6 在字符串2中查找字符串1,如果存在返回第一个匹配的 位置,如果不存在返回0。如果字符串1和字符串2中有一个 是null则返回null。 可以指定在字符串2中查找的起始位置。 difference (字符串表达式1,字符串表达式2) select difference('Green','Greene')返回4 返回一个0到4的整数值,指示两个字符表达式的之间的相似程度。0 表示几乎不同或完全不同,4表示几乎相同或完全相同。注意相似并不代表相等 left (字符串表达式,整数表达式) select left('abcdefg',2) 返回 ab返回字符串中从左边开始指定个数的字符。 right (字符串表达式,整数表达式) select right('abcdefg',2) 返回fg返回字符串中从右边开始指定个数的字符。 len(字符串表达式) select len('abcdefg')返回 7 select len('abcdefg ') 返回7 返回指定字符串表达式的字符数,其中不包含尾随空格。lower (字符串表达式) select lower('ABCDEF')返回 abcdef返回大写字符数据转换为小写的字符表达式。 upper (字符串表达式) select upper('abcdef')返回 ABCDEF返回小写字符数据转换为大写的字符表达式。 ltrim (字符串表达式) select ltrim(' abc')返回 abc返回删除了前导空格之后的字符表达式。 rtrim(字符串表达式) select rtrim('abc ')返回 abc返回删除了尾随空格之后的字符表达式。 patindex (字符串表达式1,字符串表达式2) select patindex('%ab%','123ab456')返回4 select patindex('ab%','123ab456')返回0 select patindex('___ab%','123ab456')返回1 select patindex('___ab_','123ab456')返回0 在字符串表达式1中可以使用通配符,此字符串的第一个 字符和最后一个字符通常是%。 %表示任意多个字符,_表示任意字符 返回字符串表达式2中字符串表达式1所指定模式第一次出现 的起始位置。没有找到返回0 reverse (字符串表达式) select reverse('abcde')返回 edcba返回指定字符串反转后的新字符串space (整数表达式) select'a'+space(2)+'b' 返回 a b返回由指定数目的空格组成的字符串。

SQLServer2005完全卸载全攻略

SQLSERVER 2005卸载方法 SQL SERVER 2005不象SERVER 2000所有组件都汇总在一起,所以卸载时特别麻烦,如果不按正常的方法卸载,重新安装是不可能安装上去的。因为SQL SERVER 2005组件都是分散的,所以,必须一个一个的卸载,且要用到两个附加工具(Windows Installer Clean Up.(msicuu2.exe) 文件和SRVINSTW.exe文件),方法如下: 1.如其它软件卸载时一样,打开《控制面板》-新增删除程式 注意:卸载顺序,反向卸载: Microsoft SQL Server VSS Writer Microsoft SQL Server Setup Support Files(English) Microsoft SQL Server Native Client Microsoft SQL Server 2005 Books Online(English) Microsoft SQL Server 2005 Backward compatibillty Microsoft SQL Server 2005

2.安装Windows Installer Clean Up.(msicuu2.exe文件)。安装完后运行 选定下面条目,然后按《Remove》: Microsoft SQL Server VSS Writer Microsoft SQL Server Setup Support Files(English) Microsoft SQL Server Native Client Microsoft SQL Server 2005 Tools Microsoft SQL Server 2005 Books Online(English) Microsoft SQL Server 2005 Backward compatibillty Microsoft SQL Server 2005 3.运行SRVINSTW.exe文件,如图:

SQLServer2005查看所有存储过程

如果你想更好的了解SQL Server 2005列出所有存储过程的实际操作的相关内容的话,如果你想更好的了解SQL Server 2005列出所有存储过程的实际操作的相关内容的话,下面的文章你不妨浏览,望你能会获得自己想要的东西。 对于数据库管理员来说,可以经常想了解一些之前未听说过的存储过程,特别是无文档类型的存储过程。或许是用这些存储过程,能够简化日常的数据管理。 对于数据库管理员来说,可以经常想了解一些之前未听说过的存储过程,特别是无文档类型的存储过程。或许是用这些存储过程,能够简化日常的数据管理。 为了查找这些存储过程,你可以花时间在互联网搜索,查看一些你还未知道的存储过程,也许在一两个小时您可能会发现你想要...也许你很幸运的找到,其他人在他们的文章中列出所有的存储过程,函数和视图,并介绍了如何使用这些存储过程。 但其实,您可以在一分钟之内就可以自己列出这些存储过程、函数和视图的清单!这份名单甚至包括SQL Server中所有无文档的存储过程。通过这个清单,你就可以确定你所想要找的存储过程。 SQL Server 2005实际上保存了所有存储过程的列表,包括有文档的、无文档的,甚至是用户自定义的!所有这些信息,都包含在系统表中。最简单的方法是使用一个系统视图,特别是sys.all_objects这个视图来查阅。 您也可以使用sys.procedures目录视图,但我的测试结果,发现这个视图会过滤掉一些储存过程。 您也可以使用系统储存过程sp_stored_procedures返回当前环境中的存储过程列表,但这个存储过程同样也限制了存储过程返回值。 通过对比,我觉得:如果想获得SQL Server 2005中所有的储存程序,建议使用sys.all_objects 这个系统视图,sys.Procedures或sp_Stored_Procedures这两个视图会因为某些未知原因,过滤掉一些内容,造成信息不全。 存储过程信息是存储在各自用户数据库中的系统表中的。SQL Server 2005保存了存储过程的唯一标识信息,如存储过程的名称、创建时间、修改时间、是否来自微软等等。 如何确保所有的用户数据库都能够自动创建这些存储过程呢? 当SQL Server部署完成后,微软提供的存储过程,是保存在master数据库中的。当您新建一个数据库时,master数据库将作为模板数据库,因此,master数据库中的所有存储过程将自动创建到你所新建的数据库中。 如果你想创建一个存储过程,并希望能够自动分发到所有的数据库中,你可以在master数据库中建立该存储过程,这样之后新创建的数据库中,将自动包含你新建的这个存储过程;但对于之前已经存在的数据库,你仍需要到每个数据库中手动创建这个存储过程。

sqlserver2005双机热备

SQL Server 2005 双机热备的实现 摘自:北京洪鑫基业科技发展有限公司 测试环境: 1、宿主机 硬件配置:PIV2.4G/1.5G-DDR400/80G-PATA-7200pm/8139C-NIC 操作系统:Microsoft Windows XP Pro With SP2 ENU 虚拟平台:VMware GSX 3.2.1 2、VirtualHost Microsoft Cluster NodeA 硬件配置:PIV2.4G/512M/10G/vlance-NIC/vmxnet-NIC 操作系统:Microsoft Windows Server 2003 EE With SP1 CHS 网卡信息:vlance-NIC:10M 全速半双工/HeartBeat/IP192.168.236.250 vmxnet-NIC:1000M全速全双工 /Public/IP192.168.199.250/GW192.168.199.2/DNS192.168.199.250/WINS192.168.199.250 承载服务:DC+DNS+WINS+IIS 3、VirtualHost Microsoft Cluster NodeB 硬件配置:PIV2.4G/512M/10G/vlance-NIC/vmxnet-NIC 操作系统:Microsoft Windows Server 2003 EE With SP1 CHS

网卡信息:vlance-NIC:10M全速半双工/HeartBeat/IP192.168.236.251 vmxnet-NIC:1000M全速全双 工/Public/IP192.168.199.251/GW192.168.199.2/DNS192.168.199.251/WINS192.168.199.251 承载服务:DC+DNS+WINS+IIS 4、Virtual 4G Pln:Qdisk500M/Sdisk3500M 注意:本次测试将仲裁盘和资源盘放在了一起,实际中最佳的做法应当单独配置一个物理磁盘作仲裁使用,为提高安全性还应该为仲裁磁盘配置RAID1。 5、MSCS IP 192.168.199.200 目标实现:成功部署SQL Server 2005群集/HostName SQL2005/IP192.168.199.201 群集实施: 1、我手上的SQL2005为企业中文版2CD。首先放入第一张盘,点击“服务器组件、工具、联机丛书和示例”开始SQL2005的群集安装,安装程序会自动检测当前是否为群集环境并为群集安装准备。小提示:MSCS默认环境下,群集组资源中缺少MSDTC组件,所以需要先添加MSDTC后再开始SQL2005的群集安装,否则会出现警告并停止!

SQLserver简介

Introduction to SQL Server By Samuel Relational databases have been around for 30 years, but they were not the original kind ofdatabase, nor are they the newest kind of database. XML and object-oriented data structures haveevolved in recent years. But relational databases are still by far the most popular kind of database available and will be for some time to come. SQL is the abbreviation of Structured Query Language and it is for relational databases, as the title indicates this is only for fresher who has just started the carrier or who is waiting to open up the carrier in the application programming side. But that does not mean this article is a tutorial for a fresher who does not know anything about SQL.This article is meant for who already have a little knowledge in SQL and want toimprove it. What Does SQL Do? F irst, SQL is the premier tool for viewing information from a relational database. It doesn’t just give you a data dump. SQL gives you sophisticated tools to summarize, consolidate, and calculate from the data. Using table relationships, data can be combined from multiple tables in a number of ways. With a properly designed database, SQL can answer practically any question about the data. Second, SQL provides commands to manipulate the data in a relational database. Records can be updated and added to or deleted from a table. Here is SQL as a database language really shines. Procedural programming languages, such as BASIC, might require several lines of code to update a record in a database table. In addition, procedural programming languages would have to use some sort of looping structure to repeat this process on every record. SQL operates on an entire set of records all at the same time. SQL is like haiku for programmers; often a dozen words or fewer can delete or change thousands of records. Finally, SQL is a complete data definition language (DDL). The database itself can be created along with all tables, fields, primary keys, and relationships. Add to that the record insert commands, and you can have a complete database and all its data expressed in programming code. This greatly enhances a database programmer’s ability to work remotely or to port data enhancements among various installations. The prerequisite for learning SQL is knowledge in Discrete Mathematics (Set Theory,Relations and Functions). Although it is not necessary to learn all the

sqlserver2005简介

sql server2005简介 一、企业级数据管理 在当今的互联世界中,数据和管理数据的系统必须始终为用户可用且能够确保安全,有了S QL Server 2005,组织内的用户和IT专家将从减少应用程序宕机时间、提高可伸缩性及性能、更紧密的安全控制中获益。SQL Server 2005 也包括了很多新的和改进的功能来帮助企业的IT团队更有效率的工作。SQL Server 2005 包括了几个在企业级数据管理中关键的增强: 易管理 可用性 可伸缩性 安全性 1、易管理 SQL Server 2005 能够更为简单的部署、管理和优化企业数据和分析应用程序。作为一个企业数据管理平台,SQL Server 2005提供了一个唯一的管理控制台,使得数据管理人员能够在组织内的任何地方监视、管理和调谐企业中所有的数据库和相关的服务。它还提供了一个可扩展的管理架构,可以更容易的用SQL管理对象(SMO)来编程,使得用户可以定制和扩展他们的管理环境,独立软件开发商(ISV)也能够创建附加的工具和功能来更好的扩展应用。 SQL Server 管理工具集 SQL Server 2005 通过提供一个集成的管理控制台来管理和监视SQL Server关系型数据库、集成服务、分析服务、报表服务、通知服务、以及分布式服务器和数据库上的SQL Mob ile,从而大大简化了管理的复杂度。数据库管理员可用同时执行如下任务:编写和执行查询,查看服务器对象,管理对象,监视系统活动,查看在线帮助。SQL Server 管理工具集包括一个使用T-SQL、MDX、XMLA和SQL Server Mobile版等来完成编写、编辑和管理脚本、存储过程的开发环境。管理工具集很容易和源码控制相集成,同时,管理工具集也包括一些工具可用来调度SQL Server Agent 作业和管理维护计划以自动化每日的维护和操作任务。

SQLServer2005配置文件

【引用】SQL Server 2005 Express 远程访问设置方法 C# 2011-04-06 19:43:24 阅读3 评论0 字号:大中小订阅 本文引用自田园《SQL Server 2005 Express 远程访问设置方法》 SQL Server 2005 Express 作为微软数据库的低端解决方案,在开发小型应用和WEB应用中有广泛的使用。但是SQL Server 2005 Exrpress在默认安装下只允许本机访问,如何启用网络访问功能就很有必要, 现在我简单的介绍一下。 1、确认成功安装SQL Server 2005 Express和数据库服务已经启动。安装完成后,可以通过随SQL Server 2005 Express一同安装的工具SQL Server Configuration Manager 查看数据库服务和其他的配置 信息。 上图显示数据库服务已经启用。 2、查看SQL Server Express 2005 网络配置信息(SQL Server 2005 Network Configuration――> Protocols for SQLEXPRESS)。默认的情况下右边列表中的Named Pipes和TCP/IP的状态为Disable,即没有启用。右键点击这两项,在弹出菜单中选中Enable启用这两个协议,如下图。

3、在TCP/IP协议上双击鼠标,弹出对话框。修改对话框Protocol属性页中的“Listen All ”项设为“no”。IP Address属性页中,修改你要数据库服务监听的IP地址的属性,修改Enabled属性为Yes,修改TCP Dynamic Ports属性为空,TCP Port项在默认安装下为空,现在修改为我们监听端口1433。修改后的状态 如下图所示;

SqlServer2005 各版本区别

SQL2005 分五个版本,如下所列, 1.Enterprise(企业版), 2.Development(开发版), 3.Workgroup,(工作群版) 4.Standard,(标准版) 5.Express.(嗯,估且就叫它简易版吧) 这几个版本,我们究竟应该使用哪一版呢? 这是许多初学SQL2005的人最常问的问题。 我简单的比较一下Enterprise, Development 和Express 等三个版本:以功能言,Enterpr ise 版和Development 版的功能一模一样。两者的差别,除了授权不同外,最主要的差别是: Enterprise版的数据库引擎只能安装在Win2003Server(或其他Server)。 如果你想安装在WindowsXP Pro系统上,你应该安装SQL2005Development版(开发版)。 注:有人问,什么是「数据库引擎」。嗯,数据库引擎是SQL2005的核心,是最主要的数据库管理功能模块。没有它,就不是数据库管理系统了。 很多人下载SQL2005Express版,因为它是免费的,可以直接从微软网站上下载。但是,它除了支持的内存比较少外,最主要的是 它缺少相当于SQL2000下的「企业管理器」和「查询分析器」。 注:SQL2000下的「企业管理器」和「查询分析器」在SQL2005已合为一,称为Managem ent Studio。 因此,如果你是初学者,如果你只是想要在家里学习学习,如果你的环境是WindowsXP Pro,那么,你应该选择的是SQL2005Development(开发版),而不是SQL2005Enterprise(企业版)或SQL2005Express(简易版)。 详细区别: 可以在生产环境中使用所有版本的SQL Server 2005,但SQL Server 2005 Devel oper Edition 和SQL Server 2005 Evaluation Edition 除外。以下段落介绍SQL Serv er 2005 的多个版本。 SQL Server 2005 Enterprise Edition(32 位和64 位) Enterprise Edition 达到了支持超大型企业进行联机事务处理(OLTP)、高度复杂的数据分析、数据仓库系统和网站所需的性能水平。Enterprise Edition 的全面商 业智能和分析能力及其高可用性功能(如故障转移群集),使它可以处理大多数关键业务的企业工作负荷。Enterprise Edition 是最全面的SQL Server 版本,是超大型企业的理想选择,能够满足最复杂的要求。 SQL Server 2005 Evaluation Edition(32 位和64 位) SQL Server 2005 还推出了适用于32 位或64 位平台的180 天Evaluati on Edition。SQL Server Evaluation Edition 支持与SQL Server 2005 Enter prise Edition 相同的功能集。可以根据生产需要升级SQL Server Evaluation Edi tion。 SQL Server 2005 Standard Edition(32 位和64 位)

SQLSERVER2005服务器角色

服务器角色 当几个用户需要在某个特定的数据库中执行类似的动作时(这里没有相应的Windows用户组),就可以向该数据库中添加一个角色(role)。数据库角色指定了可以访问相同数据库对象的一组数据库用户。 数据库角色的成员可以分为如下几类: Windows用户组或用户账户 SQL Server登录 其他角色 SQL Server的安全体系结构中包括了几个含有特定隐含权限的角色。除了数据库拥有者创建的角色之外,还有两类预定义的角色。这些可以创建的角色可以分为如下几类: 固定服务器 固定数据库 用户自定义

注意: 您不能添加、修改或删除固定服务器角色。另外,只有固定服务器角色的成员才能执行 上述两个系统过程来从角色中添加或删除登录账户。 sa登录 sa登录是系统管理员的登录。在以前的SQL Server版本中不存在角色,sa 登录具有所有可能的关于系统管理工作的权限。在SQL Server 2005中,sa登录保持了向后兼容性。sa登录永远是固定服务器角色syadmin中的成员,并且不能从该角色中删除。 注意: 只有当没有其他方法登录到SQL Server系统中时,再使用sa登录。 2 固定服务器角色及其权限 在某个SQL Server系统中,每个固定服务器角色都有其隐含的权限。使用系统过程sp_srvrolepermission可以浏览每个固定服务器角色的权限。该系统过程的语法形式为: sp_srvrolepermission[[@srvrolename =] 'role'] 如果没有指定role的值,那么所有的固定服务器角色的权限都将显示出来。下面的部分将讨论每个固定服务器角色的权限。 2.1. sysadmin 固定服务器角色sysadmin的成员被赋予了SQL Server系统中所有可能的权限。例如,只有这个角色中的成员(或一个被这个角色中的成员赋予了CREATE D ATABASE权限的用户)才能够创建数据库。 固定服务器角色和sa登录之间有着特殊的关系。sa登录一直都是固定服务器角色中的成员,并且不能从该角色中删除。 2.2. serveradmin 固定服务器角色serveradmin的成员可以执行如下的动作:

Mysql数据导入到sqlserver2005详细教程,有图有真象

Mysql数据导入到sqlserver2005详细(有图有真象) 1.安装mysql数据库的ODBC驱动,mysql-connector-odbc-5.1-win3 2.msi (最好是下载这个版本的,因为3.51版本的导入后中文会出现乱码) mysql-connector-odbc-5.1-win32.msi下载地址: https://www.doczj.com/doc/0816628659.html,/detail/jingxize/4106645 软件的安装没有什么可说的,直接下一步,下一步就行了。 2.打开控制面板\管理工具\数据源ODBC,在用户DSN中添加一个MySQL ODBC 5.1数据源。

3.在登录login选项卡中输入数据源名称Data Source Name,此处输入MysqlDNS;然后输入服务器Server,用户 User,密码Password,输入正确后选择要导入的数据库,我这里的是pcc,点击ok就可以了。 如果安装的是5.1版本的话,不用考虑字符编码的问题。 安装好了之后的效果如下图: 4.打开sql server2005 managent studio的对象资源管理器,新建一数据库data。选择该数据库,单击右键选择所 有任务\导入数据。

5.选择数据源,用户/系统DSN为MysqlDNS。其余根据向导进行,即可将数据从MySql数据库导入到MSSQL 数据库中。 这里的来源就是我们在第三步添加的用户dsn驱动程序,dsn就是我们添加驱动程序时data source name,数据项是自动生成的。 点击下一步

继续下一步

继续下一步

相关主题
相关文档 最新文档