真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

三、數(shù)據(jù)表的基本操作

3.1、創(chuàng)建數(shù)據(jù)表

10年積累的成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有吳堡免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

  創(chuàng)建數(shù)據(jù)表指的是在已經(jīng)創(chuàng)建好的數(shù)據(jù)庫中建立新表。創(chuàng)建數(shù)據(jù)表的過程是規(guī)定數(shù)據(jù)列的屬性的過程,同時(shí)也是實(shí)施數(shù)據(jù)完整性(實(shí)體完整性、引用完整性、域完整性)約束的過程。

創(chuàng)建表的語法格式

  數(shù)據(jù)表屬于數(shù)據(jù)庫,在創(chuàng)建數(shù)據(jù)表之前,應(yīng)該先創(chuàng)建數(shù)據(jù)庫,指定在哪個(gè)數(shù)據(jù)庫中進(jìn)行。

MySQL> USE test;
Database changed
mysql> CREATE TABLE tb_name
(
字段名1,數(shù)據(jù)類型 [列級別約束條件] [默認(rèn)值],
字段名2,數(shù)據(jù)類型 [列級別約束條件] [默認(rèn)值],
...
[表級別約束條件]
);

例如創(chuàng)建員工表tb_emp1,表結(jié)構(gòu)為:

字段名稱數(shù)據(jù)類型備注
idINT(11)員工編號
nameVARCHAR(25)員工名稱
deptIdINT(11)所在部門編號
salaryFLOAT工資
mysql> USE test;
Database changed
mysql> CREATE TABLE tb_emp1
    -> (
    -> id INT(11),
    -> name VARCHAR(25),
    -> depId INT(11),
    -> salary FLOAT
    -> );
Query OK, 0 rows affected (0.08 sec)
mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| tb_emp1        |
+----------------+
1 row in set (0.00 sec)

使用主鍵約束

  主鍵,又稱主碼,是表中一列或多列的組合。主鍵約束要求主鍵列的數(shù)據(jù)唯一,并且不允許為空。主鍵能夠唯一地標(biāo)識表中的一條記錄,可以結(jié)合外鍵來定義不同數(shù)據(jù)表之間的關(guān)系,并且可以加快數(shù)據(jù)查詢的速度。主鍵分為單字段主鍵和多字段聯(lián)合主鍵。

單字段主鍵由一個(gè)字段組成,其語法格式有兩種:

字段名 數(shù)據(jù)類型 PRIMARY KEY [默認(rèn)值]

mysql> CREATE TABLE tb_emp2
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> depId INT(11),
    -> salary FLOAT
    -> );
[CONSTRAINT <約束名>] PRIMARY KEY [字段名]
mysql> CREATE TABLE tb_emp3
    -> (
    -> id INT(11) ,
    -> name VARCHAR(25),
    -> depId INT(11),
    -> salary FLOAT,
    -> PRIMARY KEY(id)
    -> );

多字段聯(lián)合主鍵,即主鍵由多個(gè)字段組合,其語法格式為:

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

mysql> CREATE TABLE tb_emp4
    -> (
    -> name VARCHAR(25),
    -> depId INT(11),
    -> salary FLOAT
    -> PRIMARY KEY(name,depId)
    -> );

使用外鍵約束

 外鍵用來在兩個(gè)表的數(shù)據(jù)之間建立鏈接,它可以是一列或多列。一個(gè)表可以有一個(gè)或多個(gè)外鍵。外鍵對應(yīng)的是參照完整性,一個(gè)表的外鍵可以為空,當(dāng)不為空時(shí),則每一個(gè)外鍵值必須等于另一個(gè)表中主鍵的某個(gè)值。

  外鍵:它是表中的一個(gè)字段,可以不是本表的主鍵,但對應(yīng)另一個(gè)表的主鍵。外鍵主要作用是保證數(shù)據(jù)引用的完整性,定義外鍵后,不允許刪除在另一個(gè)表中具有關(guān)聯(lián)關(guān)系的行。例如:部門表tb_dept的主鍵是id,在員工表tb_emp5中有一個(gè)鍵depId與這個(gè)id關(guān)聯(lián)。

  主表:對于兩個(gè)具有關(guān)聯(lián)關(guān)系的表而言,相關(guān)聯(lián)字段中主鍵所在的那個(gè)表即是主表。

  從表:對于兩個(gè)具有關(guān)聯(lián)關(guān)系的表而言,相關(guān)聯(lián)字段中外鍵所在的那個(gè)表即是從表。

創(chuàng)建外鍵的語法規(guī)則:

[CONSTRAINT <外鍵名>] FOREIGN KEY 字段名1 [,字段名2,...]
REFERENCES <主表名> 主鍵列1 [,主鍵列2,...]

  '外鍵名'為定義的外鍵約束的名稱,一個(gè)表中不能有相同的外鍵;'字段名'表示字表需要添加外鍵約束的字段列;'主表名'即被子表外鍵所依賴的表的名稱;'主鍵列'表示主表中定義的主鍵列。

  例如:定義數(shù)據(jù)表tb_emp5,并在tb_emp5上創(chuàng)建外鍵約束。

創(chuàng)建一個(gè)部門表:

mysql> CREATE TABLE tb_dept1( 
    -> id INT(11) PRIMARY KEY, 
    -> name VARCHAR(22) NOT NULL, 
    -> location VARCHAR(50) 
    -> );
Query OK, 0 rows affected (0.02 sec)

定義數(shù)據(jù)表tb_emp5,讓它的鍵depId作為外鍵關(guān)聯(lián)到tb_dept1的主鍵id:

mysql> CREATE TABLE tb_emp5(
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)  
    -> );
Query OK, 0 rows affected (0.05 sec)

使用非空約束

  非空約束指字段的值不能為空。對于使用非空約束的字段,如果在添加數(shù)據(jù)時(shí)沒有指定值,數(shù)據(jù)庫會報(bào)錯(cuò)。

  非空約束的語法規(guī)則:

字段名 數(shù)據(jù)類型 NOT  NULLL

mysql> CREATE TABLE tb_emp6(
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25) NOT NULL,
    -> depId INT(11),
    -> salary FLOAT
    -> );
Query OK, 0 rows affected (0.03 sec)

使用唯一性約束

  唯一性約束要求該列唯一,允許為空,但只能出現(xiàn)一個(gè)空值。唯一性約束可以確保一列或幾列不出現(xiàn)重復(fù)值。

唯一性約束的語法規(guī)則有:

 1、定義完列之直接指定唯一約束

字段名 數(shù)據(jù)類型 UNIQUE


mysql> CREATE TABLE tb_dept2(
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(22) UNIQUE,
    -> location VARCHAR(50)
    -> );
Query OK, 0 rows affected (0.20 sec)

2、定義完所有列之后指定唯一約束

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

mysql> CREATE TABLE tb_dept3( 
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(22) , 
    -> location VARCHAR(50),
    -> CONSTRAINT STH UNIQUE(name)
    -> );
Query OK, 0 rows affected (0.03 sec)

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

使用默認(rèn)約束

 默認(rèn)約束指某列的默認(rèn)值。其語法規(guī)則為:

字段名 數(shù)據(jù)類型 DEFAULT 默認(rèn)值

mysql> CREATE TABLE tb_emp7(
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25) NOT NULL,
    -> depId INT(11) DEFAULT 1111,
    -> salary FLOAT
    -> );
Query OK, 0 rows affected (0.03 sec)

設(shè)置表的屬性值自動增加

  在數(shù)據(jù)庫應(yīng)用中,經(jīng)常希望在每次插入新紀(jì)錄時(shí),系統(tǒng)自動生成字段的主鍵值??梢酝ㄟ^為表主鍵添加AUTO_INCREMENT 關(guān)鍵字來實(shí)現(xiàn)。其語法格式為:

字段名 數(shù)據(jù)類型 AUTO_INCREMENT

mysql> CREATE TABLE tb_emp8(
    -> id INT(11) PRIMARY KEY AUTO_INCREMENT,
    -> name VARCHAR(25) NOT NULL,
    -> depId INT(11),
    -> salary FLOAT
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> INSERT INTO tb_emp8(name,salary)
    -> VALUES('Lucy',1000),('Lura',2000),('Kevin',3000);
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM tb_emp8;
+----+-------+--------+--------+
| id | name  | deptId | salary |
+----+-------+--------+--------+
|  1 | Lucy  |   NULL |   1000 |
|  2 | Lura  |   NULL |   2000 |
|  3 | Kevin |   NULL |   3000 |
+----+-------+--------+--------+
3 rows in set (0.00 sec)

查看數(shù)據(jù)表結(jié)構(gòu)

 使用SQL語句創(chuàng)建好數(shù)據(jù)表之后,可以查看表結(jié)構(gòu)的定義,以確定表的定義是否正確。在MySQL中,查看表結(jié)構(gòu)可以使用DESCRIBE和SHOW CREATE TABLE語句。

mysql> DESCRIBE tb_dept1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| name     | varchar(22) | NO   |     | NULL    |       |
| location | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> SHOW CREATE TABLE tb_emp1 \G
*************************** 1. row ***************************
       Table: tb_emp1
Create Table: CREATE TABLE `tb_emp1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(25) DEFAULT NULL,
  `depId` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

3.2、修改數(shù)據(jù)表

  修改數(shù)據(jù)表指的是修改數(shù)據(jù)庫中已經(jīng)存在的數(shù)據(jù)表的結(jié)構(gòu)。MySQL使用ALTER TABLE 語句修改表。常用的修改表的操作有:修改表名、修改字段數(shù)據(jù)類型或字段名、增加和刪除字段、修改字段的排列順序、更改表的存儲引擎、刪除表的外鍵約束等。

修改表名

   修改表名的語法規(guī)則為:

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

mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| tb_dept1       |
| tb_dept2       |
| tb_dept3       |
| tb_emp1        |
| tb_emp2        |
| tb_emp5        |
| tb_emp6        |
| tb_emp8        |
+----------------+
8 rows in set (0.00 sec)

mysql> ALTER TABLE tb_dept3 RENAME TO tb_deptment3;
Query OK, 0 rows affected (0.04 sec)

mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| tb_dept1       |
| tb_dept2       |
| tb_deptment3   |
| tb_emp1        |
| tb_emp2        |
| tb_emp5        |
| tb_emp6        |
| tb_emp8        |
+----------------+
8 rows in set (0.00 sec)

修改字段的數(shù)據(jù)類型

 修改字段的數(shù)據(jù)類型,就是把字段的數(shù)據(jù)類型轉(zhuǎn)換成另一種數(shù)據(jù)類型,其語法規(guī)則為:

ALTER TABLE <表名> MODIFY <字段名> <數(shù)據(jù)類型>

mysql> DESC tb_dept1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| name     | varchar(22) | NO   |     | NULL    |       |
| location | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> ALTER TABLE tb_dept1 MODIFY name VARCHAR(33);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC tb_dept1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| name     | varchar(33) | YES  |     | NULL    |       |
| location | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

修改字段名

  MySQL中修改表字段名的語法規(guī)則為:

ALTER TABLE  <表名> CHANGE <舊字段名> <新字段名> <新數(shù)據(jù)類型>

mysql> DESC tb_dept1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| name     | varchar(33) | YES  |     | NULL    |       |
| location | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql>  ALTER TABLE tb_dept1 CHANGE location loc VARCHAR(50);
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC tb_dept1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(33) | YES  |     | NULL    |       |
| loc   | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

添加字段

添加字段的語法格式為:

ALTER TABLE <表名> ADD <新字段> <數(shù)據(jù)類型> [約束條件] [FIRST|AFTER 已存在字段名]

添加無完整約束條件的字段

mysql> ALTER TABLE tb_dept1 ADD managerId INT(10);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(33) | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

添加有完整約束條件的字段

mysql> ALTER TABLE tb_dept1 ADD column1 VARCHAR(12) NOT NULL;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(33) | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
| column1   | varchar(12) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

在表的第一列添加字段

mysql> ALTER TABLE tb_dept1 ADD column2 INT(11) FIRST;       
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column2   | int(11)     | YES  |     | NULL    |       |
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(33) | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
| column1   | varchar(12) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

在表的指定列之后添加字段

mysql> ALTER TABLE tb_dept1 ADD column3 INT(11) AFTER name;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column2   | int(11)     | YES  |     | NULL    |       |
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(33) | YES  |     | NULL    |       |
| column3   | int(11)     | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
| column1   | varchar(12) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

刪除字段

  刪除字段是將數(shù)據(jù)表中的某個(gè)字段從表中移除,其語法格式為:

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

mysql> DESC tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column2   | int(11)     | YES  |     | NULL    |       |
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(33) | YES  |     | NULL    |       |
| column3   | int(11)     | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
| column1   | varchar(12) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

mysql> ALTER TABLE tb_dept1 DROP column2;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC tb_dept1;                    
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(33) | YES  |     | NULL    |       |
| column3   | int(11)     | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
| column1   | varchar(12) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

修改字段的排列位置

  對一個(gè)數(shù)據(jù)表來說,在創(chuàng)建的時(shí)候,字段在表中的排列順序已經(jīng)確定。但是表的結(jié)構(gòu)并不是完全不能改變,可以通過ALTER TABLE來改變表中字段的相對位置,語法格式為:

ALTER TABLE <表名> MODIFY <字段1> <數(shù)據(jù)類型> FIRST|AFTER <字段2>

修改字段為表的第一個(gè)字段

mysql> ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) FIRST;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column1   | varchar(12) | YES  |     | NULL    |       |
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(33) | YES  |     | NULL    |       |
| column3   | int(11)     | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

修改字段到表的指定列之后

mysql> ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) AFTER loc;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(33) | YES  |     | NULL    |       |
| column3   | int(11)     | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| column1   | varchar(12) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

更改表的存儲引擎

 更改表的數(shù)據(jù)引擎語法格式為:

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

mysql> SHOW CREATE TABLE tb_deptment3 \G
*************************** 1. row ***************************
       Table: tb_deptment3
Create Table: CREATE TABLE `tb_deptment3` (
  `id` int(11) NOT NULL,
  `name` varchar(22) DEFAULT NULL,
  `location` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `STH` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> ALTER TABLE tb_deptment3 ENGINE=MyISAM;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE tb_deptment3 \G      
*************************** 1. row ***************************
       Table: tb_deptment3
Create Table: CREATE TABLE `tb_deptment3` (
  `id` int(11) NOT NULL,
  `name` varchar(22) DEFAULT NULL,
  `location` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `STH` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql>

刪除表的外鍵約束

  對于數(shù)據(jù)庫中定義的外鍵,如果不再需要,可以將其刪除。外鍵一旦刪除,就會解除主表和從表之間的關(guān)聯(lián)關(guān)系,MySQL中刪除外鍵的語法格式為:

ALTER TABLE <表名> FROP FOREIGN KEY <外鍵約束名>
mysql> CREATE TABLE tb_emp9          #創(chuàng)建帶有外鍵約束的表
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> CONSTRAINT fk_emp_dept FOREIGN KEY (deptId) REFERENCES tb_dept1(id)
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> SHOW CREATE TABLE tb_emp9 \G   
*************************** 1. row ***************************
       Table: tb_emp9
Create Table: CREATE TABLE `tb_emp9` (
  `id` int(11) NOT NULL,
  `name` varchar(25) DEFAULT NULL,
  `deptId` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_emp_dept` (`deptId`),
  CONSTRAINT `fk_emp_dept` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> ALTER TABLE tb_emp9 DROP FOREIGN KEY fk_emp_dept;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE tb_emp9 \G                     
*************************** 1. row ***************************
       Table: tb_emp9
Create Table: CREATE TABLE `tb_emp9` (
  `id` int(11) NOT NULL,
  `name` varchar(25) DEFAULT NULL,
  `deptId` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_emp_dept` (`deptId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

3.3、刪除數(shù)據(jù)表

刪除沒有被關(guān)聯(lián)的表

  在MySQL中,使用DROP TABLE 可以一次刪除一個(gè)或多個(gè)沒有被其他表關(guān)聯(lián)的數(shù)據(jù)表,語法格式為:

DROP TABLE [IF EXISTS] 表1,表2,...表n

mysql> DROP TABLE IF EXISTS tb_dept2;
Query OK, 0 rows affected (0.04 sec)

mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| tb_dept1       |
| tb_deptment3   |
| tb_emp1        |
| tb_emp2        |
| tb_emp5        |
| tb_emp6        |
| tb_emp8        |
| tb_emp9        |
+----------------+
8 rows in set (0.00 sec)

刪除被其他表關(guān)聯(lián)的主表

  數(shù)據(jù)表之間存在外鍵關(guān)聯(lián)的情況下,如果直接刪除父表,結(jié)果會顯示失敗。原因是直接刪除,將破壞表的參照完整性。如果必須刪除,可以先刪除外鍵約束,再刪除父表。

mysql> CREATE TABLE tb_dept2 ( id INT(11) PRIMARY KEY, name VARCHAR(25), 
location VARCHAR(50) );    #創(chuàng)建父表                                                   
Query OK, 0 rows affected (0.03 sec)

mysql> CREATE TABLE tb_emp ( id INT(11) PRIMARY KEY, name VARCHAR(25), de
ptId INT(11), salary FLOAT, CONSTRAINT fk_emp_dept FOREIGN KEY (deptId) R
EFERENCES tb_dept2(id) );   #創(chuàng)建子表,外鍵約束
Query OK, 0 rows affected (0.03 sec)

mysql> DROP TABLE tb_dept2;  #無法父表刪除  
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

mysql> ALTER TABLE tb_emp DROP FOREIGN KEY fk_emp_dept; #刪除子表外鍵
Query OK, 0 rows affected (0.10 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DROP TABLE tb_dept2;                             #成功刪除父表
Query OK, 0 rows affected (0.02 sec)


分享文章:三、數(shù)據(jù)表的基本操作
瀏覽地址:http://weahome.cn/article/pigipc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部