第21章 创建和操纵表
一、创建表 |
1. 表创建语法:
create table 表名(列名 类型(长度) 约束,...);
例如:
create table customers
{
cust_id int NOT NULL AUTO_INCREMENT,
cust_name char(50) NOT NULL,
cust_address char(50) NULL,
PRIMARY KEY(cust_id)
}ENGINE=InnoDB;
注意:在创建新表时,指定的表名必须不存在,否则将出错,使用IF NOT EXISTS
以达到在一个表不存在时才创建它目的。
2. 使用NULL值:
每个列要么是NULL列,要么是NOT NULL列,需要在创建表时指出。需要注意的是:不能将NULL值和空串相混淆。NULL值是没有值,不是空串。而空串是一个有效值,并不是空值。
3. 主键:
主键值可以是单个列,也可以是多个列的组合,但都要主键值必须唯一。如果主键是多个列组合,可以使用类似以下语句来定义:
PRIMARY KEY(cust_id, cust_name)
注意:主键的值只能为NOT NULL,而允许NULL值的列是不能作为主键的。
4. 使用AUTO_INCREMENT:
AUTO_INCREMENT能够使得本列没增加一行时,自动增量。
可以使用
select last_insert_id()
来获取AUTO_INCREMENT列的值
注意:每一张表只允许一个AUTO_INCREMENT列,而且它必须被索引(如,通过使它成为主键)。
5. 指定默认值:
在创建表语句中使用
DEFAULT
关键字来指定默认值,如:
create table customers
{
cust_id int NOT NULL AUTO_INCREMENT,
cust_name char(50) NOT NULL,
cust_address char(50) NULL,
cust_total int NOT NULL DEFAULT 0,
PRIMARY KEY(cust_id)
}ENGINE=InnoDB;
6. 搜索引擎类型:
不同的引擎拥有各自不同的功能和特性,任务需求不同时应该灵活选择引擎,以下是几种常见的引擎:
-
InnoDB是一个可靠的事务处理引擎,但是不支持全文本搜索;
-
MyISAM是一个性能极高的引擎,它支持全文本搜索,但是不支持事务处理;
-
MEMORY在功能上等同于MyISAM,但是由于它的数据存储在内存中,因此它的速度很快。
注意:引擎类型可以混用,但是外键不能跨引擎。
二、更新表 |
表的更新可以使用
ALTER TABLE
语句来实现,但是一般情况下,当表中存储了数据后,该表就不应该再被更新。在进行改动前,应该做一个完整的备份(模式和数据)。表的更改不能被撤销,为了增加不需要的列,可能不能删除他它们。类似地,如果删除了不应该删除的列,可能会丢失该列中的所有数据。
1. 添加一个列:
ALTER TABLE customers
ADD cust_phone CHAR(20);
2. 删除一个列:
ALTER TABLE customers
DROP COLUMN cust_phone;
三、删除表与重命名表 |
使用
DROP TABLE
来删除表:
DROP TABLE customers;
使用
RENAME TABLE
来删除表:
RENAME TABLE customers TO customer;