数据库入门:MySQL必知必会(二十一)创建和操纵表
二十一、创建和操纵表
01. 创建表
MySQL不仅用于表数据操纵,而且还可以用来执行数据库和表的所有操作,包括表本身的创建和处理。
- 一般有两种创建表的方法:
1.1 使用具有交互式创建和管理表的工具;
1.2 表也可以直接用MySQL语句操纵; -
表创建基础:
2.1 利用CREATE TABLE创建表,必须给出下列信息:
新表的名字: 在关键字CREATE TABLE之后给出;
表列的名字和定义: 用逗号分隔;
2.2 创建所用的customers表:
2.3 实际的表定义(所有列)括在圆括号之中,各列之间用逗号分隔;
2.4 表的主键可以在创建表时用PRIMARY KEY关键字指定;
2.5 在创建新表时,指定的表名必须不存在,否则将出错; -
使用NULL值:
每个表列或者是NULL列,或者是NOT NULL列,这种状态在创建时由表的定义规定:
3.1 每个列的定义都含有关键字NOT NULL,这将会阻止插入没有值的列;
3.2 创建混合了NULL和NOT NULL列的表:
3.3 NULL 为默认设置,如果不指定NOT NULL,则认为指定的是NULL; -
主键再介绍:
主键值必须唯一,表中的每个行必须具有唯一的主键值;如果主键使用单个列,则它的值必须唯一;如果使用多个列,则这些列的组合值必须唯一。
4.1 创建由多个列组成的主键,应该以逗号分隔的列表给出各列名:
4.2 主键中只能使用不允许NULL值的列,允许NULL值的列不能作为唯一标识; -
使用AUTO_INCREMENT:
customers表中的顾客由列cust_id唯一标识,每个顾客有一个唯一编号;这些编号除它们是唯一的以外没有别的特殊意义,在增加一个新顾客或新订单时,需要一个新的顾客ID或订单号。
5.1 这些编号可以任意,只要它们是唯一的即可。显然,使用的最简单的编号是下一个编号,所谓下一个编号是大于当前最大编号的编号;
5.2 这就是AUTO_INCREMENT发挥作用的时候了:
5.3 每次执行一个INSERT操作时,MySQL 自动对该列增量;
5.4 每个表只允许一个AUTO_INCREMENT列,而且它必须被索引;
5.5 如何在使用AUTO_INCREMENT列时获得这个值呢?可使用last_insert_id() 函数获得这个值,此语句返回最后一个AUTO_INCREMENT值: -
指定默认值:
如果在插入行时没有给出值,MySQL允许指定此时使用的默认值,默认值用CREATE TABLE语句的列定义中的DEFAULT关键字指定。
6.1 DEFAULT 1指示MySQL,在未给出数量的情况下使用数量1;
6.2 MySQL 不允许使用函数作为默认值,它只支持常量; -
引擎类型:
如果省略 ENGINE= 语句,则使用默认引擎(很可能是MyISAM),多数SQL语句都会默认使用它;
以下是几个需要知道的引擎:
7.1 InnoDB是一个可靠的事务处理引擎,它不支持全文本搜索;
7.2 MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表);
7.3 MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。
02. 更新表
为更新表定义,可使用ALTER TABLE语句。但是,理想状态下,当表中存储数据以后,该表就不应该再被更新。在表的设计过程中需要花费大量时间来考虑,以便后期不对该表进行大的改动。
- 为了使用ALTER TABLE更改表结构,必须给出下面的信息:
1.1 在ALTER TABLE之后给出要更改的表名(该表必须存在,否则将出错);
1.2 所做更改的列表; - 给表添加一个列:
- 删除刚刚添加的列:
- ALTER TABLE的一种常见用途是定义外键:
- 复杂的表结构更改一般需要手动删除过程,它涉及以下步骤:
5.1 用新的列布局创建一个新表;
5.2 使用INSERT SELECT语句从旧表复制数据到新表,如果有必要,可使用转换函数和计算字段;
5.3 检验包含所需数据的新表;
5.4 重命名旧表(如果确定,可以删除它);
5.5 用旧表原来的名字重命名新表;
5.6 根据需要,重新创建触发器、存储过程、索引和外键。
03. 删除表
删除表(删除整个表而不是其内容)非常简单,使用DROP TABLE语句即可:
04. 重命名表
使用RENAME TABLE语句可以重命名一个表:
对多个表重命名: