16.1. 创建表
- 直接用交互创建表和管理工具
- 表也可以直接用SQL语句操纵
16.1.1. 表创建基础
利用 CREATE TABLE
创建表,需以下信息
- 新表的名字,在关键字
CREATE TABLE
之后 - 表列的名字和定义,用逗号隔开。
- 部分DBMS需要指定表的位置。
mysql> CREATE TABLE Products
-> ( prod_id CHAR(10) NOT NULL,
-> vend_id CHAR(10) NOT NULL,
-> prod_name CHAR(254) NOT NULL,
-> prod_price DECIMAL(8,2) NOT NULL,
-> prod_desc TEXT(1000) NULL
-> );
解释: 表名后面跟着的列,是表的定义,括在园括号之中,各列直接用逗号分割,一共有五个表,列名后面跟数据类型,圆括号结束。
16.1.2. 使用NULL值
允许使用NULL值的列,也允许插入行时不给出该列的值,如果不允许该行没值,可以使用NULL
mysql> CREATE TABLE Order_s
-> (
-> order_num INTEGER NOT NULL,
-> order_date DATETIME NOT NULL,
-> cust_id CHAR(10) NOT NULL
-> );
Query OK, 0 rows affected (0.02 sec)
使用列的含义使用 NOT NULL
来插入,阻止插入的列没事值。混合 NULL
与 NOT NULL
列的表
mysql> CREATE TABLE Vendors
-> (
-> vend_id CHAR(10) NOT NULL,
-> vend_name CHAR(50) NOT NULL,
-> vend_address CHAR(50),
-> vend_city CHAR(50),
-> vend_state CHAR(5),
-> vend_zip CHAR(10),
-> vend_country CHAR(50)
-> );
16.1.3. 指定默认值
插入行时,如果不指定值,自动采用默认值
mysql> CREATE TABLE OrderItems
-> (
-> order_num INTEGER NOT NULL,
-> order_item INTEGER NOT NULL,
-> prod_id CHAR(10) NOT NULL,
-> quantity INTEGER NOT NULL DEFAULT 1,
-> item_price DECIMAL(8,2) NOT NULL
-> );
解释:quantity 用于存放订单中的物品,给了一个默认值DEFAULT 1
,如果没有给值,默认是1.默认值经常用于日期跟时间戳:MySQL 用户指定 DEFAULT CURRENT_DATE()
16.2. 更新表
使用 ALTER TABLE
语句来更新内容,但有几个地方要注意
- 表中包含数据是不用对其进行更新。
- 所有的DBMS都允许表添加列
- 许多DBMS不允许删除更新列
- ALTER TABLE 之后给出要更改的表面。
- 所做更改的列表
mysql> ALTER TABLE Vendors
-> ADD vend_phone CHAR(20);
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0
解释:给Vendors 表添加一个列,数据类型为 CHAR
。
16.3. 删除列
mysql> ALTER TABLE Vendors
-> DROP COLUMN vend_phone;
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0
注意:使用 ALTER TABLE
过程是无法撤销的,所以操作之前,需要进行备份。
16.4. 删除表
使用 DROP TABLE
来删除整个表
mysql> DROP TABLE CustCopy;
Query OK, 0 rows affected (0.02 sec)
删除整个CustCopy
表。DROP
无法删除带有关系规则的表。
16.5. 重命名表
使用 RENAME
语句来重命名表
mysql> RENAME TABLE Vendor TO Vendors;
Query OK, 0 rows affected (0.01 sec)
下一节:利用视图来简化执行SQL语句某些操作。