源码-PL/SQL从入门到精通-第五章-管理数据表(创建数据表)(Create table)


--第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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值