一渗常、數(shù)據(jù)庫(kù)操作
- 創(chuàng)建數(shù)據(jù)庫(kù)
先通過(guò)show databases;
命令查看現(xiàn)有數(shù)據(jù)庫(kù)刁愿,結(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ù)庫(kù),命令如下:
#注釋?zhuān)焊袷?create database 數(shù)據(jù)庫(kù)名
create database mw_test;
再次查看數(shù)據(jù)庫(kù)結(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ù)庫(kù)mw_test
嬉挡。
也可以查看單個(gè)數(shù)據(jù)庫(kù)信息贾铝,命令如下:
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ù)庫(kù)編碼為utf8
。
PS:新創(chuàng)建數(shù)據(jù)庫(kù)的名稱(chēng)不能與現(xiàn)有數(shù)據(jù)庫(kù)名稱(chēng)重名
- 刪除數(shù)據(jù)庫(kù)
首先創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)用于刪除操作:
create database mw_test1;
刪除操作命令如下:
#注釋?zhuān)焊袷剑篸rop database 數(shù)據(jù)庫(kù)名
drop database mw_test1;
執(zhí)行結(jié)果如下:
mysql> drop database mw_test1;
Query OK, 0 rows affected (0.01 sec)
PS:刪除數(shù)據(jù)庫(kù)不會(huì)有任何提示始绍,刪除數(shù)據(jù)庫(kù)后瞳购,數(shù)據(jù)庫(kù)中的表數(shù)據(jù)也會(huì)全部被刪除,不能恢復(fù)亏推,此操作應(yīng)提前做好備份学赛,謹(jǐn)慎操作!
二吞杭、數(shù)據(jù)表創(chuàng)建
- 創(chuàng)建表
通過(guò)use
命令切換到要?jiǎng)?chuàng)建表的數(shù)據(jù)庫(kù)進(jìn)行操作盏浇,命令如下:
use mw_test;
查看當(dāng)前選擇數(shù)據(jù)庫(kù)下的表:
show tables;
執(zhí)行結(jié)果如下:
mysql> show tables;
Empty set (0.00 sec)
可以發(fā)現(xiàn)當(dāng)前數(shù)據(jù)庫(kù)mw_test
下沒(méi)有任何表。
建立名為mw_table
的表(暫且不考慮數(shù)據(jù)類(lèi)型):
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)
查看表信息:
#注釋?zhuān)阂部梢詫?xiě)全稱(chēng):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)的附加信息译蒂;
查看表相信信息:
#注釋?zhuā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ù)庫(kù)安裝 文章中簡(jiǎn)單介紹過(guò)主鍵的作用曼月,這里在詳細(xì)說(shuō)下:
主鍵谊却,是表中一列或多列的組合柔昼。主鍵約束(Primary Key Constraint)要求主鍵列的數(shù)據(jù)唯一性,且不能為空炎辨。主鍵能唯一的標(biāo)識(shí)一條記錄捕透,可以結(jié)合外鍵來(lái)定義不同數(shù)據(jù)表之間的關(guān)系,且可以增加數(shù)據(jù)庫(kù)的查詢(xún)速度碴萧。
- 單字段主鍵
可以在創(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)建語(yǔ)句的最后一行指明設(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) );
查詢(xún)表結(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è)從表蛉抓。通過(guò)以下方法創(chuàng)建:
#注釋?zhuān)簞?chuàng)建主表
create table mw_test_1( id INT(10) PRIMARY KEY, name VARCHAR(20), age INT(4), updateTime DATE );
#注釋?zhuān)簞?chuàng)建從表并設(shè)置外鍵
#注釋?zhuān)焊袷?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
,依賴(lài)表mw_test_1
的主鍵id
PS:通過(guò)以上可以看出巷送,外鍵可以是當(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)
通過(guò)Navicat for MySQL軟件可以查看外鍵笑跛,如下圖:- 刪除外鍵約束
刪除外鍵約束會(huì)解除主表與從表之間的關(guān)聯(lián)關(guān)系付魔!
#注釋?zhuān)焊袷剑篈LTER 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)
再次通過(guò)Navicat for MySQL軟件可以查看外鍵(需重連數(shù)據(jù)庫(kù)),結(jié)果如下圖:- 非空約束
顧名思義飞蹂,就是指字段的值不能為空几苍,對(duì)于設(shè)置了非空約束的字段沒(méi)如果添加數(shù)據(jù)時(shí),沒(méi)有指定數(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)
也可以通過(guò)以下方式設(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è)置自增屬性
通過(guò)AUTO_INCREMENT
來(lái)指定自增屬性庇谆,初始值默認(rèn)為1赁遗,一個(gè)表中只能有一個(gè)字段使用AUTO_INCREMENT
,且該字段必須為主鍵的一部分族铆⊙宜模可以實(shí)現(xiàn)每增加一條新記錄后,字段值自動(dòng)加1哥攘,設(shè)置AUTO_INCREMENT
屬性約束的字段可以是任意整數(shù)類(lèi)型剖煌。
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ù)庫(kù)中已存在的表的結(jié)構(gòu)修改茉兰。
- 修改表名
#注釋?zhuān)焊袷剑篈LTER TABLE 舊表名 RENAME TO 新表名; //TO可以省略
alter table mw_table rename to new_table;
PS:修改表名不影響表結(jié)構(gòu)
- 修改字段名
同樣以修改過(guò)名稱(chēng)的新表new_table
為例,先來(lái)查看下當(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)
然后修改字段名:
#注釋?zhuān)焊袷剑篈LTER TABLE 表名 CHANGE 要修改的字段名 新的字段名 新字段的類(lèi)型
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ù)類(lèi)型應(yīng)與原字段的數(shù)據(jù)類(lèi)型相同规脸,即達(dá)到了修改字段名的目的,當(dāng)然也可不同熊咽,但是字段類(lèi)型不可省略莫鸭,看下面說(shuō)明
- 修改字段數(shù)據(jù)類(lèi)型
修改字段數(shù)據(jù)類(lèi)型有兩種方法,一種是使用上面的change
方法横殴,也可以使用modify
方法被因,具體如下:
#注釋?zhuān)簃odify方式修改,格式:ALTER TABLE 表名 MODIFY 字段名 新的字段類(lèi)型
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
方式再次修改回來(lái):
#注釋?zhuān)篶hange方式修改衫仑,格式:ALTER TABLE 表名 CHANGE 要修改的字段名 新的字段名 新字段的類(lèi)型
alter table new_table change age age INT(4);
PS:上面的修改只做演示之用梨与,不考慮數(shù)據(jù)類(lèi)型的合理性。由于不同類(lèi)型的數(shù)據(jù)在機(jī)器中存儲(chǔ)的方式及長(zhǎng)度并不相同文狱,修改數(shù)據(jù)類(lèi)型可能會(huì)影響到數(shù)據(jù)表中已有的數(shù)據(jù)記錄粥鞋,所有要謹(jǐn)慎修改!
- 添加字段
#注釋?zhuān)焊袷剑篈LTER TABLE 表名 ADD 添加的字段名 字段類(lèi)型
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)如贷,新添加的字段位于表的最后一條(即表中的最后一列)陷虎,如果想在特定位置添加字段,可以使用FIRST
或AFTER
參數(shù)來(lái)做修飾杠袱,方法如下:
#注釋?zhuān)禾砑有碌淖侄蔚降谝涣?格式:ALTER TABLE 表名 ADD 字段名 字段類(lèi)型 FIRST;
alter table new_table add gender INT(1) first;
#注釋?zhuān)禾砑有碌淖侄蔚教囟ㄎ恢茫袷?ALTER TABLE 表名 ADD 字段名 字段類(lèi)型 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)有字段的排列位置
#注釋?zhuān)簩⒆侄我苿?dòng)到表的第一列 格式:ALTER TABLE 表名 MODIFY 字段名 字段類(lèi)型 FIRST;
alter table new_table modify id int(10) first;
#注釋?zhuān)簩⒆侄我苿?dòng)到指定位置 格式: ALTER TABLE 表名 MODIFY 字段名 字段類(lèi)型 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)
- 刪除字段
#注釋?zhuān)焊袷剑篈LTER TABLE 表名 DROP 字段名
alter table new_table drop gender;
- 修改表的存儲(chǔ)引擎
可通過(guò)show engines;
來(lái)查看系統(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ù)庫(kù)使用的存儲(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)
修改:
#注釋?zhuān)焊袷剑篈LTER 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)慎操作糠涛,在刪除之前做好備份工作!
#注釋?zhuān)焊袷剑篋ROP TABLE 表名1兼犯,表名2
drop table mw_table7, mw_table6;
可以發(fā)現(xiàn)可以一次性刪除多個(gè)數(shù)據(jù)表忍捡,且在刪除過(guò)程中沒(méi)有任何提示性信息,但是如果刪除一個(gè)不存在的表則會(huì)報(bào)錯(cuò)切黔,如下:
#注釋?zhuān)褐苯觿h除不存在的表(mw_table7已經(jīng)被刪除砸脊,不存在該表),如下
mysql> drop table mw_table7;
ERROR 1051 (42S02): Unknown table 'mw_test.mw_table7'
#注釋?zhuān)和瑫r(shí)刪除兩個(gè)表纬霞,一個(gè)存在凌埂,一個(gè)不存在
mysql> drop table mw_table5,mw_table7;
ERROR 1051 (42S02): Unknown table 'mw_test.mw_table7'
通過(guò)上面的結(jié)果可以看出,當(dāng)同時(shí)刪除多個(gè)表時(shí)诗芜,如果有不存在的表存在瞳抓,則命令不會(huì)執(zhí)行,可通過(guò)以下辦法解決:
drop table if exists mw_table5,mw_table7;
!!PS:此處重點(diǎn)說(shuō)明:當(dāng)數(shù)據(jù)表之間存在外鍵關(guān)聯(lián)的情況下伏恐,直接刪除主表挨下,會(huì)顯示失敗,可以先刪除從表脐湾,在刪除主表臭笆,但是如果不想刪除從表,只刪除主表秤掌,可將主表與從表之間關(guān)聯(lián)關(guān)系解除后愁铺,在刪除主表。刪除外鍵關(guān)聯(lián)的方法上面已經(jīng)說(shuō)過(guò)闻鉴,這里不再贅述茵乱!