表的基本操作
在數據庫中,表是由數據按一定的順序和格式構成的數據集合,是數據庫的主要對象。每一行代表一條記錄,每一列代表記錄的一個字段。
在關系數據庫中每一個關系都體現為一張表。
1.設計表
-
表包含的數據類型
-
表中的列數以及列的數據類型
-
哪些列允許空值
-
是否使用以及何處使用約束
-
哪些是主鍵,哪些是外鍵
2.數據類型
整型
- BIGINT 大整型 8字節
- INT 常用的整型 4字節
- SMALLINT 小整型 2字節
- TINYINT 微整型 0~255 1字節
- BIT 位類型 0和1 1字節
小數
- DECIMAL (p,s) 和 NUMERIC (p,s) 小數 p確定總位數(默認18),s確定小數位(默認0)
貨幣
- MONEY 貨幣值 8字節
- SMALLMONEY 比Money小 4字節
近似數字
- FLOAT 8字節
- REAL 4字節
日期和時間
- DATETIME 8字節 范圍 1753.1.1-9999.12.31
- SMALLDATETIME 4字節 1900.1.1-2079.12.31
字符串
- CHAR(n) n長度 范圍 1-8000 固定長度 小於n補空格
- VARCHAR(n) n長度 可變
Unicode字符串
-
NCHAR(n) 與char類型,兩個字節為一個存儲單位
-
NVARCHAR(n)
二進制字符串
-
BINARY(n) 長度固定 為n+4字節 小於n補0 常用於存儲圖像等數據
-
VARBINARY (n) 長度變化
-
IMAGE 存儲照片或圖像等
3.創建表
使用 CREATE TABLE 語句
CREATE TABLE
[database_name.[schema_name].|schema_name.]table_name
{(column_name column_property column_constraint)}[,...]
--切換數據庫的語法 use 數據庫名
use DB2
-- 創建學生表(學號,姓名,年齡,性別)
CREATE TABLE 學生表
(
學號 VARCHAR(15) NOT NULL,
姓名 CHAR(10) NOT NULL,
年齡 INT NULL,
性別 CHAR(5)
)
4.修改表
- 添加(列)屬性
ALTER TABLE 表名
ADD 屬性 數據類型[(長度)] [NULL|NOT NULL]
--為student表添加sno列
ALTER TABLE student
ADD sno VARCHAR(15) NOT NULL
ALTER TABLE student
add age int
- 修改數據類型
ALTER TABLE 表名
ALTER COLUMN 屬性 數據類型
--修改name數據類型為 VARCHAR(20)
ALTER TABLE student
ALTER COLUMN name VARCHAR(20)
- 刪除(列)屬性
ALTER TABLE 表名
DROP COLUMN 屬性
--刪除age
ALTER TABLE student
DROP COLUMN age
- 修改列名
EXEC sp_rename '表名.列名', '新列名'
- 修改表名
EXEC sp_rename '原表名', '新表名'
--修改列名 name-->sname
EXEC sp_rename 'student.name', 'sname'
--修改表名
EXEC sp_rename 'student', 'Student'
5.約束
1.主鍵約束 PRIMARY KEY
唯一確定表中每一條記錄的標識符
(一個表中只能有一個主鍵約束,為空的列不能創建主鍵約束)
2.外鍵約束 FOREIGN KEY
用於建立和加強兩個表數據之間的連接
(1.兩列的數據類型必須一致,2.引用的列必須是主鍵約束或唯一約束 3.兩列列名盡量保持一致)
3.唯一約束 UNIQUE
指定一個列或多個列的值具有唯一性(可以為空)
4.檢查約束 CHECK
設置檢查條件,以限制輸入值
5.默認約束 DEFAULT
插入操作中沒有提供輸入值時系統會自動加上指定值
創建約束
ALTER TABLE 表名
ADD CONSTRAINT 約束名 約束類型 (具體的約束說明)
--給學號添加主鍵約束
ALTER TABLE 學生表
ADD CONSTRAINT PK_學號 PRIMARY KEY (學號)
--給姓名添加唯一約束
ALTER TABLE 學生表
ADD CONSTRAINT UN_姓名 UNIQUE (姓名)
--給年齡添加檢查約束,年齡大於18
ALTER TABLE 學生表
ADD CONSTRAINT CK_年齡 CHECK (年齡>18)
--給性別添加默認約束 為男
ALTER TABLE 學生表
ADD CONSTRAINT DF_性別 DEFAULT '男' FOR 性別
--年齡 大於18 小於25
ALTER TABLE 員工信息表
ADD CONSTRAINT CK_年齡 CHECK (年齡>18 AND 年齡<25)
ALTER TABLE 員工信息表
ADD CONSTRAINT CK_部門 CHECK (單位部門='軟件測試' OR 單位部門='產品研發')
--創建一個成績表
CREATE TABLE 成績表
(
學號 VARCHAR(15) NOT NULL,
成績 INT
)
--給成績表的學號建立一個外鍵約束,引用學生表中的學號(加強兩表的聯系)
ALTER TABLE 成績表
ADD CONSTRAINT FK_學號 FOREIGN KEY (學號)
REFERENCES 學生表(學號)
刪除約束:
ALTER TABLE 表名
DROP CONSTRAINT 約束名
--刪除默認約束
ALTER TABLE 學生表
DROP CONSTRAINT DF_性別
--刪除成績表的外鍵約束
ALTER TABLE 成績表
DROP CONSTRAINT FK_學號
--刪除主鍵約束 (刪之前不能被引用)
ALTER TABLE 學生表
DROP CONSTRAINT PK_學號
創建表同時創建約束
在tsgl數據庫中,分別使用命令創建圖書表ts、讀者表dz、借閱表jy
/*
1)圖書表ts(書號(主鍵,字符型),書名(字符型),出版社(字符型),
類別(字符型),作者(字符型),出版時間(日期型),
價格(數值型,為正))
*/
USE tsgl
CREATE TABLE ts
(
書號 CHAR(20) PRIMARY KEY,
書名 CHAR(20),
出版社 CHAR(20),
類別 CHAR(20),
作者 CHAR(10),
出版時間 DATETIME,
價格 INT CHECK (價格>0)
)
/*
讀者表dz(編號(主鍵),姓名,單位(缺省值為千鋒教育),
性別(限制 男、女),電話(唯一約束))
所有屬性都是字符型
*/
CREATE TABLE dz
(
編號 CHAR(20) PRIMARY KEY,
姓名 CHAR(20),
單位 CHAR(25) DEFAULT '千鋒教育',
性別 CHAR(5) CHECK (性別='男' OR 性別='女'),
電話 CHAR(20) UNIQUE
)
/*
借閱表jy(書號(主鍵,ts的外鍵),編號(主鍵,dz的外鍵),
借閱日期(日期型),還書日期(日期型),還書標識(長度為2的字符型))
*/
CREATE TABLE jy
(
書號 CHAR(20) FOREIGN KEY REFERENCES ts(書號),
編號 CHAR(20) FOREIGN KEY REFERENCES dz(編號),
借閱日期 DATETIME,
還書日期 DATETIME,
還書標識 CHAR(2),
PRIMARY KEY(書號,編號) --聯合主鍵,一般放最后
)
6.刪除表
使用 DROP TABLE 語句
DROP TABLE 表名
--刪除Student表
USE DB2
DROP TABLE Student