17.1创建表
一般有两种创建表的方法
(1)多数DBMS都具有交互式创建和管理表工具
(2)表也可以直接用SQL语句操纵
语法差别:在不同的SQL实现中,CREATE TABLE语句的语法可能会有所不同。
17.1.1表创建基础
为利用CREATE TABLE创建表,必须给出下列信息:
(1)新表的名字,在关键字CREATE TABLE之后给出。
(2)表列的名字和定义,用逗号分隔。
(3)有的DBMS还要求指定表的位置。
创建Products表
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 VARCHAR(1000) NULL
};
替换现有的表
在创建新表时,指定的表名必须不存在,否则将出错。如果要防止以外覆盖已有的表,SQL要求首先手工删除该表,然后再重建它,而不是简单地用创建表语句覆盖它。
17.1.2使用NULL值
允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列不接受该列没有值的行,换句话说,在插入或更新行时,该列必须没有值。
指定NULL:多数DBMS在不指定NOT NULL时认为指定的是NULL,但并不是所有的DBMS都这样。
主键和NULL值:主键是其值唯一标识表中每一行的列,只有不允许NULL值的列可用于主键。允许NULL值的列不能用于唯一标识。
理解NULL:不要把NULL值与空串相混淆,NULL值是没有值,它不是空串,如果指定‘’,这在NOT NULL列种是允许的。空串是一个有效的值,它不是无值。NULL值用关键字NULL而不是空串指定。
17.1.3指定默认值
SQL允许指定默认值,在插入行时如果不给出值,DBMS将自动采用默认值。默认值在CREATE TABLE语句的列定义中用关键字DEFAULT指定。
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
};
获得系统日期
17.2更新表
为更新表定义,可使用ALTER TABLE语句。
使用ALTER TABLE所考虑的内容。
(1)一般来说,在表中包含数据时不要对其进行更新。
(2)所有DBMS都允许给校友的表增加列,不过对所增加列的数据类型(以及NULL和DEFAULT的使用)有所限制。
(3)许多DBSM不允许删除或更改表中的列。
(4)多数DBMS允许重新命名表中的列。
(5)许多DBMS对已经填有数据的列的更改有限制,对未填有数据的列几乎没有限制。
为了使用ALTER TABLE更改表结构,必须给出下面信息:
(1)在ALTER TABLE之后给出要更改的表名(该表必须存在,否则将出错)
(2)所做更改的列表
添加列
ALTER TABLE Vendors
ADD vend_phone CHAR(20);
删除列
ALTER TABLE Vendors
DROP COLUMN vend_phone;
小心使用ALTER TABLE:使用ALTER TABLE要极为小心,应该在进行改动前做一个完整的备份。数据库表的更改不能撤销,如果增加了不需要的列,可能不能删除它们。类似地,如果删除了不应该删除的列,可能会丢失该列中的所有数据。
17.3删除表
删除表(删除整个表而不是其内容),使用DROP TABLE语句。
DROP TABLE CustCopy;
17.4重命名表
不同DBMS所支持的表的重命名有所不同。
Oracle用RENAME