三、更新資料庫
(一)格式:具體格式請在“聯機叢書”中查找關鍵字“alter database”進行查詢
(二)相關示例:
1、向資料庫中添加檔案:下例建立資料庫,并更改該資料庫以添加一個 5 MB 大小的新資料檔案。
USE master
GO
CREATE DATABASE Test1
ON
(
NAME = Test1dat1,
FILENAME = 'c:/Program Files/Microsoft SQL Server/MSSQL/Data/t1dat1.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
GO
ALTER DATABASE Test1
ADD FILE
(
NAME = Test1dat2,
FILENAME = 'c:/Program Files/Microsoft SQL Server/MSSQL/Data/t1dat2.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
GO
2、向資料庫中添加由兩個檔案組成的檔案組:
下例在示例 A 中所建立的 Test1 資料庫中建立一個檔案組,并将兩個 5 MB 的檔案添加到該檔案組。然後下例将 Test1FG1 設定為預設檔案組。
USE master
GO
ALTER DATABASE Test1
ADD FILEGROUP Test1FG1
GO
ALTER DATABASE Test1
ADD FILE
(
NAME = test1dat3,
FILENAME = 'c:/Program Files/Microsoft SQL Server/MSSQL/Data/t1dat3.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
),
(
NAME = test1dat4,
FILENAME = 'c:/Program Files/Microsoft SQL Server/MSSQL/Data/t1dat4.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP Test1FG1
ALTER DATABASE Test1
MODIFY FILEGROUP Test1FG1 DEFAULT
GO
3、向資料庫中添加兩個日志檔案:下例向資料庫中添加兩個 5 MB 大小的日志檔案。
USE master
GO
ALTER DATABASE Test1
ADD LOG FILE
(
NAME = test1log2,
FILENAME = 'c:/Program Files/Microsoft SQL Server/MSSQL/Data/test2log.ldf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
),
(
NAME = test1log3,
FILENAME = 'c:/Program Files/Microsoft SQL Server/MSSQL/Data/test3log.ldf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
GO
4、從資料庫中删除檔案:下例将示例 B 中添加到資料庫 Test1 中的一個檔案删除。
USE master
GO
ALTER DATABASE Test1
REMOVE FILE test1dat4
GO
5、更改檔案:下例将示例 B 中添加到資料庫 Test1 中的一個檔案增加大小。
USE master
GO
ALTER DATABASE Test1
MODIFY FILE
(
NAME = test1dat3,
SIZE = 20MB
)
GO
2.3 使用SQL語句建立和删除表
一、建立表
(一)格式:
資料表的資訊一般存儲于各個資料庫中的sysobjects表中,在建立表格時,可以同IF EXISTS判斷語句一同使用
CREATE TABLE 表名
(
字段1 資料類型 列的特征,
字段2 資料類型 列的特征,
... ...
)
go
(二)參數分析:
1、字段:表格中的字段名稱
2、資料類型:詳見SQLSERVER應用開發
3、列的特征:即對該列中的資料的相關限制,一般包括
1)非空限制:是否允許列中的資料為null,允許可寫為NULL或不寫,不允許寫為NOT NULL
2)預設值限制:當使用者沒有對列輸入資訊時,用預設值代替,可以寫為DEFAULT 預設值,如果字段為字元型,應寫為DEFAULT '預設值'
3)唯一限制:對于該列的資料采用唯一性原則,即沒有重複的元素,可以包括null值,但隻能有一個,可寫為UNIQUE
4)主鍵限制:将該列的資料設為主鍵,和唯一限制一樣,不存在重複的元素,但不能包括null,即主鍵不能為空
5)外鍵限制:将從表中列的資料與主表中相關主鍵的資料相關聯,可寫為references 主表名(主鍵列名)
6)檢查限制:對列中的資料進行格式上的限制,可寫為CHECK(條件表達式)
7)辨別列:對于列的資料由系統從種子基數開始,按照種子遞增量自動增加,可寫為IDENTITY(種子基數,種子遞增量)
(三)相關示例:
1、完整的表定義:
下例顯示 pubs 資料庫中所建立的三個表(jobs、employee 和 publishers)的完整表定義,其中包含所有的限制定義。
CREATE TABLE jobs
(
job_id smallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, -- 将該列定義為自動增長的聚焦索引主鍵
job_desc varchar(50) NOT NULL DEFAULT 'New Position - title not formalized yet', -- 将該列定義為非空字段并且有預設值
min_lvl tinyint NOT NULL CHECK (min_lvl >= 10), -- 限制該列資料隻能為隻于10的整數
max_lvl tinyint NOT NULL CHECK (max_lvl <= 250)
)
go
CREATE TABLE employee
(
emp_id empid CONSTRAINT PK_emp_id PRIMARY KEY NONCLUSTERED CONSTRAINT CK_emp_id CHECK (emp_id LIKE '[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]' or emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]'),
fname varchar(20) NOT NULL,
minit char(1) NULL,
lname varchar(30) NOT NULL,
job_id smallint NOT NULL DEFAULT 1 REFERENCES jobs(job_id),
job_lvl tinyint DEFAULT 10,
pub_id char(4) NOT NULL DEFAULT ('9952') REFERENCES publishers(pub_id), hire_date datetime NOT NULL DEFAULT (getdate())
)
CREATE TABLE publishers
(
pub_id char(4) NOT NULL CONSTRAINT UPKCL_pubind PRIMARY KEY CLUSTERED CHECK (pub_id IN ('1389', '0736', '0877', '1622', '1756') OR pub_id LIKE '99[0-9][0-9]'),
pub_name varchar(40) NULL,
city varchar(20) NULL,
state char(2) NULL,
country varchar(30) NULL DEFAULT('USA')
)
2、在列中使用 uniqueidentifier 資料類型:
下例建立含有 uniqueidentifier 列的表。該表使用 PRIMARY KEY 限制以確定使用者不會在表中插入重複的值,并在 DEFAULT 限制中使用 NEWID() 函數為新行提供值。
CREATE TABLE Globally_Unique_Data
(
guid uniqueidentifier CONSTRAINT Guid_Default DEFAULT NEWID(),
Employee_Name varchar(60),
CONSTRAINT Guid_PK PRIMARY KEY (Guid)
)
3、對計算列使用表達式:下例顯示如何使用表達式 ((low + high)/2) 計算 myavg 計算列。
CREATE TABLE mytable
(
low int,
high int,
myavg AS (low + high)/2
)
4、對計算列使用 USER_NAME 函數:下例在 myuser_name 列中使用 USER_NAME 函數。
CREATE TABLE mylogintable
(
date_in datetime,
user_id int,
myuser_name AS USER_NAME()
)
二、删除表
格式:DROP TABLE 表名
2.4 使用SQL語句建立和删除限制
一、添加限制:
(一)格式:
ALTER TABLE 表名
ADD CONSTRAINT 限制名 限制類型 具體的限制說明
(二)相關示例:
1、添加主鍵限制:
為stuInfo表的stuNo字段添加主鍵限制(PRIMARY KEY),限制名為PK_stuNo
ALTER TABLE stuInfo
ADD CONSTRAINT PK_stuNo PRIMARY KEY (stuNo)
2、添加唯一限制:
為stuInfo表的stuId字段添加唯一限制(UNIQUE),限制名為UQ_stuId
ALTER TABLE stuInfo
ADD CONSTRAINT UQ_stuId UNIQUE (stuId)
3、添加預設限制:
ALTER TABLE stuInfo
ADD CONSTRAINT DF_stuAddress DEFAULT ('位址不詳') FOR stuAddress
4、添加檢查限制:年齡在15到40之間
ALTER TABLE stuInfo
ADD CONSTRAINT CK_stuAge CHECK (stuAge BETWEEN 15 AND 40)
5、添加外鍵限制:将從表stuMarks中的stuNo列定義為外鍵并與主列中的stuNo列相關聯
ALTER TABLE stuMarks
ADD CONSTRAINT FK_stuNo FOREIGN KEY (stuNo) REFERENCES stuInfo (stuNo)
二、删除限制:
(一)格式: ALTER TABLE DROP CONSTRAINT 限制名
(二)相關示例:删除名為DF_stuAddress的限制
ALTER TABLE DROP CONSTRAINT DF_stuAddress
三、擴充:修改表格的方法
(一)格式:參見“聯機叢書”,查找關鍵字“ALTER TABLE”
(二)相關示例:
1、更改表以添加新列:
下例添加一個允許空值的列,而且沒有通過 DEFAULT 定義提供值。各行的新列中的值将為 NULL。
CREATE TABLE doc_exa
(
column_a INT
)
GO
ALTER TABLE doc_exa
ADD column_b VARCHAR(20) NULL
GO
EXEC sp_help doc_exa
GO
DROP TABLE doc_exa
GO
2、更改表以除去列:下例修改表以删除一列。
CREATE TABLE doc_exb
(
column_a INT,
column_b VARCHAR(20) NULL
)
GO
ALTER TABLE doc_exb
DROP COLUMN column_b
GO
EXEC sp_help doc_exb
GO
DROP TABLE doc_exb
GO
3、更改表以添加具有限制的列:下例向表中添加具有 UNIQUE 限制的新列。
CREATE TABLE doc_exc
(
column_a INT
)
GO
ALTER TABLE doc_exc
ADD column_b VARCHAR(20) NULL CONSTRAINT exb_unique UNIQUE
GO
EXEC sp_help doc_exc
GO
DROP TABLE doc_exc
GO