21.1 创建表
创建表一般有两种方法:
- 使用具有交互式创建和管理表的工具(IDE)
- 直接使用MySQL语句
CREATE TABLE
进行创建
CREATE TABLE table_name(
col1 type ...
col2 type ...
col3 type ...
) ENGINE=;
- 使用
CREATE TABLE
关键字后还需要定义列(指定其类型以及其他属性:如主键、默认值等) - 搜索引擎指定不唯一
- 在处理现有的表时需要格外小心,防止意外覆盖已有的表
21.2 定义列的其他属性
21.2.1 NULL值
对列可以指定是NULL或者NOT NULL;如果定义列含有NOT NULL关键字时,若没有插入该列的值则会报错;NULL则相反
- NULL与空串不同,NULL时没有值,而空串为「' '」,本质上还是一个字符串值
21.2.2 PRIMARY KEY主键
每个表中的主键必须唯一,可以使用PRIMARY KEY(col_name)
来指定表中的某一列作为主键;也可以直接在创建列中指定列属性col type PRIMARY KYE
21.2.3 AUTO_INCREMENT自增
- AUTO_INCREMENT告诉MySQL,本列每当增加一行时自动增量
- 每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(如:通过使它成为主键)。
21.2.4 DEFAULT默认值指定
如果不希望某列的值不为空,但又暂时不用修改,那么可以使用默认值来设定最开始的值;直接使用DEFAULT 值
即可
- MySQL不允许使用函数作为默认值,它只支持常量
21.2.5 引擎类型
MySQL服务器有着许多种引擎,各自都具备着不同的功能和特性,以便能提高搜索的性能;在创建表时可以使用ENGINE=引擎名
来指定,主要有以下几个引擎:
- InnoDB:事务处理引擎,不支持全文本搜索
- MyISAM:性能极高的引擎,它支持全文本搜索,但不支持事务处理。
- MEMORY:功能等同于MyISAM,但数据存储在内存(而不是磁盘),速度很快(特别适合于临时表)
以上引擎类型可以混用,以便弥补引擎的局限;MyISAM一般为最受欢迎的引擎,但根据特性来对引擎进行选择
21.3 更新表
对表定义后可以使用ALTER TABLE来对表中的定义列进行调整;但是理想状态下,当表中存储数据以后,该表就不应该再被更新。
#增加字段
ALTER TABLE vendors
ADD vend_phone CHAR(20);
#删除字段
ALTER TABLE vendors
DROP vend_phone;
- 使用
ADD
和DROP
关键字可以来对字段进行增删
除了基本的增删功能外,ALTER TABLE的一种常见用途是定义外键:
ALTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_orders
FOREIGN KEY (order_num) REFERENCES orders (order_num);
- ADD CONSTRAINT用于指定外键名
- FOREIGN KEY来指定orderitems表的order_num字段为外键,用REFERENCES关键字来连接orders表的order_num字段
但是在使用ALTER TABLE要极为小心,应该在进行改动前做一个完整的备份(模式和数据的备份)。因为数据库的操作无法撤销
21.4 删除表
使用DROP TABLE语句即可删除表(删除表而不是其内容):
DROP TABLE customers2;
- 删除表没有确认,也不能撤销,执行这条语句将永久删除该表。因此要格外小心。
21.5 重命名表
使用RENAME TABLE语句可以对表的名字进行修改:
RENAME TABLE customers TO customers;
- 使用TO关键字来指定新表名
- RENAME TABLE语句还可以对多个表进行重命名,只需要使用逗号将每一个命名语句隔开即可