一、创建表
语法
CREATE TABLE schema_name.table_name (
column_1 data_type column_constraint,
column_2 data_type column_constraint,
…
table_constraint
);
首先,在CREATE TABLE子句上,指定新表所属的表名和模式名。
其次,列出括号内的所有列。如果表有多列,则需要用逗号分隔每个列定义。列定义包括列名称后面它的数据类型例如NUMBER,VARCHAR2和列约束如NOT NULL,主键,检查。
第三,如果适用,您可以添加表约束,例如,主键,外键,检查。
但是也需要注意,创建表也需要授权。
CREATE TABLE ot.persons(
person_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
first_name VARCHAR2(50) NOT NULL,
last_name VARCHAR2(50) NOT NULL,
PRIMARY KEY(person_id)
);
该person_id是标识列,它标识表中的唯一行。person_id列的数据类型是NUMBER。该子句GENERATED BY DEFAULT AS IDENTITY指示Oracle生成一个新整数,并在每次向表中插入新行时将其用于该列。(这个12C才有的功能)
二、修改表
语法
ALTER TABLE table_name action;
首先,指定要修改的表名。
其次,指示要在表名后执行的操作。
操作形式
添加一个或多个列
修改列定义
删除一列或多列
重命名列
重命名表
1 添加新列
ALTER TABLE table_name
ADD column_name type constraint;
ALTER TABLE persons
ADD birthdate DATE NOT NULL;
要同时向表中添加多个列,请将新列放在括号内
语法
ALTER TABLE table_name
ADD (
column_name type constraint,
column_name type constraint,
…
);
ALTER TABLE persons
ADD (
phone VARCHAR(20),
email VARCHAR(100)
);
2 修改列的属性
语法
ALTER TABLE table_name
MODIFY column_name type constraint;
ALTER TABLE persons MODIFY birthdate DATE NULL;
要修改多个列
语法
ALTER TABLE table_name
MODIFY ( column_1 type constraint,
column_1 type constraint,
…);
ALTER TABLE persons MODIFY(
phone VARCHAR2(20) NOT NULL,
email VARCHAR2(255) NOT NULL
);
3 删除现有列
语法
ALTER TABLE table_name
DROP COLUMN column_name;
ALTER TABLE persons
DROP
COLUMN birthdate;
要同时删除多个列,请使用以下语法:
ALTER TABLE table_name
DROP (column_1,column_2,…);
ALTER TABLE persons
DROP
( email, phone );
4 表重命名
语法
ALTER TABLE table_name
RENAME TO new_table_name;
ALTER TABLE persons RENAME TO people;
三、约束
什么是约束?
两个或多个实体或实体建模体之间的几何特征的界限(wiki)。
对于表中数据的限定或者,多表之间的数据关系的一种限定。
主键约束
外键约束
唯一约束
检查约束
非空约束
1 主键约束
主键是表中列的组合列,用于唯一标识表中的行。
规则
主键列不能包含NULL值或空字符串。
主键值在整个表中必须是唯一的。
不应随时间更改主键值。
2 唯一约束
唯一约束是一种完整性约束,可确保存储在列或列组中的数据在表中的行中是唯一的。
语法
CREATE TABLE table_name (
…
column_name data_type UNIQUE
…
);
– 也可以
CREATE TABLE table_name (
…,
UNIQUE(column_name)
);
3 非空约束
Oracle NOT NULL约束指定列不能包含NULL值。Oracle NOT NULL约束是内联约束,通常在CREATE TABLE语句的列定义中使用。
语法
CREATE TABLE table_name (
…
column_name data_type NOT NULL
…
);
修改表加非空
ALTER TABLE table_name MODIFY ( column_name NOT NULL);
CREATE TABLE surcharges (
surcharge_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
surcharge_name VARCHAR2(255) NOT NULL,
amount NUMBER(9,2),
PRIMARY KEY (surcharge_id)
);
插入
INSERT INTO surcharges(surcharge_name, amount)
VALUES(‘Late order placement’,10);
再插入
INSERT INTO surcharges(surcharge_name, amount)
VALUES(null,20);
去除非空
ALTER TABLE table_name MODIFY ( column_name NULL)