官术网_书友最值得收藏!

2.3 創建數據表

在創建完數據庫之后,接下來的工作就是創建數據表。所謂創建數據表,指的是在已經創建好的數據庫中建立新表。創建數據表的過程是規定數據列的屬性的過程,同時也是實施數據完整性(包括實體完整性、引用完整性和域完整性等)約束的過程。本節將介紹創建數據表的語法形式,如何添加主鍵約束、外鍵約束、非空約束,等等。

2.3.1 創建表的語法形式

數據表屬于數據庫,在創建數據表之前,應該使用語句“USE <數據庫名>”指定操作是在哪個數據庫中進行的,如果沒有選擇數據庫,就會拋出“No database selected”的錯誤。

創建數據表的語句為CREATE TABLE,語法規則如下:

使用CREATE TABLE創建表時,必須指定以下信息:

(1)要創建的表的名稱,不區分大小寫,不能使用SQL語言中的關鍵字,如DROP、ALTER、INSERT等。

(2)數據表中每一個列(字段)的名稱和數據類型,如果創建多個列,就要用逗號隔開。

【例2.4】創建員工表tb_emp1,結構如表2.1所示。

表2.1 tb_emp1表結構

首先創建數據庫,SQL語句如下:

     CREATE  DATABASE test_db;

選擇創建表的數據庫,SQL語句如下:

     USE test_db;

創建tb_emp1表,SQL語句為:

語句執行后,便創建了一個名稱為tb_emp1的數據表,使用SHOW TABLES;語句查看數據表是否創建成功,SQL語句如下:

可以看到,test_db數據庫中已經有了數據表tb_emp1,數據表創建成功。

2.3.2 使用主鍵約束

主鍵又稱主碼,是表中一列或多列的組合。主鍵約束(Primary Key Constraint)要求主鍵列的數據唯一,并且不允許為空。主鍵能夠唯一地標識表中的一條記錄,可以結合外鍵來定義不同數據表之間的關系,并且可以加快數據庫查詢的速度。主鍵和記錄之間的關系如同身份證和人之間的關系,它們之間是一一對應的。主鍵分為兩種類型:單字段主鍵和多字段聯合主鍵。

1. 單字段主鍵

主鍵由一個字段組成,SQL語句格式分為以下兩種情況。

(1)在定義列的同時指定主鍵,語法規則如下:

     字段名 數據類型 PRIMARY KEY [默認值]

【例2.5】定義數據表tb_emp 2,其主鍵為id,SQL語句如下:

(2)在定義完所有列之后指定主鍵。

     [CONSTRAINT <約束名>] PRIMARY KEY [字段名]

【例2.6】定義數據表tb_emp 3,其主鍵為id,SQL語句如下:

上述兩個例子執行后的結果是一樣的,都會在id字段上設置主鍵約束。

2. 多字段聯合主鍵

主鍵由多個字段聯合組成,語法規則如下:

     PRIMARY KEY [字段1, 字段2, ..., 字段n]

【例2.7】定義數據表tb_emp4,假設表中間沒有主鍵id,為了唯一確定一個員工,可以把name、deptId聯合起來作為主鍵,SQL語句如下:

語句執行后,便創建了一個名稱為tb_emp4的數據表,name字段和deptId字段組合在一起成為tb_emp4的多字段聯合主鍵。

2.3.3 使用外鍵約束

外鍵用來在兩個表的數據之間建立鏈接,可以是一列或者多列。一個表可以有一個或多個外鍵。外鍵對應的是參照完整性,一個表的外鍵可以為空值,若不為空值,則每一個外鍵值必須等于另一個表中主鍵的某個值。

外鍵:首先它是表中的一個字段,可以不是本表的主鍵,但對應另一個表的主鍵。外鍵的主要作用是保證數據引用的完整性,定義外鍵后,不允許刪除在另一個表中具有關聯關系的行。外鍵的作用是保持數據的一致性、完整性。例如,部門表tb_dept的主鍵是id,在員工表tb_emp5中有一個鍵deptId與這個id關聯。

? 主表(父表):對于兩個具有關聯關系的表而言,相關聯字段中主鍵所在的那個表即是主表。

? 從表(子表):對于兩個具有關聯關系的表而言,相關聯字段中外鍵所在的那個表即是從表。

創建外鍵的語法規則如下:

“外鍵名”為定義的外鍵約束的名稱,一個表中不能有相同名稱的外鍵;“字段名”表示子表需要添加外鍵約束的字段列;“主表名”即被子表外鍵所依賴的表的名稱;“主鍵列”表示主表中定義的主鍵列,或者列組合。

【例2.8】定義數據表tb_emp5,并在tb_emp5表上創建外鍵約束。

創建一個部門表tb_dept1,表結構如表2.2所示,SQL語句如下:

表2.2 tb_dept1表結構

定義數據表tb_emp5,讓它的鍵deptId作為外鍵關聯到tb_dept1的主鍵id,SQL語句為:

以上語句執行成功之后,在表tb_emp5上添加了名稱為fk_emp_dept1的外鍵約束,外鍵名稱為deptId,其依賴于表tb_dept1的主鍵id。

提示

關聯指的是在關系型數據庫中,相關表之間的聯系。它是通過相容或相同的屬性或屬性組來表示的。子表的外鍵必須關聯父表的主鍵,且關聯字段的數據類型必須匹配,如果類型不一樣,創建子表時,就會出現錯誤“ERROR 1005 (HY000): Can't create table'database.tablename'(errno: 150)”。

2.3.4 使用非空約束

非空約束(Not Null Constraint)指字段的值不能為空。對于使用了非空約束的字段,如果用戶在添加數據時沒有指定值,數據庫系統就會報錯。

非空約束的語法規則如下:

     字段名 數據類型 not null

【例2.9】定義數據表tb_emp6,指定員工的名稱不能為空,SQL語句如下:

執行后,在tb_emp6中創建了一個name字段,其插入值不能為空(Not NULL)。

2.3.5 使用唯一性約束

唯一性約束(Unique Constraint)要求該列唯一,允許為空,但只能出現一個空值。唯一性約束可以確保一列或者幾列不出現重復值。

唯一性約束的語法規則如下:

(1)在定義完列之后直接指定唯一性約束,語法規則如下:

     字段名 數據類型 UNIQUE

【例2.10】定義數據表tb_dept2,指定部門的名稱唯一,SQL語句如下:

(2)在定義完所有列之后指定唯一性約束,語法規則如下:

     [CONSTRAINT <約束名>] UNIQUE(<字段名>)

【例2.11】定義數據表tb_dept3,指定部門的名稱唯一,SQL語句如下:

UNIQUE和PRIMARY KEY的區別:一個表中可以有多個字段聲明為UNIQUE,但只能有一個PRIMARY KEY聲明;聲明為PRIMAY KEY的列不允許有空值,但是聲明為UNIQUE的字段允許空值(NULL)的存在。

2.3.6 使用默認約束

默認約束(Default Constraint)指定某列的默認值。例如男性同學較多,性別就可以默認為‘男’,如果插入一條新的記錄時沒有為這個字段賦值,那么系統會自動為這個字段賦值為‘男’。

默認約束的語法規則如下:

     字段名 數據類型 DEFAULT 默認值

【例2.12】定義數據表tb_emp7,指定員工的部門編號默認為1111,SQL語句如下:

以上語句執行成功之后,表tb_emp7上的字段deptId擁有了一個默認的值1111,若新插入的記錄沒有指定部門編號,則默認都為1111。

2.3.7 設置表的屬性值自動增加

在數據庫應用中,經常希望在每次插入新記錄時,系統自動生成字段的主鍵值。可以通過為表主鍵添加AUTO_INCREMENT關鍵字來實現。默認情況下,在MySQL中AUTO_INCREMENT的初始值是1,每新增一條記錄,字段值自動加1。一個表只能有一個字段使用AUTO_INCREMENT約束,且該字段必須為主鍵的一部分。AUTO_INCREMENT約束的字段可以是任何整數類型(TINYINT、SMALLINT、INT、BIGINT等)。

設置表的屬性值自動增加的語法規則如下:

     字段名 數據類型 AUTO_INCREMENT

【例2.13】定義數據表tb_emp8,指定員工的編號自動遞增,SQL語句如下:

上述例子執行后,會創建名稱為tb_emp8的數據表。表tb_emp8中id字段的值在添加記錄的時候會自動增加,在插入記錄的時候,默認自增字段id的值從1開始,每次添加一條新記錄,該值自動加1。

例如,執行如下插入語句:

語句執行完后,tb_emp8表中增加3條記錄,在這里并沒有輸入id的值,但系統已經自動添加該值,使用SELECT命令查看記錄,如下所示。

提示

這里使用INSERT聲明向表中插入記錄的方法,并不是SQL的標準語法,這種語法不一定被其他的數據庫支持,只能在MySQL中使用。

主站蜘蛛池模板: 旅游| 泰和县| 霸州市| 栖霞市| 崇明县| 尼玛县| 新巴尔虎右旗| 龙井市| 新疆| 星子县| 南丰县| 东至县| 黑山县| 嘉黎县| 南汇区| 环江| 郸城县| 乡宁县| 永泰县| 景宁| 新巴尔虎右旗| 赤水市| 色达县| 谷城县| 阳朔县| 榆树市| 仙居县| 天台县| 佛教| 海门市| 武强县| 南投县| 昭通市| 海南省| 措美县| 滦平县| 花垣县| 郁南县| 且末县| 和田市| 广州市|