21.1 创建表
创建表的方式有两种,
1. 使用交互式创建和管理表的工具;
2. 表也可以直接使用MySQL语句操纵。
21.1.1 表创建基础
使用CREATE TABLE
,必须给出如下信息,
1. 在CREATE TABLE
之后,给出新表的名称;
2. 表列的名字和定义,用逗号分隔;
3. 表的主键PRIMARY KEY
可以在创建表时给出;
4. 最终给出使用的数据库类型。
CREATE TABLE customers
(
cust_id int NOT NULL AUTO_INCREMENT,
cust_name char(50) NOT NULL,
cust_address char(50) NULL,
cust_city char(50) NULL,
cust_state char(5) NULL,
cust_zip char(10) NULL,
cust_country char(50) NULL,
cust_contact char(50) NULL,
cust_email char(255) NULL,
PRIMARY KEY (cust_id)
) ENGINE=InnoDB;
分析,当创建新表时,若已经存在表,需要先删除,否则会报错。当表不存在时创建它,需要使用IF NOT EXISTS
。
21.1.2 使用NULL
值
- 若创建表时,不允许
NULL
值的列。如果强行插入,会报错,且插入失败。
- 不要把
NULL
值和空串(两个单引号,中间没有字符''
)混淆。空串是个有效值。
- 不要把
21.1.3 主键再介绍
主键必须唯一。即每个行必须具有唯一的主键值。通常使用的都是单列作为主键。为创建由多个列组成的主键,应该以逗号分割的列表给出各列名,如下
CREATE TABLE orderitems
(
order_num int NOT NULL,
order_item int NOT NULL,
prod_id char(10) NOT NULL,
quantity int NOT NULL,
item_price decimal(8, 2) NOT NULL,
PRIMARY KEY (order_num, order_item)
) ENGINE=InnoDB
21.1.4 使用AUTO_INCREMENT
- 简要说明下需要注意的地方,
- 覆盖
AUTO_INCREMENT
。如果一个列被指定为AUTO_INCREMENT
,当想要使用特殊值,只需要赋值一个唯一值即可,后续的增量开始于手工值。 - 可以使用
last_insert_id
来获取AUTO_INCREMENT
的增量值。SELECT last_insert_id
- 覆盖
21.1.5 指定默认值
使用默认值,需要使用DEFAULT
关键字
- 与大多数的DBMS不同,MySQL不允许使用函数作为默认值
21.1.6 引擎类型
MySQL打包了多个引擎。由于各自的功能和特性,为不同的认为选择正确的引擎获取良好的功能和灵活性。
1. InnoDB是一个可靠的事务处理引擎,不支持全文检索;
2. MEMORY在功能上等同于MyIASM,但数据存储在内存,速度很快,适合临时表;
3. MyISAM是一个性能极高的引擎,支持全文检索。
- 引擎可以混用,但是外键不能跨引擎。一个引擎的表不能引用具有使用不同引擎的表的外键。
21.2 更新表
使用ALTER TABLE
语句,但理想状况下,不期望做更新表的动作,都在创建前进行考虑。为使用ALTER TABLE
更改表结果,必须提高一下信息,
1. 在ALTER TABLE
之后给出表名称;
2. 所做更改的列表。
如下,添加和删除列,
ALTER TABLE vendors
ADD vend_phone CHAR(20);
ALTER TABLE vendors
DROP COLUMN vend_phone;
复制的表结果更改,需要进行手动删除操作,
1. 用新的列布局创建一个新表;
2. 使用INSERT SELECT
语句从旧表中复制数据。如有必要,使用转换函数和计算字段;
3. 检验包含数据的新表;
4. 重命名旧表;
5. 用旧表的名称重命名新表;
6. 根据需要,重新创建触发器、存储过程、索引和外键。
21.3 删除表
删除表的操作,使用DROP TABLE
语句
DROP TABLE customer32
- 注意,没有撤销操作
21.4 重命名表
重命名表的操作,使用RENAME TABLE
语句