1 create database yourschool
2 go
3
4 use yourschool
5 go
6
7
8 --创建表
9
10 create table teacher
11 (
12 tId int primary key identity(1,1), --identity设立自增长,从1开始每增加一条记录,主键值就增加1
13 tName varchar(20),
14 tSex varchar(6)
15 )
16
17 select * from teacher
18
19 go
20 --一个老师教多个学生,一个学生只有一个老师我们称这种关系叫做一对多的关系
21 --一的这面我们称为主键表,多的那面我们称为外键表,主键表不依赖外键表,也就是主键表不知道外键表的存在
22 create table student
23 (
24 sId int primary key identity(1,1),
25 sName varchar(20) not null,
26 sSex varchar(10),
27 tId int foreign key references teacher(tId)
28 --这里是设置外键约束,references表明引用的主键表是什么表括号里是主键表中被引用的字段,在这里tid,外键可以为空,比如在这个示例中,表明一个学生还没选老师。
29 )
30
31
32 --简单的insert语句(向表中增加一条数据)
33
34 insert teacher(tName,tsex) values('Micle','male')
35
36 --省略清单的insert语句
37
38 insert into teacher values('Bill','male')
39 go
40
41
42 select * from teacher
43
44
45
46 insert into student values('祥子','男',7)--因为有外键约束,所以不能成功,因为主键表teachr表中并没id为7的老师
47
48 insert into student values('祥子','男',1)
49 insert into student values('祥子弟','男',2) --成功,因为主键表中有tid为1的行(记录)
50
51 --无条件删除,慎用
52
53 select * from student
54
55 delete from student
56
57 --有条件删除
58
59 delete from student where sName like '祥_'
60 delete from student where sName = '祥子'
61
62 delete from student where sId = 16
63
64 --对主键表的删除操作
65
66 select * from teacher
67 select * from student
68
69 insert into teacher values('Rebica','female')
70
71 delete from teacher where tid = 1 --不能成功,因为编号为1的老师在外键表中有相应的学生
72
73 delete from teacher where tid = 3 --可以成功,因为rebica在外键表,学生表中没有对应的记录
74
75 --删除表
76
77 drop table teacher
78 go
79
80 --查看表属性
81 sp_help teacher
82 go
83
84 --查看表的行数和所用的存储空间大小
85 sp_spaceused teacher
86 go
87
88 --查看表和数据库对象间的关系
89 sp_depends student
90 go
91
92 select * from student
93
94 --索引,SQLServer中的每一行是没有前后顺序的,所以当查询一行时要执行全表扫描,建立索引可以生成一个只有一列的小的索引表可以加快查找速度。在键值上建立的索引是簇集索引(Clustered),每个表只有一个主键,所以在一个表中簇集索引只能有一个簇集索引根据键值进行排序,非簇集索引(Nonclustered)不进行排序。建立索引可加快查询速度,但有些情况也不是这样如:查找一个小表,或在一个大表中查找大多数数据就不能加快速度。当在一个大表中查找有限数据时会明显加快速度。
95
96 --适合建立索引的情况:经常被查询搜索的列,如经常在where子句中出现的列;在Order by子句中使用的列;是外键或主键的列;列值唯一的列。
97 --不适合建立索引的情况:查询中很少使用到的列;包含太多重复的值如性别列;数据类型为bit,text,image等的列不能建立索引。
98 --可以在多列上建立一个索引这叫复合索引,用复合索引代替多个单独的索引在数据操作期间所用的开销会更小
99
100 --创建索引
101
102 create table empPay
103 (
104 employeeId int not null,
105 basePay money not null,
106 commission decimal(2,2) not null
107 )
108 go
109
110 select * from empPay
111 delete from empPay
112 insert into empPay values(1,20,0.4)
113
114 create unique clustered index employeeIdIndex
115 on empPay(employeeId)
116 go
117 --删除索引
118 drop index empPay.employeeIdIndex
119 go
120
121
122 --编辑表格数据
123
124 --简单的insert语句(向表中插入数据)
125
126 insert teacher(tName,tsex) values('Jhon','male')
127
128 --省略清单的insert语句
129
130 insert into teacher values('Bill','male')
131 go
132
133 insert into student values('祥子','男',19)--因为有外键约束,所以不能成功,因为主键表teachr表中并没id为19的老师
134
135
136 --使用update修改数据
137 select * from teacher
138 --把id为1的老师修改
139
140 update teacher set tName = '李磊' where tId = 2
141 go
142
143 --update sudent set stuAvgrade = stuAvgrad + 20
144
145 --把名字叫bill的所有老师的名字修改
146 update teacher set tName = '张强' where tName = 'Bill'
147
148
149 select * from teacher
150
151 --批量更新
152 --把所有人的名字清为空串
153 update teacher set tName = ''
154 go
155
156 ---暂时不用
157 update teacher set tName = 'Jhon'
158 from (select top 2 * from teacher order by tName) as t1
159 go
160
161 select * from teacher
162
163
164 --删除表格数据
165
166 delete from teacher --删除所有表格数据
167 go
168
169 delete from teacher where tId = 1 -- 按条件删除表格数据
170
171
172 --利用子查询进行可控的批量更新
173 update teacher set tName = 'Lenon'
174 from(select top 2 * from teacher order by tName) as t1
175 where teacher.tName = t1.tName
176 go
177
178 select * from teacher