21.创建和操纵表
###一、创建表(CREATE TABLE) 创建一个表时需要的信息:
- 新表的名字,在CREATE TABLE后给出
- 表列的名字和定义,用逗号分隔 例
CREATE TABLE customers
(
id int NOT NULL AUTO_INCREMENT,
name char(50) NOT NULL,
address char(50) NULL ,
city char(50) NULL ,
state char(50) NULL ,
zip char(50) NULL ,
country char(50) NULL ,
contact char(50) NULL ,
emial char(255) NULL ,
PRIMARY KEY(id)
)ENGINE=InnoDB
Tips:
sql创建新表时要求此表是不存在的,如果已存在此表,那么会返回错误
但是在表名后加上IF NOT EXISTS(CREATE TABLE IF NOT EXISTS customers)后,如果此表名存在,那么不会创建表,但是不会返回错误
Tips:
与其他DBMS一样,MYSQL有一个具体管理和处理数据的内部引擎,它具体处理你的CREAT TABLE SELECT等命令,但是MYSQL有多种内部引擎,所以使用哪一个需要手动设置
InnoDB:事务处理引擎,不支持全文本搜索
MEMORY:在功能上等同于MyISAM,但数据存储在内存中,速度快(适合临时表)
MyISAM:性能高,支持全文搜索,不支持事务处理
一个数据库中引擎可以混用,不同表使用不同引擎,但是问题,外键不能跨引擎(不同引擎的表不能引用不同引擎的表的外键)
多个列做主键 PRIMARY KEY(col1, col2)
每个表只允许有一个AUTO_INCREMENT列,且它必须被索引(如通过使它成为主键) 如何知道AUTO_INCREMENT后这个列的值,SELECT last_insert_id()返回最后一个AUTO_INCREMENT的值
对于not null的列, 设置默认值 id int NOT NULL DEFAULT 1
###二、更新表(ALTER TABLE) 更新一个表时需要给出的信息
- 在ALTER TABLE 之后给出需要更改的表名
- 所做更改的列表
例:
ALTER TABLE customers
ADD age int;
ALTER TABLE customers
DROP COLUMN age;
ALTER TABLE 常见的用途就是定义外键
ALTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_orders
FOREIGN KEY (order_num) REFERENCES products (prod_id)
三、删除表(DROP TABLE)
DROP TABLE customers;
Tips:
使用ALTER TABLE 和DROP TABLE时需要注意(甚至备份),因为这些操作无法撤销
四、重命名表(RENAME)
RENAME TABLE customer2 TO customers;
如果RENAME所做的只是重命名一个表,可以使用逗号隔开,一次重命名多张表