上一章mysql教程中我们讨论了:事务操作介绍和临时表的使用,本章我们会详细讨论mysql alter命令的使用以及mysql索引。
一、mysql alter命令
当你需要更改表的名称、任何表字段或想要添加或删除表中的现有列时,MySQL alter命令非常有用。
mysql> create table sample
-> (
-> i INT,
-> c CHAR(1)
-> );
Query OK, 0 rows affected (0.05 sec)
mysql> show columns from sample;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i | int(11) | YES | | NULL | |
| c | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
1、删除、添加或重新定位列
删除一个列如下所示:
mysql> alter table sample drop i;
如果表中只剩下一列drop子句不会起作用,若要添加列请使用add并指定列定义,下面的语句将i列恢复到sample:
mysql> alter table sample add i int;
这样与首次相同的两列结构不同,这是因为默认情况下有新列被添加到表的末尾,所以即使最初是sample的第一列现在它变成是最后一列。
mysql> show columns from sample;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
如果希望在表中的特定位置放置列,可以使用first使其成为第一列,也可以使用col_name后的值指示应该将新列放置在col_name之后。
尝试以下alter table语句,在每一个语句之后使用show列来查看每一个语句的效果:
alter table sample drop i;
alter table sample add i int first;
alter table sample drop i;
alter table sample add i int after c;
第一个和后面的说明符只与add子句一起工作,这意味着如果要重新定位表中现有的列,首先必须删除它然后将其添加到新位置。
2、更改列定义或名称
要更改列的定义请使用modify或change子句和alter命令,如要将列c从CHAR(1)更改为CHAR(10),可以使用以下命令:
mysql> alter table sample modify c CHAR(10);
使用change的语法略有不同,在change关键字之后命名要更改的列,然后指定包含新名称的新定义。
mysql> alter table sample change i j bingint;
如果现在使用change将j从bigint转换回int而不更改列名,则语句将如下所示:
mysql> alter table sample change j j int;
3、更改列的默认值
可以使用alter命令更改任何列的默认值,尝试以下示例。
mysql> alter table sample alter i set default 1000;
mysql> show columns from table sample;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | 1000 | |
+-------+---------+------+-----+---------+-------+
也可以通过使用DROP子句和ALTER命令从任何列中删除默认约束。
4、更改表类型
使用type子句和alter命令更改表类型,尝试以下示例将sample更改为MYISAM表类型。
mysql> alter table sample TYPE = MYISAM;
5、重命名一个表
要重命名表请使用alter
table语句的rename选项,尝试以下示例将sample重命名为exp。
mysql> alter table sample rename to exp;
二、mysql索引介绍
数据库索引是一种数据结构,它可以提高表的操作速度。可以使用一个或多个列创建索引,这为快速随机查找和对记录的有效访问排序提供了基础。索引也是表的一种类型,它保留主键或索引字段以及指向实际表中每条记录的指针。
在创建索引时,应该考虑哪些列将用于进行SQL查询并在这些列上创建一个或多个索引。用户看不到索引,它们只是用来加速查询,数据库搜索引擎将使用它们来非常快速地定位记录。
INSERT和UPDATE语句在有索引的表上花费的时间更多,而SELECT语句在这些表上的执行速度更快。原因是在执行插入或更新时,数据库还需要插入或更新索引值。
1、简单惟一索引
下面是在表上创建简单唯一索引的语法。
create unique index index_name ON table_name ( column1, column2,...);
你可以使用一个或多个列来创建索引,例如下创建一个索引。
create unique index author_index on sample (author)
2、alter命令添加和删除索引
向表添加索引的语句有四种类型:
ALTER
TABLE tbl_name ADD PRIMARY KEY(column_list)——这个语句添加了一个主键,这意味着索引的值必须是唯一的而且不能为空。
ALTER
TABLE tbl_name ADD UNIQUE index_name (column_list)——该语句创建的索引的值必须是惟一的(NULL值除外,NULL值可能出现多次)。
ALTER
TABLE tbl_name ADD INDEX index_name (column_list)——其中任何值都可以出现多次,简单索引。
ALTER
TABLE tbl_name ADD FULLTEXT index_name (column_list),这会创建一个特殊的全文索引用于文本搜索。
3、alter命令添加和删除主键
下面的代码块是一个在现有表中添加主键的示例,首先使列不为空,然后将其作为主键添加。
mysql> alter table sample MODIFY i INT NOT NULL;
mysql> alter table sample ADD PRIMARY KEY (i);
可以使用SHOW
INDEX命令列出与表关联的所有索引,使用垂直格式输出(由\G指定)在此语句中通常很有用,可以避免长行环绕
mysql> show index from table_name\G