SqlServer對錶的基本操作 手動建庫建表 腳本建庫建表 SQL Server關係資料庫的數據表結構主要是由記錄(行)和欄位(列)構成,每一行代表唯一的一條記錄(Record),而每列則代表所有記錄中的一個域(Field)(也稱為欄位、屬性)。 註意:在同一個資料庫里,表的名字也必須是唯一的。在 ...
SqlServer對錶的基本操作
手動建庫建表
腳本建庫建表
SQL Server關係資料庫的數據表結構主要是由記錄(行)和欄位(列)構成,每一行代表唯一的一條記錄(Record),而每列則代表所有記錄中的一個域(Field)(也稱為欄位、屬性)。
註意:在同一個資料庫里,表的名字也必須是唯一的。在同一個表裡,列的名字必須是唯一的。
SQL Server中的表一共有兩類,即永久表和臨時表。
- 永久表都保存在資料庫文件中
- 臨時表雖然與永久表很相似,但它們卻是存儲在tempdb資料庫中的,而且當不再使用這些臨時表時,它們會被自動刪除。
SQL Server的數據類型可以分為系統內置的數據類型和用戶自定義數據類型。系統數據類型是系統內置的數據類型,主要有:
1)整數型
2)小數數據類型(精確數據類型)
3)近似數值型(浮點數據類型)
4)字元型和Unicode字元型
5)邏輯數值型
6)日期和時間數據
7)二進位數據類型
8)貨幣型數據
9)其他數據類型
定義:
數據完整性就是要求資料庫表中的數據具有準確性。
方法:
為了維護資料庫中數據的準確性,通常是在創建表時為表中的欄位定義約束,防止將錯誤的數據插入到表中。
分類:
SQL Server中數據完整性包含四種類型分別是:實體完整性、域完整性、參照完整性、用戶定義完整性。
(1)實體完整性
實體完整性將記錄(行)定義為特定表的唯一實體,即每一行數據都反映不同的實體,不能存在相同的數據行。
通過索引、UNIQUE(唯一)約束、PRIMARY KEY(主鍵)約束、標識列屬性可以實現實體完整性。
約束種類 | 功能描述 |
PRIMARY |
KEY(主鍵)約束,唯一識別每一條記錄的標誌,可以有多列共同組成 |
IDENTITY(自增)約束 |
列值自增,一般使用此屬性設置的列作為主鍵 |
UNIQUE(唯一)約束 |
可以使用UNIQUE約束確保在非主鍵列中不存在重覆值,但列值可以是NULL(空) |
(2)域完整性
域完整性指特定欄位項的有效性。
可以強制域完整性限制類型(通過使用數據類型)、限制格式(通過使用CHECK約束和規則)或限制可能值的範圍(通過使用FOREIGN KEY 約束、CHECK約束、DEFAULT定義、NOTNULL定義和規則)。
名稱 | 描述 |
CHECK(檢查)約束 |
用於限制列中值得範圍 |
FOREIGN KEY(外鍵) |
一個表中的FORENIGN KEY 指向另一個表中的PRIMARY KEY |
DEFAULT(預設值)約束 |
用於向列中插入預設值 |
NOT NULL(非空)約束 |
用於強制列不接受NULL(空)值 |
(3)參照完整性
在輸入或刪除數據行時,參照完整性約束用來保持表與表之間已定義的關係。在SQL Server 2016中,參照完整性通過FOREIGN KEY和CHECK約束,以外鍵與主鍵之間或外鍵與唯一鍵之間的關係為基礎。參照完整性確保鍵值在所有表中一致。這類一致性要求不能引用不存在的值,如果一個鍵值發生更改,則整個資料庫中,對該鍵值的所有引用要進行一致的更改。
(4)用戶定義完整性
用戶自定義完整性用來定義特定的規則。例如,輸入學生年齡時,只能輸入大於0的值。所有完整性類別都支持用戶定義完整性。這包括創建表中所有列級約束和表級約束、存儲過程以及觸發器。
創建表的步驟:
1)定義表結構:給表的每一列取欄位名,並確定每一列的數據類型、數據長度、列數據是否可以為空等。
2)設置約束:設置約束是為了限制該列輸入值的取值範圍,以保證輸入數據的正確性和一致性。
3)添加數據:表結構建立完成之後,就可以向表中輸入數據了。
create table
CREATE TABLE 表名
(列1定義,
列2定義,
列n 定義)
/*其中:
< 列定義 > ::= { 列名 數據類型 }
[ [ DEFAULT 約束表達式 ]
| [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]
]
[ < 列約束> ] [ ...n ]
*/
案例1.
創建帶有參照約束的學生表,學生表的表結構定義如下表所示。“學號”欄位為學生表的主鍵,“班級代碼”欄位為學生表的外鍵,它必須參照班級表中的“班級代碼”欄位的值。
CREATE TABLE 學生(
// identity表示自增列的意思,而intidentity(1,1)表示從1開始遞增,每次自增1。
// primary key的作用是定義主鍵;主鍵的值不可以重覆,也不可以為空
學號 char(12) IDENTITY(1,1) PRIMARY KEY,
姓名 varchar(20) NOT NULL, // not null為不為空
性別 char(2),
出身日期 datatime,
入學時間 datatime,
班級代碼 char(9) CONSTRAINT fk_bjdm REFERENCES 班級(班級代碼) )
// 代碼中的PRIMARY IDENTITY CONSTRAINT等關鍵字是對錶中各列進行完整性約束的一些詞語
表的查看
1、 使用系統存儲過程Sp_help 查看
使用系統存儲過程sp_help來查看表的屬性的方法是:在sp_help後面加上要看的表名作為參數。其格式如下:
EXEC sp_help 表名
例如,要查看上述在Students資料庫中所創建的學生表的屬性,可以使用如下語句: EXEC sp_help 學生表
如果用戶想查看該資料庫中所有表的屬性,則可以直接使用系統存儲過程sp_help後不帶任何參數來進行顯示。
2、使用SQL Server Management Studio(SSMS)查看
除了上述使用系統存儲過程來顯示表的屬性外,在SQL Server Management Studio中查看表的定義會更加方便。其方法如下:
1)、在【對象資源管理器】下展開資料庫並選中“表”選項,在需要查看表的名稱上右鍵單擊,在彈出的快捷菜單中選擇“屬性”選項,可以打開“表屬性”對話框,用戶可以查看表中每一列的定義。
表的修改
要修改表,可以使用ALTER TABLE語句或SQL Server ManagementStudio兩種方法來進行。
1、使用T-SQL 語句ALTER TABLE命令修改表
使用ALTER TABLE語句對錶進行修改常見的情況有以下幾種。
1、向表中添加新列
向表中添加新列時 : 需要在 ALTER TABLE 語句中使用 ADD子句。
語法格式如下:
修改表中列的定義 ALTER TABLE 表名 ALTER COLUMN 列名 <列屬性> ;
ALTER TABLE 表名 ADD 列名 數據類型 屬性1 屬性2……..
//【例】向教材表增加單價列,列名為單價,數據類型為float,預設空值,代碼如下:
ALTER TABLE 教材
ADD 單價 float(2) NULL;
GO
註意:向已存在的表中增加列時,應使新增加的列具有預設值或允許其為空值。添加列完成時,SQL Server將向表中已存在的行填充新增列的預設值或空值。如果既沒有提供預設值也不允許為空值,那麼新增列的操作將出錯,因為SQL Sever不知道該怎麼處理那些已經存在的行。
2、刪除表中的列
刪除表中的列需要使用ALTER TABLE語句的DROP COLUMN子句。 格式:
ALTER TABLE 表名 DROP COLUMN 列名 ; // column是欄位,也就是列!
【例】將教材表中建立的“單價”列刪除。其代碼如下:
ALTER TABLE 教材 DROP COLUMN單價;
GO
3、修改表中列的定義
修改表中某列的屬性定義語法如下:
ALTER TABLE 表名 ALTER COLUMN 列名 <列屬性> ;
例】將教材表中教材名稱欄位數據類型的長度修改為20
ALTER TABLE 教材 ALTER COLUMN 教材名稱 varchar(20);
GO
4、修改表中列的名稱
修改表中某列的列名語法如下:
EXEC SP_RENAME‘表名.原列名’,‘新列名’, ‘COLUMN’ ;
【例】將班級表中系部名稱修改為院系名稱
EXEC SP_RENAME ‘班級.系部代碼’,‘院系代碼’, ’COLUMN’;
GO
數據表中的數據操作
數據刪除
當省略WHERE語句時,將刪除表中所有的行。
註意:如果刪除的數據就直接來源於後面聲明的基本表,可以省略FROM命令
1)普通DELETE語句。
基本語法: DELETE FROM 表名 [WHERE 邏輯表達式 ]
2)關聯DELETE語句。
在部分刪除數據的任務中,需要使用其它表中的數據作為條件依據,此時就可用關聯DELETE。
DELETE 表名 [FROM 源表名 [ , … N ]] [WHERE 邏輯表達式 ]
【例】將“選課”表中的學分欄位值小於課程表中學分的課程刪除。
代碼如下:
DELETE 選課 FROM 選課 a,課程 b WHERE a.課程號=b.課程號 AND a.學分<b.學生
3)子查詢DELETE語句。
· 基本語法: DELETE FROM 表名 [WHERE 邏輯表達式 ]
【例】找出課程號在“選課”表中而又不在“課程”表中的記錄給予刪除。
代碼如下:
DELETE 選課 WHERE 課程號 NOT IN (SELECT 課程號 FROM 課程)
4)TRUNCATE TABLE語句 。
當需要快速清除某表的全部數據時,可以用TRUNCATE命令。TRUNCATE命令可以將表中所有數據刪除,但是並不刪除基本表,表的基本結構還存在。
基本語法: TRUNCATE TABLE 表名;
【例】清空“教材”表。
代碼如下: TRUNCATE TABLE 教材;
數據添加
INSERT插入數據時有兩種方式:
插入單行數據(使用關鍵字VALUES)和插入多行數據(使用關鍵字SELECT)。
1、使用INSERT語句插入單行數據
使用INSERT語句一次插入一行數據,是最常用的數據添加方法。
INSERT語句基本語法格式如下:
INSERT [INTO] <表名> [<欄位名列表>]
VALUES (值列表)
<欄位名列表>中個各欄位之間用逗號隔開,<值列表>中個各值之間也用逗號隔開。
在插入數據的時候,需要註意以下事項:
- 值列表與欄位名列表中的各項是一一對應的,每個數據值的數據類型也必須與對應欄位匹配。
- INSERT語句不能為標識列指定值,因為其中數據是由系統自動生成的。
- 對於非數值型數據需用單引號括起來。
有約束的欄位,輸入內容必須滿足約束條件。
對於不允許為空的欄位,必須要輸入內容,允許為空的欄位可以用NULL代替。
有預設值的欄位,如果沒有添加數據,系統會自動插入預設值。
如果<欄位名列表>省略,則對錶中所有列插入數據。
【例】向“教材表”插入一行數據。
INSERT INTO 教材(教材編碼,教材名稱,出版商名稱)
VALUES ('2008001','SQLServer','北京郵電大學')
// 由於本例是對錶中所有列插入數據,所以也可改為:
INSERT INTO 教材
VALUES ('2008001','SQL Server','北京郵電大學')
註意:只有當填入數據的數量、順序都與基本表中欄位一一對應的時候,才可以省略欄位名列表。
2、使用INSERT語句插入多行數據
如果需要把其他表中的多條記錄添加到當前表中,可以在插入數據時通過INSERT SELECT 語句可以實現將SELECT查詢語句的結果集添加到當前表中,格式如下:
INSERT [INTO] <當前表名>[<欄位名列表>]
SELECT <欄位名列表>
FROM 源表名 [, … N ]
[WHERE 邏輯表達式 ]
其中SELECT查詢語句的結果集中每個欄位必須要有列名,如果無列名必須聲明別名。
【例】新建一表,其名為“教材副表”,表結構完全與“教材表”相同。將“教材表”中出版商為北京郵電大學的記錄插入到該表中。代碼如下:
SELECT * INTO 教材副表 FROM 教材 WHERE 2=3
GO
註意:以上代碼僅僅只是建立了一張空表,表的結構和教材表的結構一致,卻沒有具體數據,因為用到查詢條件“WHERE 1=2”永遠不成立,這是一常用方法
INSERT INTO 教材副表(教材編碼,教材名稱,出版商名稱)
SELECT *
FROM 教材 WHERE 出版商名稱='北京郵電大學'
GO
在本例中,也可以把INSERT語句改為以下語句:
INSERT INTO 教材副表
SELECT *
FROM 教材 WHERE出版商名稱='北京郵電大學'
GO
註意:使用這種方法一定要杜絕表中有標識列的情況,因為INSERT語句不能為標識列指定值,系統會提示錯誤。
1. 使用INSERT語句插入單行數據
使用INSERT語句一次插入一行數據,是最常用的數據添加方法。
基本語法: INSERT [INTO] <表名> [<欄位名列表>] VALUES (值列表)
· 【例】向“教材表”插入一行數據。代碼如下:
INSERT INTO 教材(教材編碼,教材名稱,出版商名稱) VALUES ('2008001','SQL Server','北京郵電大學')
2. 使用INSERT語句插入多行數據。
如果需要把其他表中的多條記錄添加到當前表中,可以在插入數據時通過INSERT SELECT 語句可以實現將SELECT查詢語句的結果集添加到當前表中。
INSERT [INTO] <當前表名> [<欄位名列表>]
SELECT <欄位名列表>
FROM 源表名 [, … N ]
[WHERE 邏輯表達式 ]
【例】新建一表,其名為“教材副表”,表結構完全與“教材表”相同。將“教材表”中出版商為北京郵電大學的記錄插入到該表中。代碼如下:
SELECT * INTO 教材副表 FROM 教材 WHERE 1=2
GO
INSERT INTO 教材副表(教材編碼,教材名稱,出版商名稱)
SELECT *
FROM 教材 WHERE 出版商名稱='北京郵電大學'
GO
數據更新
2. 普通UPDATE語句
使用INSERT語句一次插入一行數據,是最常用的數據添加方法。
基本語法: UPDATE 表名 SET {欄位名 = 表達式 | NULL | DEFAULT } [ , …N] [ WHERE 邏輯表達式 ]
其中:
表名 :需修改的表的名稱
欄位名 = 表達式 | NULL | DEFAULT:指修改指定欄位的值
WHERE表示滿足什麼條件才能修改
【例】修改選課表中是資料庫基礎的所有課程號學分為從4改為3。代碼如下:
UPDATE 選課
SET 學分=3
WHERE 課程號 = (SELECT 課程號 FROM 課程 WHERE 課程名稱='資料庫基礎')
3. 關聯UPDATE語句
// 基本語法:
UPDATE 表名
SET {欄位名 = 表達式 | NULL | DEFAULT } [ , …N]
[ FROM 源表名 [ , … N ]]
[ WHERE 邏輯表達式 ]
例】用“選課表”中的成績來修改“成績表”中的期末成績。代碼如下:
UPDATE 成績
SET 期末成績=b.成績
FROM 成績a,選課b
WHERE a.課程號=b.課程號