使用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 --要刪除的約束