1. 程式人生 > >MySQL數據表的基本操作

MySQL數據表的基本操作

給定 同時 設置 change 兩種 信息 bsp 再次 基本結構

目標:掌握創建數據表的方法。

掌握查看數據表結構的方法。

掌握修改數據表的方法。

掌握數據表的其他操作的方法。

掌握刪除數據表的方法。

一、創建數據表

在創建數據庫之後,接下來就要在數據庫中創建數據表。所謂創建數據表,指的是在已經創建的數據庫中建立新表。創建數據表的過程是規定數據列的屬性的過程,同時也是實施數據完整性(包括實體完整性,引用完整性和域完整性)約束的過程。

1、創建數據表的語法形式

CREATE TABLE <表名>

字段名1 數據類型[列級別約束條件][默認值]

字段名2 數據類型

[列級別約束條件][默認值]

.

.

.

字段名n-1 數據類型[列級別約束條件][默認值]

字段名n 數據類型[列級別約束條件][默認值]

[表級別約束條件]

1)創建數據庫create database mybase

2)選擇數據庫 use mybase;

3)創建數據表db_1;創建語句如下:

Create table db_1

(

Id INT(11),

Name VARCHAR(25),

Sex BOOLEAN,

Salary FLOAT

);

執行過程如下圖所示:

4)創建數據表db_1完成後,使用show tables;(不能缺少s)語句查看數據表是否創建成功,執行結果如圖所示。

查詢結果可以看到,數據表db_1創建成功,數據庫mybase中已經有數據表db_1

2、主鍵約束

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

(1)單字段主鍵

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

1)、在定義列的同時指定主鍵,語法格式如下:

字段名 數據類型 primary key[默認值]

如創建數據表db_2,其主鍵為ID

Create table db_2

(

Id INT(11) primary key,

Name VARCHAR(25),

Sex BOOLEAN,

Salary FLOAT

);

2) 、在定義完所有的列之後指定主鍵,語法格式如下:

[CONSTRAINT<約束名>] primary key [字段名]

如創建數據表db_3,其主鍵為IDSQL語句如下:

Create table db_3

(

Id INT(11),

Name VARCHAR(25),

Sex BOOLEAN,

Salary FLOAT,

primary key(id)

);

上面兩種方法執行的結果是一樣的,都會在ID字段設置主鍵約束。

(2)多字段主鍵

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

Primary key[字段1,字段2,字段3......,字段n]

如定義數據表db_4,假設表中沒有主鍵ID,為了唯一確定一個員工,可以把namesex聯合起來作為主鍵。SQL語句如下:

Create table db_4

(

Id INT(11),

Name VARCHAR(25),

Sex BOOLEAN,

Salary FLOAT,

primary key(name,sex)

);

3、外鍵約束

外鍵用來在兩個表數據之間建立連接,它可以是一列或者多列。一個表可以有一個或多個外鍵。外鍵對應的是參照完整性,一個表的的外鍵可以為空值,若不為空值,則每一個外鍵值必須等於另一個表中主鍵的某個值。外鍵的主要作用是保證數據引用的完整性,在定義外鍵後不允許刪除在另一個表中具有關聯關系的行。外鍵還保證數據的一致性、完整性。例如部門表tb_dept的主鍵ID,在員工表db_5中有一個鍵deptID與這個ID關聯。

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

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

如定義數據表db_5,並且在該表中創建外鍵約束。

創建外鍵的語法格式如下:

[COMSTRAINT<外鍵名>]FOREIGN KEY 字段名1[,字段名2......]

REFERENCES<主表名> 主鍵列1[,主鍵列2......]

創建一個部門表tb_dept1,建表的SQL語句如下:

Create table tb_dept1

(

Id INT(11) primary key,

Name VARCHAR(22) NOT Null,

Location VARCHAR(50)

);

定義數據表db_5,讓deptID字段作為外鍵關聯到tb_dept1表的主鍵IDSQL語句如下:

Create table db_5

(

Id INT(11) primary key,

Name VARCHAR(25),

deptId INT(11),

Salary FLOAT,

CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)

);

以上語句執行成功後在db_5表上添加了名稱為fk_emp_dept1的外鍵約束,外鍵名稱為deptId,其依賴於tb_dept1表的主鍵id

4、非空約束

非空約束指字段的值不能為空,使用此約束後,添加數據時沒有指定值,數據庫系統會報錯,非空約束語法格式如下:

字段名 數據類型 NOT NULL

如定義數據表db_6,指定員工的性別不能為空,SQL語句如下:

Create table db_6

(

Id INT(11) primary key,

Name VARCHAR(25) ,

Sex BOOLEAN NOT NULL

);

執行後,數據庫創建db_6數據表創建了一個sex字段,其插入的值不能為空。

5、唯一性約束

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

在定義完列之後指定唯一性約束,語法格式如下:

字段名 數據類型 UNIQUE

如定義數據表db_7,指定name字段唯一,SQL語句如下:

Create table db_7

(

Id INT(11) primary key,

Name VARCHAR(22) UNIQUE,

Sex BOOLEAN NOT NULL,

Age INT(4)

);

6、默認約束

默認約束(Default Constraint)指定某列的默認值。例如,用戶列表中的北京人比較多,就可以設置city字段的默認值為“北京”。如果插入一條新紀錄時沒有為這個字段賦值,那麽系統會自動為這個字段賦值“北京”。

默認約束的語法格式如下:

字段名 數據類型 DEFAULT 默認值

如定義數據表db_8,指定員工的城市默認值為“北京”(北京需要用雙引號括起來,主要和數據庫的版本有關系)SQL語句如下:

Create table db_8

(

Id INT(11) primary key,

Name VARCHAR(25) UNIQUE,

City VARCHAR(20) DEFAULT “北京”

);

1、自增屬性

MySQL數據庫設計中會遇到需要系統自動生成字段的主鍵值得情況。例如用戶表中需要id字段自增,需要使用AUTO_INCREMENT關鍵字來實現。

屬性值自動增加的語法格式如下:

字段名 數據類型 AUTO_INCREMENT

如定義數據表db_9,指定員工的編號自動增加,SQL語句如下:

Create table db_9

(

Id INT(11) primary key AUTO_INCREMENT,

Name VARCHAR(25) UNIQUE,

City VARCHAR(20)

);

以上語句執行後會創建名稱為db_9的數據表,表中的id字段值在添加記錄的時候回自動增加,id字段值默認從1開始,每次添加一條新紀錄,改制自動加1

一、查看數據表結構

1、查看數據表基本結構 使用DESCRIBE/DESC語句可以查看表字段信息,包括字段名、字段數據類型、是否為主鍵、是否有默認值等,其語法格式如下:

DESCRIBE/DESC <表名>

如查看db_2表的結構,SQL語句:DESCRIBE/DESC db_2;

上圖中各個字段的含義分別如下:

NULL:表示該列是否可以存儲NULL值。

Key:表示該列是否已編制索引。PRI表示該列是表主鍵的一部分;UNI表示該列是UNIQUE(唯一性約束)索引的一部分;MUL表示在該列表中某個給定值允許出現多次。

Default:表示該列是否有默認值,如果有,值是多少。

Extra:表示可以獲取的與給定列有關的附加信息,如AUTO_INCREMENT等。

2、查看數據表詳細結構

SHOW CREATE TABLE語句可以用來查看表的詳細信息,語法格式如下:

SHOW CREATE TABLE<表名\G>;

如查看db_1表的詳細信息,SQL語句如下:

SHOW CREATE TABLE db_1\G 執行結果如下圖

二、修改數據表

常用的修改表的操作有修改表名、修改字段數據類型或字段名、增加和刪除字段、修改字段的排列位置、更改表的存儲引擎、刪除表的外鍵約束等。

1、修改表名

MySQL是通過ALTER TABLE語句來實現表名的修改的,具體語法格式如下:

ALTER TABLE <新表名>RENAME[TO]<舊表名>;

其中,To為可選參數,使用與否不影響結果。

例如將數據表db_1改名為tb_new.

操作步驟:

查看數據庫中所有表:SHOW TABLES

使用ALTER TABLEdb_1表名修改為tb_new,SQL語句如下:

ALTER TABLE db_1 RENAME tb_new;

操作結果執行完成後,在下圖中對比結果發現數據表db_1已經沒有了,而多出來了tb_new這個數據表。修改表名成功。

2、修改字段數據類型

修改字段數據類型就是把字段的數據類型轉換成另一種數據類型。在MySQL中修改字段數據類型的語法格式如下:

ALTER TABLE <表名>MODIFY<字段名><數據類型>

其中,表名指要修改數據類型的字段所在表的名稱,字段名指需要修改的字段,數據類型指修改後字段的新數據類型。

例如:將tb_newname字段的數據類型由VARCHAR(25)修改成VARCHAR(28)

修改數據類型的步驟如下:

1)、查看tb_new表的結構;

2)、執行修改語句ALTER TABLE tb_new MODIFY name VARCHAR(28);

3)、再次查看表結構。

執行結果如下圖,tb_new表中name字段的數據類型已經修改為VARCHAR28),修改成功。

3、修改字段名

MySQL中修改表字段名的語法格式如下:

ALTER TABLE <表名> CHANGE<舊字段名><新字段名><新數據類型>;

其中,“舊字段名”指修改前的字段名;“新字段名”指修改後的字段名;“新數據類型”指修改後的數據類型,如果不需要修改字段的數據類型,可以將新數據類型設置成原來的一樣,但數據類型不能為空。

例如:將數據表tb_newname字段的名稱修改為newnameSQL語句如下:

ALTER TABLE tb_new CHANGE name newname VARCHAR(28)

從結果可以看出,name字段的名稱已經修改為newname

提示:由於不同類型的數據在計算機中存儲的方式及長度並不相同,修改數據類型可能會影響到數據表中已有的數據記錄,因此當數據庫中已經有數據時不要輕易地修改數據類型。

4、添加字段

添加字段的語法格式如下:

ALTER TABLE<表名>ADD<新字段名><數據類型>

[約束條件][FIRST|AFTER 已存在字段名]

其中,新字段名為需要添加的字段名稱;FIRST為可選參數,其作用是將添加的字段設置為表的第一個字段;AFTER為可選參數,其作用是將新添加的字段添加到已存在字段名指定的字段後面。

例如:在tb_new中添加一個字段citySQL語句如下:

ALTER TABLE tb_new ADD city VARCHAR(20);

從結果可以看出添加了一個字段city,在默認情況下,該字段放在最後一列。

也可以在數據表的第一列添加字段。

例如:在數據表tb_new中添加一個INT類型的字段newIDSQL語句如下:

ALTER TABLE tb_new ADD newid INT(11) FIRST;

執行結果發現在表的第一列添加了一個名為newidINT11)類型的字段,結果如圖所示:

例如:在數據表tb_new中的sex列後添加一個INT類型的字段ss.SQL語句如下:

ALTER TABLE tb_new ADD ss INT(11) AFTER sex;

從結果可以看出,tb_new表中添加了一個名稱為ss的字段,其位置在指定的sex字段的後面,添加字段成功。

5、刪除字段

刪除字段是將數據表中的某個字段從表中移除,其語法格式如下:

ALTER TABLE <表名>DROP<字段名>

其中,“字段名”指需要從表中刪除的字段的名稱。

例如:刪除數據表tb_new中的SS字段,SQL語句如下:

ALTER TABLE tb_new DROP ss;

從結果可以看出,tb_new表中已經不存在名稱為ss的字段,刪除字段成功。

一、數據表的其他操作

1、修改字段排序

通常使用ALTER TABLE修改字段的排列順序,修改字段排序的語法格式如下:

ALTER TABLE <表名>MODIFY<字段1><數據類型>FIRST|AFTER<字段2>

例如:將數據表tb_new中的id字段修改為表的第一個字段,SQL語句如下:

ALTER TABLE tb_new MODIFY id INT(11) FIRST;

也可以修改字段到指定列之後。

例如:將數據表tb_new中的newname字段移動到salary字段後面,SQL語句如下:

ALTER TABLE tb_new MODIFY newname VARCHAR(28) AFTER salary;

2、更改表的存儲引擎

更改表的存儲引擎的語法格式如下:

ALTER TABLE<表名> ENGINE=<更改後的存儲引擎名>

例如:將db_2數據表的存儲引擎修改為MyISAMSQL語句如下:

ALTER TABLE db_2 ENGINE=MyISAM;

操作步驟:1、先查看db_2表當前的存儲引擎(ENGINE=InnoDB;

2、修改存儲引擎;

3、再次查看db_2表的存儲引擎(ENGINE=MyISAM);

3、刪除表的外鍵約束

對於數據庫中定義的外鍵,如果不在需要,可以將其刪除。外鍵一旦刪除,就會解除主表和從表間的關聯關系。MySQL中刪除外鍵的語法格式如下:

ALTER TABLE <表名> DROP FOREIGN KEY <外鍵約束名>

其中,“外鍵約束名”指在定義表時CONSTRAINT關鍵字後面的參數。

例如:刪除數據表db_5中的外鍵約束fk_emp_dept1.

首先查看db_5的結構,SQL語句如下:

Show CREATE TABLE db_5\G

刪除數據表db_5的外鍵fk_emp_dept1,SQL語句如下:

ALTER TABLE db_5 DROP FOREIGN KEY fk_emp_dept1;

可以看到,db_5表中已經不存在FOREIGN KEY,原有的名稱為fk_emp_dept1的外鍵約束刪除成功。

二、刪除數據表

對於不在需要的數據表,可以將其從數據庫中刪除。

1、刪除沒有被關聯的表

MySQL中使用DROP TABLE可以一次刪除一個或多個沒有被其他表關聯的數據表,語法格式如下:

DROP TABLE [IF EXISTS] 1,表2......n;(n表示要刪除的表名稱)

例如:刪除db_2數據表,SQL語句如下:

DROP TABLE db_2;(刪除後數據列表中已經不存在名稱為db_2的數據表,刪除操作成功)

2、刪除被其他表關聯的主表

在數據表之間存在外鍵關聯的情況下,如果直接刪除父表,結果會顯示失敗,原因是直接刪除將破壞表的完整性。如果必須刪除,可以先刪除與它關聯的子表,再刪除父表,只是這樣同時刪除了兩個表中的數據。有些情況下需要保留子表,這時如果要單獨刪除父表,只需將關聯的表的外鍵約束條件取消,然後就可以刪除父表。

在數據庫中創建兩個關聯表,首先創建tb_1表,SQL語句如下:

Create table tb_1

(

Id INT(11) primary key,

Name VARCHAR(22)

);

接下來創建tb_2表,SQL語句如下:

Create table tb_2

(

Id INT(11) primary key,

Name VARCHAR(25),

wwid INT(11),

CONSTRAINT fk_tb_dt FOREIGN KEY (wwid) REFERENCES tb_1(id)

);

使用SHOW CREATE TABLE命令查看tb_2表的外鍵約束,SQL語句如下:

SHOW CREATE TABLE tb_2\G(執行結果如下圖)

從結果可以看到,在數據表tb_2上創建了一個名稱為fk_tb_dt的外鍵約束。

例如:刪除父表tb_1.

首先直接刪除父表tb_1,輸入刪除語句如下:

DROP TABLE tb_1;

執行結果如圖所示,可以看到,當存在外鍵約束時主鍵不能被直接刪除。

接下來刪除關聯子表tb_2的外鍵約束,SQL語句如下:

ALTER TABLE tb_2 DROP FOREIGN KEY fk_tb_dt;

該語句執行後將取消tb_1tb_2表之間的關聯關系,此時可以輸入刪除語句,將原來的父表tb_1刪除,SQL語句如下:

DROP TABLE tb_1;

最後通過SHOW TABLES查看數據表列表,結果如圖所示。

可以看到,數據表列表中已經不存在名稱為tb_1的表。

MySQL數據表的基本操作