您的位置:首页 > 数据库

源码-PL/SQL从入门到精通-第五章-管理数据表

2016-07-18 14:23 483 查看
--第5章开始
--代码5.1 使用DDL语句创建数据库
CREATE TABLE company_emp
(
empno NUMBER(4) PRIMARY KEY NOT NULL, --员工工号
ename VARCHAR2(10 BYTE), --员工名称
job VARCHAR2(9 BYTE), --员工职位
mgr NUMBER(4), --所属经理
hiredate DATE, --雇佣日期
sal NUMBER(7,2), --员工工资
comm NUMBER(7,2), --员工描述
deptno NUMBER(2) --部门编码
)

--代码5.2 简单的CREATE TABLE用法
--创建表workcenter
CREATE TABLE workcenter --指定表名称
(
id int, --添加编号字段
name varchar2(200) --添加名称字段
)

--代码5.3 使用列约束创建表
CREATE TABLE invoice
(
invoice_id NUMBER PRIMARY KEY, --自动编号,唯一,不为空
vendor_id NUMBER NOT NULL, --供应商ID
invoice_number VARCHAR2(50) NOT NULL, --发票编号
invoice_date DATE DEFAULT SYSDATE, --发票日期
invoice_total NUMBER(9,2) NOT NULL, --发票总数
payment_total NUMBER(9,2) DEFAULT 0 --付款总数
)

--代码5.4 创建invoice表并指定主键
CREATE TABLE invoice
(
invoice_id NUMBER PRIMARY KEY, --自动编号,唯一,不为空
vendor_id NUMBER NOT NULL, --供应商ID
invoice_number VARCHAR2(50) NOT NULL, --发票编号
invoice_date DATE DEFAULT SYSDATE, --发票日期
invoice_total NUMBER(9,2) NOT NULL, --发票总数
payment_total NUMBER(9,2) DEFAULT 0 --付款总数
)

--代码5.5 在列属性中使用CONSTRAINT关键字
CREATE TABLE invoice
(
invoice_id NUMBER CONSTRAINT invoice_pk PRIMARY KEY, --自动编号,唯一,不为空
vendor_id NUMBER CONSTRAINT vendor_id_nn NOT NULL, --供应商ID
invoice_number VARCHAR2(50) CONSTRAINT vendor_number_nn NOT NULL, --发票编号
invoice_date DATE DEFAULT SYSDATE, --发票日期
invoice_total NUMBER(9,2) CONSTRAINT invoice_total_nn NOT NULL, --发票总数
payment_total NUMBER(9,2) DEFAULT 0 --付款总数
)

--代码5.6 在表级别使用CONSTRAINT关键字
CREATE TABLE invoice
(
invoice_id NUMBER , --自动编号,唯一,不为空
vendor_id NUMBER, --供应商ID
invoice_number VARCHAR2(50), --发票编号
invoice_date DATE DEFAULT SYSDATE, --发票日期
invoice_total NUMBER(9,2) , --发票总数
payment_total NUMBER(9,2) DEFAULT 0, --付款总数
CONSTRAINT invoice_pk PRIMARY KEY (invoice_id),
CONSTRAINT vendor_id_un UNIQUE (vendor_id)
);

--代码5.7 vendor表的定义代码
CREATE TABLE vendors
(
vendor_id NUMBER, --供应商id
vendor_name VARCHAR2(50) NOT NULL, --供应商名称
CONSTRAINT vendors_pk PRIMARY KEY (vendor_id), --主键
CONSTRAINT vendor_name_uq UNIQUE (vendor_name) --唯一性约束
)

--代码5.8 在Invoice表中为vendor_id列创建外键关联
CREATE TABLE invoice
(
invoice_id NUMBER CONSTRAINT invoice_pk PRIMARY KEY, --自动编号,唯一,不为空
vendor_id NUMBER CONSTRAINT vendor_id_nn NOT NULL, --供应商ID
invoice_number VARCHAR2(50) CONSTRAINT vendor_number_nn NOT NULL, --发票编号
invoice_date DATE DEFAULT SYSDATE, --发票日期
invoice_total NUMBER(9,2) CONSTRAINT invoice_total_nn NOT NULL, --发票总数
payment_total NUMBER(9,2) DEFAULT 0 --付款总数
)

--代码5.9 在invoice表级别创建外键关联
CREATE TABLE invoice
(
invoice_id NUMBER , --自动编号,唯一,不为空
vendor_id NUMBER, --供应商ID
invoice_number VARCHAR2(50), --发票编号
invoice_date DATE DEFAULT SYSDATE, --发票日期
invoice_total NUMBER(9,2) , --发票总数
payment_total NUMBER(9,2) DEFAULT 0, --付款总数
CONSTRAINT invoiceid_vendorid_pk PRIMARY KEY (invoice_id,vendor_id),
CONSTRAINT vendor_id_un UNIQUE (vendor_id),
CONSTRAINT invoice_fk_vendors FOREIGN KEY (vendor_id) REFERENCES vendors (vendor_id)
ON DELETE CASCADE
);

--代码5.10 列级别的检查约束
CREATE TABLE invoice_check
(
invoice_id NUMBER ,
invoice_total NUMBER(9,2) CHECK (invoice_total>0 AND invoice_total<=5000) ,
payment_total NUMBER(9,2) DEFAULT 0 CHECK(payment_total>0 AND payment_total<=10000)
);

--代码5.11 表级别的检查约束
CREATE TABLE invoice_check
(
invoice_id NUMBER ,
invoice_total NUMBER(9,2) DEFAULT 0 ,
payment_total NUMBER(9,2) DEFAULT 0,
CONSTRAINT invoice_ck_total CHECK(invoice_total<=5000 AND payment_total<=10000)
);

--代码5.12 在约束中使用函数和布尔运算符
CREATE TABLE invoice_check_others
(
invoice_id NUMBER ,
invoice_name VARCHAR2(20),
invoice_type INT,
invoice_clerk VARCHAR2(20),
invoice_total NUMBER(9,2) DEFAULT 0 ,
payment_total NUMBER(9,2) DEFAULT 0,
--发票总数必须在1-1000之间
CONSTRAINT invoice_ck_01 CHECK(invoice_total BETWEEN 1 AND 1000) ,
--发票名称必须为大写字母
CONSTRAINT check_invoice_name CHECK (invoice_name = UPPER(invoice_name)),
--发票类别必须在1,2,3,4,5,6,7之间
CONSTRAINT check_invoice_type CHECK (invoice_type IN (1,2,3,4,5,6,7)),
--发票处理员工编号不能为NULL值
CONSTRAINT check_invoice_clerk CHECK (invoice_clerk IS NOT NULL)
);

--代码5.13 使用连接查询获取约束详细信息
SELECT *
FROM user_cons_columns;

SELECT a.table_name, a.constraint_name, a.search_condition, b.column_name,
a.constraint_type
FROM all_constraints a, all_cons_columns b
WHERE a.table_name = UPPER ('invoice_check_others')
AND a.table_name = b.table_name
AND a.owner = b.owner
AND a.constraint_name = b.constraint_name;

ALTER TABLE invoice_check ADD invoice_name VARCHAR2(100) CHECK(LENGTH(invoice_name)<=50);
ALTER TABLE invoice_check DROP COLUMN invoice_name;

SELECT a.table_name, a.constraint_name, a.search_condition,
a.constraint_type
FROM all_constraints a
WHERE a.table_name = UPPER ('invoice_check');

--5.4.1 索引
create table emp_index as select * from emp;
select * from emp_index;
select * from all_indexes where table_name='emp_index';
SELECT owner, index_name, table_name, uniqueness
FROM all_indexes
WHERE table_name = 'EMP' AND table_owner = 'SCOTT';

SELECT * FROM emp_index;

SELECT *
FROM emp
WHERE empno = 7369;

SELECT *
FROM emp_index
WHERE empno = 7369;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: