SQL表的管理及使用
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