本节主要介绍创建、修改和删除表的基本操作
创建数据库表一般有两种方式:
注意:当使用交互式工具时,实际上使用的是ORACLE SQL语句。不过,无需编写这些语句,界面将为你无缝的生成和执行SQL。
要使用CREATE TABLE创建表,必须指定以下信息:
创建表示例:
CREATE TABLE customers
(
cust_id int NOT NULL ,
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
);
际的表定义(所有的列)用圆括号括住。列本身用逗号隔开。这个特定的表由9列组成,每个列定义都以列名(它在表内必须是唯一的)开始,其后接着列的数据类型。
NULL值代表没有值或者缺少值。每个表列要么是NULL列,要么是NOT NULL列,并且这个状态是在创建时在表定义中指定的。看看下面的示例:
CREATE TABLE orders
(
order_num int NOT NULL ,
order_date date NOT NULL ,
cust_id int NOT NULL
);
列都是必需的,因此每一列都包含关键字NOT NULL,这将阻止插入没有值的列。如果某人尝试插入没有值的列,将返回一个错误,并且插入操作将会失败。
示例:
CREATE TABLE vendors
(
vend_id int NOT NULL,
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
);
警告:理解NULL
不要把NULL值与空字符串混淆。NULL值意指缺少值,它不是空字符串。如果指定“’ '”(两个单引号之间没有任何内容),这在NOT NULL列中是允许的。空字符串是一个有效值,它不是没有值。
在插入行时,如果没有指定值,Oracle允许指定默认值。默认值是在CREATE TABLE语句中的列定义中使用DEFAULT关键字指定的。
使用示例:
CREATE TABLE orderitems
(
order_num int NOT NULL ,
order_item int NOT NULL ,
prod_id char(10) NOT NULL ,
quantity int DEFAULT 1 NOT NULL ,
item_price decimal(8,2) NOT NULL
);
提示:使用DEFAULT 代替NULL值
许多数据库开发人员都使用DEFAULT值代替NULL列,尤其是将在计算或数据分组中使用的列中。
要更新表定义,可以使用ALTER TABLE语句,但是理想情况下,在表包含数据之后永远也不应该改变它们。
要使用ALTER TABLE更改表,必须指定以下信息:
使用示例:
ALTER TABLE vendors
ADD vend_phone CHAR(20);
主键值必须是唯一的。也就是说,表中的每一行都必须具有唯一的主键值。如果把单独一列用于主键,那么它必须是唯一的。如果使用多个列,那么它们的组合必须是唯一的。
可以在CREATE TABLE语句内定义主键。不过,许多开发人员更喜欢先创建表,然后添加所有的键。添加键就是在进行表更新,因此要使用ALTER TABLE命令。
下面给出了一个示例:
ALTER TABLE customers ADD CONSTRAINT pk_customers
PRIMARY KEY (cust_id);
ALTER TABLE也可用于定义外键。
LTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_orders FOREIGN KEY (order_num)
REFERENCES orders (order_num);
警告:小心的使用ALTER TABLE
要极其小心地使用ALTER TABLE,在执行该操作前确保具有一组完整的备份(包括模式和数据)。数据库表的改变不能被撤销——如果添加了不需要的列,也许不能移除它们。类似地,如果删除了需要的列,也许就会丢失该列中所有的数据。
删除表(实际上是指删除整个表,而不仅仅是内容)。
DROP TABLE customers2;
要重命名表,可以使用ALTER TABLE语句,如下:
ALTER TABLE customers2 RENAME TO customers;