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/