表是數據庫存儲數據的基本單位。一個表包含若干字段和記錄。表的操作包含創建新表,修改表,刪除表。這些操作都是數據庫管理中最基本,也是最重要的操作。
具體而言,關於表的相關操作如下:
1,創建表的方法
2,表的完整性約束條件
3,查看錶結構的方法
4,修改表的方法
5,刪除表的方法
上面羅列的這些都會一一的整理到。OK,現在我們開始第一篇,創建表。
CREATE TABLE 表名(屬性名 數據類型[完整性約束條件],
屬性名 數據類型[完整性約束條件],
......
屬性名 數據類型);
1,‘表名’參數表示所要創建表的名稱,‘屬性名’參數表示表中字段的名稱,‘數據類型’參數指定字段的數據類型,‘完整性約束條件’參數指定字段的某些特殊約束條件。2,在使用CTEATE TABLE語句創建表時,首先要使用USE語句選擇數據庫,USE 數據庫名。如果沒有選擇數據庫,創建表時會出現‘No database selected’錯誤。
3,表名不能爲sql語言的關鍵字,比如create,update,order等都不能作爲表名。一個表中可以有一個或者多個屬性,定義時,字母大小寫均可,各屬性之間用逗號隔開,最後一個屬性後面不需要加逗號。
OK,現在我們來舉一個例子,現在我們數據庫要建立一張user表,建表語句如下:
CREATE TABLE `linkinframe`.`user` (
`id` INT NOT NULL,
`name` VARCHAR(5) NOT NULL,
`age` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`));
完整性約束條件是對字段進行限制,要求用戶對該屬性進行的操作符合特定的要求。如果不滿足完整性約束條件,數據庫系統將不執行用戶的操作。說白了,數據庫約束條件就是保證數據庫中數據的完整性。
上圖中,關於表的完整性約束有主鍵,外鍵,非空,唯一,自增,默認值。我們來一個一個整理。
- 1,設置表的主鍵
主鍵的最主要目的是幫助MySQL以最快的速度查找到表中的某一條信息。主鍵必須滿足的條件就是主鍵必須是唯一,非空且不重複的,表中任意兩條記錄的主鍵字段的值不能相同。當然,主鍵可以是單一的字段,也可以是多個字段的組合。
- 1),單字段主鍵
屬性名 數據類型 PRIMARY KEY
其中,‘屬性名’參數表示表中字段的名稱,‘數據類型’參數指定字段的數據類型。比如下面建表語句設定id爲主鍵。CREATE TABLE `linkinframe`.`user` (
`id` INT PRIMARY KEY ,
`name` VARCHAR(5) NOT NULL,
`age` INT UNSIGNED NOT NULL);
- 2),多字段主鍵
PRIMARY KEY(屬性名1,屬性名2,...,屬性名n)
比如下面建表語句,id和name兩個字段成爲主鍵,id和name兩者的組合可以確定唯一的一條記錄。CREATE TABLE `linkinframe`.`user` (
`id` INT ,
`name` VARCHAR(5) NOT NULL,
`age` INT UNSIGNED NOT NULL,
PRIMARY KEY(id,name));
- 2,設置表的外鍵
外鍵是表的一個特殊字段,如果字段sno是一個表A的屬性,且依賴於表B的主鍵。那麼,稱表B爲父表,表A爲子表,sno爲表A的外鍵。通過sno字段將父表B和子表A建立關聯關係,設置表的外鍵值在創建表設置某個字段爲外鍵,OK,現在我們來
整理一下外鍵設置的原則和外鍵的作用以及設置外鍵的方法。設置外鍵的原則就是必須依賴於數據庫中已存在的父表的主鍵,外鍵可以爲空值。
外鍵的作用是建立該表與其父表的關聯關係。父表中刪除某條信息時,子表中與之對應的信息必須有相應的改變。舉個例子:
stu_id是student表的主鍵,stu_id是grade表的外鍵,當stu_id爲‘123’的同學退學啦,就需要從student表中刪除該學生的信息,然後在grade表中stu_id爲‘123’的所有的信息也應該同時刪除,這樣可以保證信息的完整性。設置外鍵的基本語法規則如下:
CONSTRAINT 外鍵別名 FOREIGN KEY(屬性1.1,屬性1.2,...,屬性1.n) REFERENCES 表名(屬性2.1,屬性2.2,...,屬性2.n)
其中,‘外鍵別名’參數是爲外鍵的代號,‘屬性1’參數列表是子表中設置的外鍵,‘表名’參數是指父類的名稱,‘屬性2’參數列表是父類的主鍵。現在我們來實際操作下數據庫,首先我們創建一張主表:
CREATE TABLE `linkinframe`.`user` (
`id` INT NOT NULL,
`name` VARCHAR(5) NOT NULL,
`age` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`));
然後現在我們爲上面的user表創建一張從表,建表語句如下:CREATE TABLE `linkinframe`.`address` (
`id` INT NOT NULL,
`user_id` INT NULL,
`address_name` VARCHAR(45) NULL,
PRIMARY KEY (`id`),
INDEX `user_id_idx` (`user_id` ASC),
CONSTRAINT `user_id`
FOREIGN KEY (`user_id`)
REFERENCES `linkinframe`.`user` (`id`));
關於上面外鍵建表語句解釋如下:首先user爲主表,id是該表主鍵,然後address是從表,id是該表主鍵,user_id是該表外鍵,然後這裏我也起名user_id爲外鍵的別名,然後該外鍵依賴於主表的id字段。注意:子表的外鍵關聯的必須是父類的主鍵,而且,數據類型必須一致。比如,兩者都是int類型,或者都是char類型,如果不滿足這樣的要求,在創建子表時,就會出現‘Can't create tale’的錯誤提示。
- 3,設置表的非空約束
非空約束是指字段的值不能爲空值,非空約束將保證所有記錄中該字段都有值。如果用戶新插入的記錄中,該字段爲空值,則數據庫系統會報錯。設置表的非空約束是指在創建表時爲表的某些特殊字段加上NOT NULL約束條件。
設置非空約束的基本語法規則如下:
屬性名 數據類型 NOT NULL
比如下面的建表語句:CREATE TABLE `linkinframe`.`user` (
`id` INT NOT NULL,
`name` VARCHAR(5) NOT NULL,
`age` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`));
這裏設置了user表所有的字段,id,name,age都是非空。- 4,設置表的唯一性約束
唯一性約束將保證所有記錄中該字段的值不能重複出現。設置唯一性約束的基本語法規則如下:
屬性名 數據類型 UNIQUE
這裏舉一個例子,如果一個表中一個字符串字段huhu設置了唯一約束,現在一條記錄中該字段爲‘0001’,那麼該表中就不能出現另一條記錄的huhu字段也爲‘0001’。
- 5,設置表的屬性值自動增加
AUTO_INCREMENT是MySQL數據庫中一個特殊的約束條件。其主要用於爲表中插入的新的記錄自動生成唯一的ID。一個表只能有一個字段使用AUTO_INCREMENT約束,且該字段必須爲主鍵的一部分。
AUTO_INCREMENT約束的字段可以是任何整數類型(tinyint,smallint,int,bigint)等,默認情況下,該字段的值從1開始自增。
設置屬性值字段增加的基本語法規則如下:屬性名 數據類型 AUTO_INCREMENT
比如下面的建表語句:CREATE TABLE `linkinframe`.`user` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
PRIMARY KEY (`id`));
該建表語句創建了一張user表,其中id爲其主鍵,name爲一個普通字段。我們設置id爲AUTO_INCREMENT,沒插入一條新記錄,id的值會自動增加。
1,在插入記錄時,默認的情況下自增字段的值從1開始自增,然後以後每增加一條記錄,該記錄的id值都會在前一條記錄的基礎上加1。
2,如果第一條記錄設置了該字的初值,那麼新增加的記錄就從初值開始自增。
3,加上AUTO_INCREMENT約束條件,那麼字段的每個值都是自動增加的。因此,這個字段不可能出現相同的值。通常情況下,AUTO_INCREMENT都是作爲ID字段的約束條件,而且將ID字段作爲表的主鍵。- 6,設置表的屬性的默認值
在創建表時可以指定表中字段的默認值。如果插入一條新的記錄時沒有爲這個字段賦值,那麼數據庫系統會自動爲這個字段插入默認值。
默認值是通過DEFAULT關鍵字來設置的。如果沒有使用default關鍵字指定字段的默認值,也沒有指定字段爲非空,那麼字段的默認值爲空(NULL)。
設置默認值的基本語法規則如下:數據名 數據類型 DAFAULT 默認值
OK,關於創建表我已經詳細的整理完了。這裏我來寫一個比較全的建表語句包含上面整理的各個字段完整性約束。
CREATE TABLE `linkinframe`.`user` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(5) NOT NULL,
`card_id` VARCHAR(20) NULL,
`age` INT NULL DEFAULT 25,
PRIMARY KEY (`id`),
UNIQUE INDEX `age_UNIQUE` (`card_id` ASC));
上面的建表語句設置id爲主鍵,自增,設置name屬性非空,設置age屬性唯一,設置age的默認值25,插入數據時候如果沒有爲age設置,則取值默認的25。