brief
记录了 表的创建、更改和删除
表的创建
一般有两种创建表的方法:
- 使用具有交互式创建和管理表的工具(如MySQL workbench);
- 表也可以直接用MySQL语句操纵。
为了用程序创建表,可使用SQL的CREATE TABLE语句。
当然,最开始学习时我用了创建样例表的脚本 create.sql,这样也是一种方法
为利用CREATE TABLE创建表,必须给出下列信息:
- 新表的名字,在关键字CREATE TABLE之后给出;
- 表列的名字和定义,用逗号分隔。
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 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,cust_name)
) ENGINE=InnoDB;
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 DEFAULT 10,PRIMARY KEY (order_num, order_item)
) ENGINE=InnoDB;
关于PRIMARY KEY / AUTO_INCREMENT / DEFAULT 关键字这里没做过多记录。
注意事项:
- 在创建新表时,指定的表名必须不存在,否则将出错
- 如果你仅想在一个表不存在时创建它,应该在表名后给出IF NOT EXISTS
- NULL为默认设置,如果不指定NOT NULL,则认为指定的是NULL
- 空串是一个有效的值,它不是无值。 NULL值用关键字NULL而不是空串指定
- 每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(如果通过使它成为主键)。
- 如果一个列被指定为AUTO_INCREMENT,则它需要使用特殊的值吗?你可以简单地在INSERT语句中指定一个值,只要它是唯一的(至今尚未使用过)即可,该值将被用来替代自动生成的值。后续的增量将开始使用该手工插入的值。
- 让MySQL生成(通过自动增量)主键的一个缺点是你不知道这些值都是谁。可使用last_insert_id()函数获得这个值 :
SELECT last_insert_id()
- 如果在插入行时没有给出值, MySQL允许指定此时使用的默认值。 默认值用CREATE TABLE语句的列定义中的DEFAULT关键字指定。
表的更新
为更新表定义,可使用ALTER TABLE语句
了使用ALTER TABLE更改表结构,必须给出下面的信息:
-
在ALTER TABLE之后给出要更改的表名(该表必须存在,否则将出错);
-
所做更改的列表
-
这条语句给vendors表增加一个名为vend_phone的列,必须明确其数据类型
ALTER TABLE vendors
ADD vend_phone CHAR(20);
- 删除刚刚添加的列
ALTER TABLE vendors
DROP COLUMN vend_phone;
- ALTER TABLE的一种常见用途是定义外键
ALTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_orders
FOREIGN KEY (order_num) REFERENCES orders (order_num);
删除表
DROP TABLE customers;
重命名表
RENAME TABLE customers TO new_name;