select @@VERSION --查询表的版本信息,--是单行注释 /*这种是多行注释*/
T-SQL:微软在遵守SQL标准的基础之上,对sqlserver数据库做的扩展(例如 IF 和 WHILE)
1、sys.databases:数据库
2、sys.objects:表,视图,存储过程
3、sys.indexes:索引
索引数据库名称需要用master.dbo.sysdatabases
后面在讲索引是什么意思,这里就理解为查找就可以了。
在创建数据库之前先判断数据库是否存在,如果已经存在是无法创建的,需要删除在创建。
exists【存在】 查询到表 用dbo.sysobjects来索引数据库
if exists(select * from sys.databases where name='NetBarDB')--也可以用dbid=db_ID('NetBarDB')一样的只是不好记,习惯用name='NetBarDB' begin --开始相当于{ use master --使用 系统master数据库 alter database NetBarDB --更改alter 数据库database 数据库名称NetBarDB set single_user --设置数据库为SINGLE_USER【单个用户】模式,减少锁定时间 --一般很快, 但有时数据库可能有人在链接,就会很慢;可以加上一个with rollback immediate, 将未提交的修改立刻回滚 with rollback immediate --立即断开所有连接;with【跟,和...一起】rollback 【回滚,恢复到初始状态】immediate【立刻,马上】 drop database NetBarDB --删除数据库drop database 数据库名,为了避免数据库还在使用状态无法删除,所以要加上上面的代码 end --结束相当于} --drop【使降落,减少】语句将表所占用的空间全部释放,达到删除空间的效果 create database NetBarDB --创建数据库create database 数据库名 go --批处理(数据库无法自动运行下一句代码,需要加go来继续代码的运行) use NetBarDB --打开数据库 go
重新创建一个数据库到这里结束,其实不需要判断,可直接use数据库名打开数据库也可以避免删除会丢失数据,在原有的数据库做数据更改,视情况而定。
创建表也是一样有同名的表,需要删除才能创建,可是有点表添加了外键约束无法删除,所以删除表时有时候需要,查询当前表外键约束来源。需要删除外键约束才能删除表。
什么是约束?后面在细说,比如主键有个递增效果,这个就是主键约束。外键约束就可以将两个表连接起来的关键字段。
查询表的外键信息,比如说可以查询到当前表【PCInfo】被哪些表加了约束(约束名,ID,表名)都查出来。
select FK.name,FK.object_id,object_name(FK.parent_object_id) as referenceTableName --查询三个字段外键的键名,id ,约束表名:指被哪个表设置了外键约束。 from sys.foreign_keys as FK join sys.objects as O on FK.referenced_object_id=O.object_id where O.name = 'PCInfo' --PCInfo是取的表名,指需要查询的表名
创建表
alter table 约束的表名 drop constraint 约束名; ----可以用来删除掉相应表的约束,表名(referenceTebleName查到的信息),约束名(name得到的信息,每次查都会发生变化,这个是随机改变的)。
if exists(select * from sys.objects where name='PCInfo') begin alter table recordInfo drop constraint FK__recordInfo__PCId__619B8048; --这里删除约束是因为存在外链约束,FK__recordInfo__PCId__619B8048约束的键名上面查询到的,随机改变需要查复制粘贴过来。 drop table PCInfo --删除表:drop table 表名 end --创建表:create table 表名 create table PCInfo ( PCId int primary key identity, -- primary key 主键 identity(1,1) 自增不写括号数字默认1,1;意思是1开始后面的每个加1; PCUse int not null default 0, -- int整数类型;not null不为空;default 设定默认值为0; pcsex char(10) , --这种是可以为空不用传值也不报错 PCNote varchar(50) not null default '这个是默认值', PCScore int not null default 60 --得分 默认60分及格,最后一个字段不需要加英文逗号 )
创建一个外键约束表做演示
if exists(select * from sys.objects where name='recordInfo') begin drop table recordInfo --这里没有创建外键约束,可以直接删除。 end create table recordInfo ( recordId int primary key identity, PCId int references PCInfo(PCId) not null, --设置外键约束 beginTime datetime default getDate(), endTime datetime, free int check(free>0) ) --语句最后一句代码结束可以不用加逗号;表结束不需要加go也可以自动执行下面代码 select *from PCInfo select *from recordInfo