创建和操纵表
创建表
一般有两种创建表的方法:
- 使用具有交互式创建和管理表的工具
- 表也可以用Mysql语句操纵
为了用程序创建表,可使用SQL的CREATE TABLE语句,实际上我们在使用navicat等交互式工具时,实际上也是在使用MYSQL语句,界面工具会自动生成并执行相应的MySQL语句;
表创建基础
利用CREATE TABLE创建表,需要给出下列信息:
- 新表的名字,在关键字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 关键字后面,表定义括在圆括号之后,各列之间用逗号隔开,这个表由9列组成,每列的定义以列名开始,后跟列的数据类型;表的主键由PRIMARY KEY关键字指定,列cust_id指定作为主键列,整条语句由右圆括号后面的分号结束,暂时忽略ENGINE=innoB;
使用NULL值
之前说NULL值就是没有值或缺值,允许NULL值的列也允许在插入行时不给出列的值,不允许NULL值的列不接受该列没有值的行,也就是说没有写入NULL值时,该列必须要有内容;
每个表列或者NULL列或者NOT NULL列,这种状态在创建时由表的定义规定。
CREATE TABLE orders
(
order_num int NOT NULL AUTO_INCREMENT,
order_date datetime NOT NULL,
cust_id int NOT NULL,
PRIMARY KEY (order_num)
)ENGINE=InnoDB;
这条语句创建了order_num,order_date,cust_id三个列表,每个列都定义了NOT NULL,这将会去阻止插入没有值得列,如果试图插入没有值得列,将返回错误,且插入失败
CREATE TABLE vendors
(
vend_id int NOT NULL AUTO_INCREMENT
vend_name char(50) NOT NULL,
vend_address char(50) NULL,
vend_city char(50) NULL,
vend_state char(5) NULL,
vend_zip char(10) NULL,
vend_country char(50) NULL,
PRIMARY KEY(vend_id)
)ENGINE = InnoDB;
这条语句创建了vendors表,将vend_name设置为NOT NULL,其他的列都允许NULL,这是一个混合表,当并指定NOT NULL时,NULL为默认设置,如果不指定NOT NULL,则认为指定是NULL;
主键
主键值必须是唯一,表中的每个行必须具有唯一的主键值,如果主键使用单个列,则它的值必须是唯一,如果使用多个列,则这些列的组合值必须是唯一的;
PRIMARY KEY (vend_id)
为创建由多个列组成的主键,必须以逗号分隔的列表给出各列名:
CREATE TABLE orderitems
(
order_num int NOT NULL,
order_item int NOT NULL,
prod_id char(10) NOT NULL,
quantity int NOT