MySQL數據表的基本操作
目標:掌握創建數據表的方法。
掌握查看數據表結構的方法。
掌握修改數據表的方法。
掌握數據表的其他操作的方法。
掌握刪除數據表的方法。
一、創建數據表
在創建數據庫之後,接下來就要在數據庫中創建數據表。所謂創建數據表,指的是在已經創建的數據庫中建立新表。創建數據表的過程是規定數據列的屬性的過程,同時也是實施數據完整性(包括實體完整性,引用完整性和域完整性)約束的過程。
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,其主鍵為ID。SQL語句如下:
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,為了唯一確定一個員工,可以把name、sex聯合起來作為主鍵。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表的主鍵ID,SQL語句如下:
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 TABLE將db_1表名修改為tb_new,SQL語句如下:
ALTER TABLE db_1 RENAME tb_new;
操作結果執行完成後,在下圖中對比結果發現數據表db_1已經沒有了,而多出來了tb_new這個數據表。修改表名成功。
2、修改字段數據類型
修改字段數據類型就是把字段的數據類型轉換成另一種數據類型。在MySQL中修改字段數據類型的語法格式如下:
ALTER TABLE <表名>MODIFY<字段名><數據類型>
其中,表名指要修改數據類型的字段所在表的名稱,字段名指需要修改的字段,數據類型指修改後字段的新數據類型。
例如:將tb_new中name字段的數據類型由VARCHAR(25)修改成VARCHAR(28)。
修改數據類型的步驟如下:
1)、查看tb_new表的結構;
2)、執行修改語句ALTER TABLE tb_new MODIFY name VARCHAR(28);
3)、再次查看表結構。
執行結果如下圖,tb_new表中name字段的數據類型已經修改為VARCHAR(28),修改成功。
3、修改字段名
在MySQL中修改表字段名的語法格式如下:
ALTER TABLE <表名> CHANGE<舊字段名><新字段名><新數據類型>;
其中,“舊字段名”指修改前的字段名;“新字段名”指修改後的字段名;“新數據類型”指修改後的數據類型,如果不需要修改字段的數據類型,可以將新數據類型設置成原來的一樣,但數據類型不能為空。
例如:將數據表tb_new中name字段的名稱修改為newname。SQL語句如下:
ALTER TABLE tb_new CHANGE name newname VARCHAR(28);
從結果可以看出,name字段的名稱已經修改為newname。
提示:由於不同類型的數據在計算機中存儲的方式及長度並不相同,修改數據類型可能會影響到數據表中已有的數據記錄,因此當數據庫中已經有數據時不要輕易地修改數據類型。
4、添加字段
添加字段的語法格式如下:
ALTER TABLE<表名>ADD<新字段名><數據類型>
[約束條件][FIRST|AFTER 已存在字段名];
其中,新字段名為需要添加的字段名稱;FIRST為可選參數,其作用是將添加的字段設置為表的第一個字段;AFTER為可選參數,其作用是將新添加的字段添加到已存在字段名指定的字段後面。
例如:在tb_new中添加一個字段city。SQL語句如下:
ALTER TABLE tb_new ADD city VARCHAR(20);
從結果可以看出添加了一個字段city,在默認情況下,該字段放在最後一列。
也可以在數據表的第一列添加字段。
例如:在數據表tb_new中添加一個INT類型的字段newID。SQL語句如下:
ALTER TABLE tb_new ADD newid INT(11) FIRST;
執行結果發現在表的第一列添加了一個名為newid的INT(11)類型的字段,結果如圖所示:
例如:在數據表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數據表的存儲引擎修改為MyISAM。SQL語句如下:
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_1和tb_2表之間的關聯關系,此時可以輸入刪除語句,將原來的父表tb_1刪除,SQL語句如下:
DROP TABLE tb_1;
最後通過SHOW TABLES查看數據表列表,結果如圖所示。
可以看到,數據表列表中已經不存在名稱為tb_1的表。
MySQL數據表的基本操作