21.1创建表
一般有两种创建表的方法:
使用具有交互式创建和管理表的工具(如第2章讨论的工具);
表也可以直接用MySQL语句操纵。
21.1.1表创建基础
输入
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;
分析
表名紧跟在CREATE TABLE 关键字后面 ,实际的表定义括在圆括号中。各列之间用逗号分隔。这个表由9列组成。每列的定义以列名开始,后跟列的数据类型。表的主键可以在创建表时用PRIMARY KEY关键字指定,这里,列cust_id指定作为主键列。整条语句由右圆括号后的分号结束
处理现有的表
在创建新表时,指定的表名必须不存在,否则将出错。如果你仅想在一个表不存在时创建它,应该在表名后给出IF NOT EXISTS。
21.1.2NULL值
NULL值就是没有值或缺值。允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列在插入或更新行时,该列必须有值。
21.1.3主键再介绍
为创建由多个列组成的主键,应该以逗号分隔的列表给出各列名。
例如
CREATE TABLE orderi tems
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,且在INSERT语句中指定一个值(该值唯一),该值将被用来替代自动生成的值。后续的增量将开始使用该手工插入的值。
可使用last_insert_id()函数获得AUTO_INCREMENT新增的最后一个值,如下所示:
SELECT last_insert_id()
此语句返回最后一个AUTO_INCREMENT值,然后可以将它用于后续的MySQL语句。
21.1.5指定默认值
默认值用CREATE TABLE语句的列定义中的DEFAULT关键字指定。
CREATE TABLE orde ri tems
(
order_ num int NOT NULL
order_ i tem int NOT NULL
prod_ id char(10) NOT NULL
quantity int NOT NULL DEFAULT 1 ,
item_ price decimal(8,2) NOT NULL ,
PRIMARY KEY (order_ num, order_ _i tem)
) ENGINE=InnoDB;
在此例子中,给quantity列的描述添加文本DEFAULT 1指示MySQL,在未 给出数量的情况下使用数量1。
21.1.6引擎类型
MySQL常用的引擎:
- InnoDB是一个可靠的事务处理引擎(参见第26章),它不支持全文 本搜索;
- MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表);
- MyISAM是一个性能极高的引擎,它支持全文本搜索(参见第18章),但不支持事务处理。
注意:
使用一个引擎的表不能引用具有使用不同引擎的表的外键。
21.2 更新表
分析**
增加列
ALTER TABLE vendors
ADD vend_phone char(20);
这语句给vendors表增加一个名为vend_phone的列,必须明确其数据类型
删除列
ALTER TABLE vendors
DROP COLUMN vend_phone;
定义外键
ALTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_orders
FOREIGN KEY (order_num) REFERENCES orders(order_num);
**小心使用ALTER TABLE:**使用ALTER TABLE要极为小心,应该在进行改动前做一个完整的备份(模式和数据的备份)。
21.3删除表
DROP TABLE customers1;
//这条语句是永久删除,不能撤销
21.4重命名表
RENAME TABLE customers2 TO customers;
21.5小结
本章介绍了几条新SQL语句。CREATE TABLE用来创建新表,ALTER TABLE用来更改表列(或其他诸如约束或索引等对象),而DROP TABLE用 来完整地删除一个表。这些语句必须小心使用,并且应在做了备份后使 用。本章还介绍了数据库引擎、定义主键和外键,以及其他重要的表和 列选项。