使用T-sql建库建表建约束
为什么要使用sql语句建库建表?
现在假设这样一个场景,公司的项目经过测试没问题后需要在客户的实际环境中进行演示,那就需要对数据进行移植,现在问题来了:客户的数据库版本和公司开发阶段使用的数据库不兼容怎么移植?
行之有效的办法就是编写比较通用的SQL语句,编写完毕后存入*.sql文件中,最后复制到客户的计算机中,并执行*.sql文件中的SQL语句,从而实现后台数据库的移植。所以我们很有必要掌握如何使用SQL语句,实现创建数据库、创建表、添加约束和创建登录账户等!
使用SQl语句创建和删除数据库
创建数据库
语法:
create database 数据库名
on 【primary】
(
<数据文件参数> 【,……..N】 【<文件组参数>】
)
【log on】
(
{<日志文件参数> 【,……..N】 }
)
数据文件的具体参数如下:
(【name=逻辑文件名,】
filename=物理文件名
【,size=大小】
【,maxsize={最大容量|unlimited}】
【,filegrowth=增长量】) 【,………N】
文件组的具体参数如下:
filegroup 文件组名 <文件参数> 【,………N】
其中,“【】”表示可选的部分,“{}”表示必需的部分。各参数的含义如下:
数据库名:数据库的名称,最长为128个字符。
primary:给选项是一个关键字,指定主文件组中的文件。
log on :指明事务日志文件的明确定义。
name:指定数据库的逻辑名称,这是在SQL Server中使用的名称,是数据库在SQL Server 中的标识符。
filename:指定数据库所在文件的操作系统文件名称和路径,该操作系统文件名和name的逻辑名称一一对应。
size:指定数据库的初始容量的大小。
maxsize:制定操作系统文件文件可以增长到的最大值。
filegrowth:指定文件每次增长的大小,当指定数据为0时,表示文件不增长。
提示:一个数据库可以有多个数据文件(一个为主数据文件其他的为次要数据文件)和多个日志文件组成,但不能没有数据文件和日志文件。
删除数据库
当我们创建数据库是如果该数据库已存在就需要先删除之后才能创建成功。
语法:
drop database 数据库名
那如何检测该数据库是否存在呢?
在SQL Server将数据库的清单存放在master系统数据库的sysdatabases表中,只需借助select语句查看sysdatabases表中是否存在该数据库的记录即可。
demo:
use master go --批处理语句和下面的T-SQL语句分开 exec sp_configure 'show advanced options',1--设置“show advanced options”参数为一获取修改"sp_cmdshell"系统高级选项的权限 go reconfigure --提交操作 go exec sp_configure 'xp_cmdshell',1--允许sql server调用数据库之外的操作系统命令 go reconfigure go exec xp_cmdshell 'mkdir E:\text'--在E盘创建文件夹“text” go --检测数据库中是否已存在数据库text_data if exists(select * from sysdatabases where name='text_data') drop database text_data --删除数据库text——data --创建数据库text——data create database text_data on primary ( name ='text_data1', filename ='E:\text\text_data1.mdf', size=10MB, maxsize =50MB, filegrowth=3MB ), ( name='text_data2', filename ='E:\text\text_data2.ndf' ) log on ( name ='text_log', filename ='E:\text\text_log.ldf', size =3MB, maxsizes=10MB, filegrowth=1MB )
使用SQL语句创建和删除表
创建表
create tabe 表名
(
列1 数据类型 列的特征,
列2 数据类型 列的特征,
……
)
其中”列的特征“包括是否为空(NULL)、是否为标识列(自动编号(IDENTITY(1,1)))、是否有默认值(DEFAULT)及是否为主建(PRIMARY KEY )等
删除表
同创建数据库一样如果该表已经存在我们需要先删除表在创建
语法:
drop table 表名
表的清单存放在该库的系统表sysobjects中
demo:
use text_data go if exists(select * from sysobjects where name ='textinfo')--检测textinfo表是否存在 drop table textinfo--删除表textinfo create table textinfo--创建表textinfo ( Tid int identity(1,1) primary key not null,--主键、标识列订、不可为空 Tinfo nvarchar(200) not null--不可为空 )
添加约束
语法:
alter table 表名
add constraint 约束名 约束类型 具体的约束说明
demo:
alter table textinfo--添加约束的表 add constraint fK_typeid foreign key(typeid) references texttype(typeid)--添加外建约束
删除约束
语法:
alter table 表名
drop constraint 约束名
demo:
alter table textinfo--要删除约束的表 drop constraint fK_typeid --要删除的约束