「MySQL」MySQL數(shù)據(jù)庫及表基礎(chǔ)操作

一、數(shù)據(jù)庫操作

- 創(chuàng)建數(shù)據(jù)庫

先通過show databases;命令查看現(xiàn)有數(shù)據(jù)庫,結(jié)果如下:

#注釋 \g與;功能相同
mysql> show databases \g
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

創(chuàng)建一個(gè)新的數(shù)據(jù)庫,命令如下:

#注釋:格式 create database 數(shù)據(jù)庫名
create database mw_test;

再次查看數(shù)據(jù)庫結(jié)果如下:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mw_test            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

可以發(fā)現(xiàn)成功創(chuàng)建了數(shù)據(jù)庫mw_test。

也可以查看單個(gè)數(shù)據(jù)庫信息,命令如下:

show create database mw_test;

結(jié)果如下:

mysql> show create database mw_test;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| mw_test  | CREATE DATABASE `mw_test` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)

可以看到當(dāng)前數(shù)據(jù)庫編碼為utf8。
PS:新創(chuàng)建數(shù)據(jù)庫的名稱不能與現(xiàn)有數(shù)據(jù)庫名稱重名

- 刪除數(shù)據(jù)庫

首先創(chuàng)建一個(gè)新的數(shù)據(jù)庫用于刪除操作:

create database mw_test1;

刪除操作命令如下:

#注釋:格式:drop database 數(shù)據(jù)庫名
drop database mw_test1;

執(zhí)行結(jié)果如下:

mysql> drop database mw_test1;
Query OK, 0 rows affected (0.01 sec)

PS:刪除數(shù)據(jù)庫不會(huì)有任何提示,刪除數(shù)據(jù)庫后,數(shù)據(jù)庫中的表數(shù)據(jù)也會(huì)全部被刪除,不能恢復(fù),此操作應(yīng)提前做好備份,謹(jǐn)慎操作!

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

- 創(chuàng)建表

通過use命令切換到要?jiǎng)?chuàng)建表的數(shù)據(jù)庫進(jìn)行操作,命令如下:

use mw_test;

查看當(dāng)前選擇數(shù)據(jù)庫下的表:

show tables;

執(zhí)行結(jié)果如下:

mysql> show tables;
Empty set (0.00 sec)

可以發(fā)現(xiàn)當(dāng)前數(shù)據(jù)庫mw_test下沒有任何表。

建立名為mw_table的表(暫且不考慮數(shù)據(jù)類型):

create table mw_table(id INT(10), name VARCHAR(20), age INT(4), updateTime DATE );

繼續(xù)查看數(shù)據(jù)表表:

mysql> show tables;
+-------------------+
| Tables_in_mw_test |
+-------------------+
| mw_table          |
+-------------------+
1 row in set (0.00 sec)

查看表信息:

#注釋:也可以寫全稱:describe mw_table;
desc mw_table;

結(jié)果:

mysql> desc mw_table;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(10)     | YES  |     | NULL    |       |
| name       | varchar(20) | YES  |     | NULL    |       |
| age        | int(4)      | YES  |     | NULL    |       |
| updateTime | date        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

Null 表示該列是否可以存儲(chǔ)Null值;
Key 表示該列是否已編制索引;
Default 表示該列是否有默認(rèn)值;
Extra表示可以獲取的與給定列有關(guān)的附加信息;

查看表相信信息:

#注釋:此命令會(huì)顯示表所使用的存儲(chǔ)引擎及字符編碼
show create table mw_table;

結(jié)果如下:

mysql> show create table mw_table;
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                                                                                 |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| mw_table | CREATE TABLE `mw_table` (
  `id` int(10) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `age` int(4) DEFAULT NULL,
  `updateTime` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.05 sec)
- 主鍵

MySQL基礎(chǔ)知識(shí)及數(shù)據(jù)庫安裝 文章中簡單介紹過主鍵的作用,這里在詳細(xì)說下:
主鍵,是表中一列或多列的組合。主鍵約束(Primary Key Constraint)要求主鍵列的數(shù)據(jù)唯一性,且不能為空。主鍵能唯一的標(biāo)識(shí)一條記錄,可以結(jié)合外鍵來定義不同數(shù)據(jù)表之間的關(guān)系,且可以增加數(shù)據(jù)庫的查詢速度。

  1. 單字段主鍵
    可以在創(chuàng)建表時(shí),定義表列的同時(shí)指定主鍵,也可以定義好表結(jié)構(gòu)以后設(shè)置主鍵,具體方法如下:
    定義的同時(shí)指定主鍵:
create table mw_table1( id INT(10) PRIMARY KEY, name VARCHAR(20), age INT(4), updateTime DATE );

查看表結(jié)構(gòu)結(jié)果如下:

mysql> desc mw_table1;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(10)     | NO   | PRI | NULL    |       |
| name       | varchar(20) | YES  |     | NULL    |       |
| age        | int(4)      | YES  |     | NULL    |       |
| updateTime | date        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

PS:可以發(fā)現(xiàn)id的Null為NO,表示不可以為空,Key值為PRI,表示該列為表主鍵的一部分。

定義好結(jié)構(gòu)后指定主鍵方法如下:

create table mw_table2( id INT(10), name VARCHAR(20), age INT(4), updateTime DATE, PRIMARY KEY(id) );

查看表結(jié)構(gòu)結(jié)果如下:

mysql> desc mw_table2;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(10)     | NO   | PRI | NULL    |       |
| name       | varchar(20) | YES  |     | NULL    |       |
| age        | int(4)      | YES  |     | NULL    |       |
| updateTime | date        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

PS:這種方法就是在表結(jié)構(gòu)設(shè)計(jì)好以后,在創(chuàng)建語句的最后一行指明設(shè)置為主鍵的名字即可

2.多字段聯(lián)合主鍵

create table mw_table3( id INT(10), name VARCHAR(20) , age INT(4), tel VARCHAR(20), updateTime DATE, PRIMARY KEY(name, tel) );

查詢表結(jié)構(gòu)結(jié)果如下:

mysql> desc mw_table3;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(10)     | YES  |     | NULL    |       |
| name       | varchar(20) | NO   | PRI | NULL    |       |
| age        | int(4)      | YES  |     | NULL    |       |
| tel        | varchar(20) | NO   | PRI | NULL    |       |
| updateTime | date        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
- 外鍵

用于在兩個(gè)表的數(shù)據(jù)之間建立鏈接,可以是一列或多列。一個(gè)表可以存在多于一個(gè)的外鍵,外鍵可以為空值,若不為空,則每一個(gè)外鍵值必須等同于另一個(gè)表中主鍵的某個(gè)值。外鍵,是一個(gè)表中的一個(gè)字段,可以不是表的主鍵,但應(yīng)對(duì)應(yīng)另外一個(gè)表的主鍵。外鍵的主要作用是保證數(shù)據(jù)引用的完整性,定義外鍵后,不允許刪除在另一個(gè)表中具有相關(guān)聯(lián)關(guān)系的行。
既然是外鍵,那么就需要至少存在兩個(gè)表,一個(gè)主表,一個(gè)從表。通過以下方法創(chuàng)建:

#注釋:創(chuàng)建主表

create table mw_test_1( id INT(10) PRIMARY KEY, name VARCHAR(20), age INT(4), updateTime DATE );
#注釋:創(chuàng)建從表并設(shè)置外鍵
#注釋:格式 CONSTRAINT 外鍵名 FOREIGN KEY(從表外鍵名) REFERENCES 主表名(主表主鍵) 

create table mw_test_2( tid INT(10) PRIMARY KEY, name VARCHAR(20), tel VARCHAR(20), updateTime DATE, CONSTRAINT fk_test_1_test_2 FOREIGN KEY(tid) REFERENCES mw_test_1(id) );

以上就創(chuàng)建了一個(gè)名為fk_test_1_test_2的外鍵約束,外鍵為tid,依賴表mw_test_1的主鍵id
PS:通過以上可以看出,外鍵可以是當(dāng)前表的主鍵,也可以不是主鍵,也可以以組合的方式設(shè)置
查看表結(jié)構(gòu)如下:

mysql> show create table mw_test_2 \G
*************************** 1. row ***************************
       Table: mw_test_2
Create Table: CREATE TABLE `mw_test_2` (
  `tid` int(10) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `tel` varchar(20) DEFAULT NULL,
  `updateTime` date DEFAULT NULL,
  PRIMARY KEY (`tid`),
  CONSTRAINT `fk_test_1_test_2` FOREIGN KEY (`tid`) REFERENCES `mw_test_1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

通過Navicat for MySQL軟件可以查看外鍵,如下圖:
mw_test_2_fk_mysql.jpg
- 刪除外鍵約束

刪除外鍵約束會(huì)解除主表與從表之間的關(guān)聯(lián)關(guān)系!

#注釋:格式:ALTER TABLE 表名 DROP FOREIGN KEY 外鍵約束名

alter table mw_test_2 drop foreign key fk_test_1_test_2;

再次查看表結(jié)構(gòu):

mysql> show create table mw_test_2 \G
*************************** 1. row ***************************
       Table: mw_test_2
Create Table: CREATE TABLE `mw_test_2` (
  `tid` int(10) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `tel` varchar(20) DEFAULT NULL,
  `updateTime` date DEFAULT NULL,
  PRIMARY KEY (`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)

再次通過Navicat for MySQL軟件可以查看外鍵(需重連數(shù)據(jù)庫),結(jié)果如下圖:
mw_test_2_nofk_mysql.jpg
- 非空約束

顧名思義,就是指字段的值不能為空,對(duì)于設(shè)置了非空約束的字段沒如果添加數(shù)據(jù)時(shí),沒有指定數(shù)據(jù),則會(huì)報(bào)錯(cuò)!

create table mw_table4( id INT(10) PRIMARY KEY, name VARCHAR(20) NOT NULL, updateTime DATE );
- 唯一性約束

數(shù)據(jù)唯一性約束,要求該列不能有重復(fù)值,可以為空,但空只能出現(xiàn)一次。唯一性約束能保證一列或多列不出現(xiàn)重復(fù)值。

create table mw_table5( id INT(10) PRIMARY KEY, name VARCHAR(20), tel VARCHAR(20) UNIQUE, updateTime DATE );

查看表結(jié)構(gòu)如下:

mysql> desc mw_table5;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(10)     | NO   | PRI | NULL    |       |
| name       | varchar(20) | YES  |     | NULL    |       |
| tel        | varchar(20) | YES  | UNI | NULL    |       |
| updateTime | date        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

也可以通過以下方式設(shè)置:

create table mw_table5( id INT(10) PRIMARY KEY, name VARCHAR(20), tel VARCHAR(20), updateTime DATE, CONSTRAINT tel UNIQUE(tel) );
- 默認(rèn)值約束

指定某列的默認(rèn)值,即如果不顯示的設(shè)置值時(shí),自動(dòng)用默認(rèn)值填充。

create table mw_table6( id INT(10) PRIMARY KEY, name VARCHAR(20), tel VARCHAR(20) DEFAULT 18888888888, updateTime DATE );
- 設(shè)置自增屬性

通過AUTO_INCREMENT來指定自增屬性,初始值默認(rèn)為1,一個(gè)表中只能有一個(gè)字段使用AUTO_INCREMENT,且該字段必須為主鍵的一部分??梢詫?shí)現(xiàn)每增加一條新記錄后,字段值自動(dòng)加1,設(shè)置AUTO_INCREMENT屬性約束的字段可以是任意整數(shù)類型。

create table mw_table7( id INT(10) PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), tel VARCHAR(20) NOT NULL, updateTime DATE );

查看表結(jié)構(gòu)結(jié)果如下:

mysql> desc mw_table7;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(10)     | NO   | PRI | NULL    | auto_increment |
| name       | varchar(20) | YES  |     | NULL    |                |
| tel        | varchar(20) | NO   |     | NULL    |                |
| updateTime | date        | YES  |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

也可以在創(chuàng)建表時(shí),設(shè)置好自增屬性后,設(shè)置自增的初始值,方法如下:

 create table auto_table( id INT(10) PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), tel VARCHAR(20) NOT NULL, updateTime DATE) AUTO_INCREMENT=100;

也可在創(chuàng)建好后修改自增的初始值,方法如下:

alter table auto_table AUTO_INCREMENT=20;

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

主要介紹數(shù)據(jù)庫中已存在的表的結(jié)構(gòu)修改。

- 修改表名
#注釋:格式:ALTER TABLE 舊表名 RENAME TO 新表名;  //TO可以省略

alter table mw_table rename to new_table;

PS:修改表名不影響表結(jié)構(gòu)

- 修改字段名

同樣以修改過名稱的新表new_table為例,先來查看下當(dāng)前未修改之前的表結(jié)構(gòu)如下:

mysql> desc new_table;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(10)     | YES  |     | NULL    |       |
| name       | varchar(20) | YES  |     | NULL    |       |
| age        | int(4)      | YES  |     | NULL    |       |
| updateTime | date        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

然后修改字段名:

#注釋:格式:ALTER TABLE 表名 CHANGE 要修改的字段名  新的字段名 新字段的類型

alter table new_table change name username VARCHAR(20);

再次查看表結(jié)構(gòu)如下:

mysql> desc new_table;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(10)     | YES  |     | NULL    |       |
| username   | varchar(20) | YES  |     | NULL    |       |
| age        | int(4)      | YES  |     | NULL    |       |
| updateTime | date        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

PS:這里修改字段名,后面的新字段名對(duì)應(yīng)的數(shù)據(jù)類型應(yīng)與原字段的數(shù)據(jù)類型相同,即達(dá)到了修改字段名的目的,當(dāng)然也可不同,但是字段類型不可省略,看下面說明

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

修改字段數(shù)據(jù)類型有兩種方法,一種是使用上面的change方法,也可以使用modify方法,具體如下:

#注釋:modify方式修改,格式:ALTER TABLE 表名 MODIFY 字段名 新的字段類型

alter table new_table modify age VARCHAR(10);

查看修改后的表結(jié)構(gòu):

mysql> desc new_table;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(10)     | YES  |     | NULL    |       |
| username   | varchar(20) | YES  |     | NULL    |       |
| age        | varchar(10) | YES  |     | NULL    |       |
| updateTime | date        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

使用change方式再次修改回來:

#注釋:change方式修改,格式:ALTER TABLE 表名 CHANGE 要修改的字段名  新的字段名 新字段的類型

alter table new_table change age age INT(4);

PS:上面的修改只做演示之用,不考慮數(shù)據(jù)類型的合理性。由于不同類型的數(shù)據(jù)在機(jī)器中存儲(chǔ)的方式及長度并不相同,修改數(shù)據(jù)類型可能會(huì)影響到數(shù)據(jù)表中已有的數(shù)據(jù)記錄,所有要謹(jǐn)慎修改!

- 添加字段
#注釋:格式:ALTER TABLE 表名 ADD 添加的字段名 字段類型

alter table new_table add tel VARCHAR(20);

查看表結(jié)構(gòu)如下:

mysql> desc new_table;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(10)     | YES  |     | NULL    |       |
| username   | varchar(20) | YES  |     | NULL    |       |
| age        | int(4)      | YES  |     | NULL    |       |
| updateTime | date        | YES  |     | NULL    |       |
| tel        | varchar(20) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

添加后可以發(fā)現(xiàn),新添加的字段位于表的最后一條(即表中的最后一列),如果想在特定位置添加字段,可以使用FIRSTAFTER參數(shù)來做修飾,方法如下:

#注釋:添加新的字段到第一列,格式:ALTER TABLE 表名 ADD 字段名 字段類型 FIRST;

alter table new_table add gender INT(1) first;
#注釋:添加新的字段到特定位置,格式 ALTER TABLE 表名 ADD 字段名 字段類型 AFTER 添加到該字段的后面

alter table new_table add birthday DATE after age;

查看表結(jié)構(gòu)結(jié)果如下:

mysql> desc new_table;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| gender     | int(1)      | YES  |     | NULL    |       |
| id         | int(10)     | YES  |     | NULL    |       |
| username   | varchar(20) | YES  |     | NULL    |       |
| age        | int(4)      | YES  |     | NULL    |       |
| birthday   | date        | YES  |     | NULL    |       |
| updateTime | date        | YES  |     | NULL    |       |
| tel        | varchar(20) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

當(dāng)然也可以在添加新字段的同時(shí)設(shè)置數(shù)據(jù)的完整性約束,如下:

alter table new_table add location varchar(100) not null;
- 修改現(xiàn)有字段的排列位置
#注釋:將字段移動(dòng)到表的第一列 格式:ALTER TABLE 表名 MODIFY 字段名 字段類型 FIRST;

alter table new_table modify id int(10) first;
#注釋:將字段移動(dòng)到指定位置 格式: ALTER TABLE 表名 MODIFY 字段名 字段類型 AFTER 要移動(dòng)到該字段的后面

alter table new_table modify updateTime DATE after location;

查看表結(jié)構(gòu)如下:

mysql> desc new_table;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id         | int(10)      | YES  |     | NULL    |       |
| gender     | int(1)       | YES  |     | NULL    |       |
| username   | varchar(20)  | YES  |     | NULL    |       |
| age        | int(4)       | YES  |     | NULL    |       |
| birthday   | date         | YES  |     | NULL    |       |
| tel        | varchar(20)  | YES  |     | NULL    |       |
| location   | varchar(100) | NO   |     | NULL    |       |
| updateTime | date         | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
- 刪除字段
#注釋:格式:ALTER TABLE 表名 DROP 字段名

alter table new_table drop gender;
- 修改表的存儲(chǔ)引擎

可通過show engines;來查看系統(tǒng)支持的存儲(chǔ)引擎,結(jié)果如下:

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

PS:DEFAULT 表示當(dāng)前數(shù)據(jù)庫使用的存儲(chǔ)引擎
查看當(dāng)前表使用的存儲(chǔ)引擎:

show create table new_table;

結(jié)果如下:

mysql> show create table new_table;
+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                                                                                                                                                                                            |
+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| new_table | CREATE TABLE `new_table` (
  `id` int(10) DEFAULT NULL,
  `username` varchar(20) DEFAULT NULL,
  `age` int(4) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `tel` varchar(20) DEFAULT NULL,
  `location` varchar(100) NOT NULL,
  `updateTime` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

修改:

#注釋:格式:ALTER TABLE 表名 ENGINE=引擎名 

alter table new_table engine=MyISAM;

再次查看,結(jié)果如下:

mysql> show create table new_table \G
*************************** 1. row ***************************
       Table: new_table
Create Table: CREATE TABLE `new_table` (
  `id` int(10) DEFAULT NULL,
  `username` varchar(20) DEFAULT NULL,
  `age` int(4) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `tel` varchar(20) DEFAULT NULL,
  `location` varchar(100) NOT NULL,
  `updateTime` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

PS:外鍵約束不能跨引擎使用,雖然數(shù)據(jù)表可以指定不同的存儲(chǔ)引擎,但是如果兩個(gè)表需要做關(guān)聯(lián),如果使用不同的存儲(chǔ)引擎,則不能創(chuàng)建外鍵約束

- 刪除數(shù)據(jù)表

刪除數(shù)據(jù)表會(huì)刪除表的定義和所有數(shù)據(jù),所以應(yīng)謹(jǐn)慎操作,在刪除之前做好備份工作!

#注釋:格式:DROP TABLE 表名1,表名2
drop table mw_table7, mw_table6;

可以發(fā)現(xiàn)可以一次性刪除多個(gè)數(shù)據(jù)表,且在刪除過程中沒有任何提示性信息,但是如果刪除一個(gè)不存在的表則會(huì)報(bào)錯(cuò),如下:

#注釋:直接刪除不存在的表(mw_table7已經(jīng)被刪除,不存在該表),如下
mysql> drop table mw_table7;  
ERROR 1051 (42S02): Unknown table 'mw_test.mw_table7'

#注釋:同時(shí)刪除兩個(gè)表,一個(gè)存在,一個(gè)不存在
mysql> drop table mw_table5,mw_table7;  
ERROR 1051 (42S02): Unknown table 'mw_test.mw_table7'

通過上面的結(jié)果可以看出,當(dāng)同時(shí)刪除多個(gè)表時(shí),如果有不存在的表存在,則命令不會(huì)執(zhí)行,可通過以下辦法解決:

drop table if exists mw_table5,mw_table7;

!!PS:此處重點(diǎn)說明:當(dāng)數(shù)據(jù)表之間存在外鍵關(guān)聯(lián)的情況下,直接刪除主表,會(huì)顯示失敗,可以先刪除從表,在刪除主表,但是如果不想刪除從表,只刪除主表,可將主表與從表之間關(guān)聯(lián)關(guān)系解除后,在刪除主表。刪除外鍵關(guān)聯(lián)的方法上面已經(jīng)說過,這里不再贅述!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容