第二十一章-创建和操纵表

21.1创建表

一般有两种创建表的方法:

使用具有交互式创建和管理表的工具(如第2章讨论的工具);

表也可以直接用MySQL语句操纵。

21.1.1表创建基础

输入

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指定作为主键列。整条语句由右圆括号后的分号结束

处理现有的表

在创建新表时,指定的表名必须不存在,否则将出错。如果你仅想在一个表不存在时创建它,应该在表名后给出IF NOT EXISTS。

21.1.2NULL值

NULL值就是没有值或缺值。允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列在插入或更新行时,该列必须有值。

21.1.3主键再介绍

为创建由多个列组成的主键,应该以逗号分隔的列表给出各列名。

例如

CREATE TABLE orderi tems
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;

主键可以在创建表时定义,或者在创建表之后定义。

21.1.4使用 AUTO_INCREMENT

如果一个列被指定为 AUTO_INCREMENT,且在INSERT语句中指定一个值(该值唯一),该值将被用来替代自动生成的值。后续的增量将开始使用该手工插入的值。

可使用last_insert_id()函数获得AUTO_INCREMENT新增的最后一个值,如下所示:

SELECT last_insert_id()

此语句返回最后一个AUTO_INCREMENT值,然后可以将它用于后续的MySQL语句。

21.1.5指定默认值

默认值用CREATE TABLE语句的列定义中的DEFAULT关键字指定。

CREATE TABLE orde ri tems
(
order_ num int NOT NULL
order_ i tem int NOT NULL
prod_ id char(10) NOT NULL
quantity int NOT NULL DEFAULT 1 ,
item_ price decimal(8,2) NOT NULL ,
PRIMARY KEY (order_ num, order_ _i tem)
) ENGINE=InnoDB;

在此例子中,给quantity列的描述添加文本DEFAULT 1指示MySQL,在未 给出数量的情况下使用数量1。

21.1.6引擎类型

MySQL常用的引擎:

  • InnoDB是一个可靠的事务处理引擎(参见第26章),它不支持全文 本搜索;
  • MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表);
  • MyISAM是一个性能极高的引擎,它支持全文本搜索(参见第18章),但不支持事务处理。

注意:

使用一个引擎的表不能引用具有使用不同引擎的表的外键。

21.2 更新表

分析**

增加列

ALTER TABLE vendors
ADD vend_phone char(20);

这语句给vendors表增加一个名为vend_phone的列,必须明确其数据类型

删除列

ALTER TABLE vendors
DROP COLUMN vend_phone;

定义外键

ALTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_orders
FOREIGN KEY (order_num) REFERENCES orders(order_num);

**小心使用ALTER TABLE:**使用ALTER TABLE要极为小心,应该在进行改动前做一个完整的备份(模式和数据的备份)。

21.3删除表

DROP TABLE customers1;
//这条语句是永久删除,不能撤销

21.4重命名表

RENAME TABLE customers2 TO customers;

21.5小结

本章介绍了几条新SQL语句。CREATE TABLE用来创建新表,ALTER TABLE用来更改表列(或其他诸如约束或索引等对象),而DROP TABLE用 来完整地删除一个表。这些语句必须小心使用,并且应在做了备份后使 用。本章还介绍了数据库引擎、定义主键和外键,以及其他重要的表和 列选项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值