跳至內容

MySQL/Language/Table manipulation

維基教科書,自由的教學讀本

CREATE TABLE

[編輯]

創建表語法:

 Create table [IF NOT EXISTS] tablename (FieldName1 DataType, FieldName2 DataType,..., [PRIMARY KEY ( col_n, col_m,... )])

每列可加

NOT NULL

AUTO_INCREMENT

後綴。

"select"查詢返回的結果可以存為一張新表。

 CREATE TABLE LearnHindi
 select english.tag, english.Inenglish as english, hindi.Inhindi as hindi
 FROM english, hindi
 WHERE english.tag = hindi.tag

表的尺寸受限於作業系統,通常是2TB[1].

MySQL對選項AUTO_INCREMENT,給表設置一個自動增量的key欄位:

ALTER TABLE tablename AUTO_INCREMENT = 1

拷貝一張表

[編輯]

複製表的結構:

 CREATE TABLE `new1` LIKE `old1`;

複製一張表,帶著數據:

(假设两个表结构一样)
 INSERT INTO `new1` SELECT * FROM `old1`;
(假设两个表结构不一样)
 INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表

複製表結構及數據到新表

CREATE TABLE 新表 SELECT * FROM 旧表

這種方法會將oldtable中所有的內容都拷貝過來,新表中沒有了舊錶的primary key、Extra(auto_increment)等屬性。需要用alter添加,而且容易搞錯。

將表1內容全部複製到表2

SELECT * INTO 表2 FROM 表1

將舊錶的創建命令列出

show create table 旧表; 

用mysqldump將表dump出來,改名字後再導回去或者直接在命令行中運行

臨時表

[編輯]

創建臨時表:

 CREATE TEMPORARY TABLE IF NOT EXISTS MyTempTable1 AS (SELECT * FROM MyTable1)

帶著命名列:

 CREATE TEMPORARY TABLE IF NOT EXISTS MyTempTable1(id INT) AS (SELECT id FROM MyTable1)

如果臨時表的列名不匹配,則新增列:

 CREATE TEMPORARY TABLE IF NOT EXISTS MyTempTable1(id1 INT) AS (SELECT id FROM MyTable1);
 SHOW FIELDS FROM MyTempTable1;
Field 	Type 	Null 	Key 	Default 	Extra 	
id1 	int(11) 	YES 		NULL	
id 	int(11) 	NO 		0 	

MySQL連接終止時,所有臨時表自動刪除。[2].

ALTER TABLE

[編輯]

ALTER TABLE命令用於add/delete/modify列與索引,修改表的屬性.

增加列:

 ALTER TABLE awards ADD [COLUMN] AwardCode int(2) not null default 5;
 alter table 表名 add 列名 列类型 列参数 after 某列【把新列加在某列后面】
 alter table 表名 add 列名 列类型 列参数 first【把新列加在最前面】

修改列:

 alter table 表名 change 旧列名 新列名 新类型 新参数【修改列名和列类型】
 ALTER TABLE awards CHANGE COLUMN AwardCode VARCHAR(2) NOT NULL

 alter table 表名 modify 列名 新类型 新参数【修改列类型】
 ALTER TABLE awards MODIFY COLUMN AwardCode VARCHAR(2) NOT NULL

刪除列:

 ALTER TABLE awards  DROP [COLUMN] AwardCode

表中的行重新排序:

 ALTER TABLE awards ORDER BY id


表的改名

[編輯]

對老表具有ALTER與DROP權限,對新表具有CREATE與INSERT權限。

改名:

 RENAME TABLE `old_name` TO `new_name`

多表改名:

 RENAME TABLE `old1` TO `new1`, `old2` TO `new2`, ...

RENAME 是個捷徑,可以用ALTER TABLE改名:

 ALTER TABLE `old` RENAME `new`

臨時表必須用ALTER TABLE改名。

DROP TABLE

[編輯]
 DROP TABLE `awards`


 DROP TABLE `table1`, `table2`, ...


 DROP TEMPORARY TABLE `table`;
 DROP TABLE `table` IF EXISTS;

TEMPORARY必須顯式給出。

查詢表的結構

[編輯]
desc 表名
show columns from 表名【效果和desc一样】
show create table 表名【查看表的创建代码】

參考文獻

[編輯]
  1. http://dev.mysql.com/doc/refman/5.7/en/table-size-limit.html
  2. http://www.mysqltutorial.org/mysql-temporary-table/