跳转到内容

MySQL/语言/表操作

来自维基教科书,开放书籍,自由世界

CREATE TABLE

[编辑 | 编辑源代码]

创建表的语法是

 Create table tablename (FieldName1 DataType, FieldName2 DataType)

"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 选项确保唯一键自动递增。如果表被截断,可以使用以下命令重置计数器:

ALTER TABLE tablename AUTO_INCREMENT = 1

复制表

[编辑 | 编辑源代码]

要复制相同的结构(名称、字段类型和索引,但不包括记录)

 CREATE TABLE `new1` LIKE `old1`;

将记录复制到先前的结果中

 INSERT INTO `new1` SELECT * FROM `old1`;

临时表

[编辑 | 编辑源代码]

可以创建类型为 "table" 的变量,就像其他变量一样,它们将在脚本结束时被删除。这被称为 "临时表"。

 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 命令;或者,它可以用于更改其他表属性。

添加列

 ALTER TABLE awards
 ADD COLUMN AwardCode int(2)

修改列

 ALTER TABLE awards
 CHANGE COLUMN AwardCode VARCHAR(2) NOT NULL

 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 权限。

您可以使用 ALTER TABLE 重命名表

 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 来删除临时表。IF EXISTS 告诉服务器如果表不存在,它不应引发错误。

参考资料

[编辑 | 编辑源代码]
  1. https://dev.mysqlserver.cn/doc/refman/5.7/en/table-size-limit.html
  2. http://www.mysqltutorial.org/mysql-temporary-table/
华夏公益教科书