第二十一章创建和操纵表
创建表
create table
- 使用具有交互式创建和管理表的工具;
- 表也可以直接使用MySQL语句操纵。
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 default 1,
cust_email char(255) NULL,
PRIMARY KEY (cust_id)
)ENGINE=InnoDB;auto_increment = xxxxx
包括表名,列名,数据类型。
在创建新表时,指定的表名必须不存在。
如果要防止意外覆盖已有的表,SQL要求首先手工删除该表,然后再重建它,而不是简单地使用创建表语句覆盖它。
如果你仅想在一个表不存在时创建它,应该在表名后给出IF NOT EXISTS。这样做不检查已有表的模式是否与你打算创建的表模式相匹配。它只是查看表名是否存在,并且仅在表名不存在时创建它。
NULL为默认设置,如果不指定NOT NULL,则认为指定的是NULL。
多个主键
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;
这里使用唯一的订单号和订单物品次序两个键值作为主键。允许null值不能作为唯一标识的主键
自动增量
每次执行一个insert操作时,自动对该列增量(从而才有这个关键字auto_increment),给该列赋予下一个可用的值。它必须被索引如用作主键
覆盖auto_increment:如果一个列被指定为auto_increment,则它需要使用特殊的值吗?你可以简单地在insert语句中指定一个值,只要它是唯一的(至今尚未使用过)即可,该值将被用来替代自动生成的值。后续的增量奖开始使用该手工插入的值。
可使用last_insert_id()函数获得这个值,如下所示:
select last_insert_id()
此语句返回最后一个AUTO_INCREMENT值,然后可以将它用于后续的MySQL语句。
指定自动增量值见上
指定默认值
见上
mysql不允许使用函数作为默认值
经常使用默认值而不是空值
引擎类型
更新表定义
alter table
# 给vendors表增加一个名为vend_phone的列
alter table vendors
add vend_phone char(20);
# 删除刚刚添加的列
alter table vendors
drop column vend_phone;
# ALTER TABLE的一种常见用途是定义外键
# 以下为书本配套文件create.sql中定义外键的语句
ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_orders FOREIGN KEY (order_num) REFERENCES orders (order_num);
ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_products FOREIGN KEY (prod_id) REFERENCES products (prod_id);
ALTER TABLE orders ADD CONSTRAINT fk_orders_customers FOREIGN KEY (cust_id) REFERENCES customers (cust_id);
ALTER TABLE products ADD CONSTRAINT fk_products_vendors FOREIGN KEY (vend_id) REFERENCES vendors (vend_id);
也可以使用单条alter table语句每个更改用逗号分隔
删除表和重命名表
drop table customers;
rename table customers to customers;
#对多个表重命名(假设存在下述表)
rename table backup_customers to customer,
backup_vendors to vendors,
backup_products to products;