首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》9.8 创建数据库表

关灯直达底部

创建数据库的下一步是创建实际的表。可以使用SQL命令CREATE TABLE来完成它。CREATE TABLE语句的常见形式如下所示:

CREATE TABLE tablename(columns)

提示 你可能会注意到,MySQL提供了多个表类型和存储引擎,其中包括一些事务安全的类型。

我们将在第13章介绍这些表类型。目前,books数据库中所有表都使用了默认存储引擎,MyISAM。

应该用要创建的表名代替tablename占位符,用逗号分开的列名称列表代替columns占位符。每一列应该有一个名字,该名字后面紧跟其数据类型。

这里再次给出了Book-O-Rama的模式:

Customers(CustomerID,Name,Address,City)

Orders(OrderID,CustomerID,Amount,Date)

Books(ISBN,Author,Title,Price)

Order_Items(OrderID,ISBN,Quantity)

Book_Reviews(ISBN,Reviews)

程序清单9-1显示了如何使用SQL来创建这些表。可以在文件中找到这个SQL脚本,该脚本保存于文件chapter9/bookorama.sql中。

可以运行现有的SQL文件,例如,从文件中载入的一个文件,输入以下语句:

>mysql-h host-u bookorama-D books-p<bookorama.sql

(请记住,用你的主机名称替换host并且指定bookorama.sql文件的完整路径)

在这里,使用文件重定向是相当方便的,因为它意味着在执行之前,可以在所选择的文本编辑器中编辑SQL。

程序清单9-1 bookorama.sql——创建Book-O-Rama数据库表的SQL脚本

create table customers

(customerid int unsigned not null auto_increment primary key,

name char(50)not null,

address char(100)not null,

city char(30)not null

);

create table orders

(orderid int unsigned not null auto_increment primary key,

customerid int unsigned not null,

amount float(6,2),

date date not null

);

create table books

(isbn char(13)not null primary key,

author char(50),

title char(100),

price float(4,2)

);

create table order_items

(orderid int unsigned not null,

isbn char(13)not null,

quantity tinyint unsigned,

primary key(orderid,isbn)

);

create table book_reviews

(

isbn char(13)not null primary key,

review text

);

每个表由一个独立的CREATE TABLE语句所创建。可以看到我们已经创建了模式中的每个表,以及我们在上一章中为每个表所设计的列。每一列的名字后面都有一个数据类型。一些列还有其他特别项。

9.8.1 理解其他关键字的意思

NOT NULL的意思是表中所有行的此属性必须有一个值。如果没有指定,该列可以为空(NULL)。

AUTO_INCREMENT是一个特殊的MySQL特性,可以在整数列中使用它。它的意思是在表中插入行的时候,如果将该字段设置为空,那么MySQL将自动产生一个唯一的标识符值。该值比本列中现存的最大值更大。在每个表中只能有一个这样的值。指定AUTO_INCREMENT的列必须是索引列。

列名称后面的PRIMARY KEY表示该列是表的主键。本列中的输入必须唯一。MySQL将自动索引该列。在程序清单9-1的customers表中使用customerid时,我们将customerid列指定为AUTO_INCREMENT。主键的自动索引功能将管理AUTO_INCREMENT所要求的索引列。

在列的名称后面指定PRIMARY KEY,这只用于单列主键。Order_items语句结尾的分句PRIMARY KEY是一个可选格式,在这里,我们用到它是因为这个表的主键由两列组成(也将根据两列来创建索引)。

整数类型后面的UNSIGNED意思是它只能是0或者一个正数。