pl/sql developer创建数据表的过程

时间:2024-03-09 12:16:23
一. 使用create语句创建数据表
create table TBL_ORDER   -- TBL_ORDER是表名               
(
  order_id      NUMBER(10) not null,      -- 主键
  customer_id   NUMBER(10) not null,      -- 外键, 表中存的是id, 类中存的是对象引用
  order_type_id NUMBER(10) not null,      -- 外键, 表中存的是id, 类中存的是对象引用
  project_num   VARCHAR2(10),             -- 以下是普通字段
  project_name  VARCHAR2(30),
  st_time       VARCHAR2(20), not null,   -- 非空约束
  en_time       VARCHAR2(20), not null,
  cycle         FLOAT default 0,          -- 设置默认值
  amount        FLOAT default 0,
  principal     VARCHAR2(20),
  state         NUMBER(10) default 0,
  attachment    VARCHAR2(50),
  field1        VARCHAR2(30),
  field2        VARCHAR2(30),
  field3        VARCHAR2(30),
  field4        VARCHAR2(30),
  field5        VARCHAR2(30),
  order_num     VARCHAR2(30) not null,
  isdelete      NUMBER(10) default 0 not null
)
tablespace USERS    -- 使用者
pctfree 10          -- 这些参数默认就好
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);

二. 添加注释
-- Add comments to the columns 
comment on column TBL_ORDER.order_id      -- TBL_ORDER.order_id: 表名.字段
  is \'订单id\';                            -- 这里写入注释
comment on column TBL_ORDER.customer_id   -- 其他字段一样注释
  is \'客户id\';

三. 设定主键
-- Create/Recreate primary, unique and foreign key constraints 
alter table TBL_ORDER           -- TBL_ORDRE: 表名
  add primary key (ORDER_ID)    -- ORDER_ID: 主键字段
  using index                   -- 以下参数默认就好
  tablespace USERS              -- 使用者
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
  initial 64K
  next 1M
  minextents 1
  maxextents unlimited
);

四. 设定外键
alter table TBL_ORDER       -- TBL_ORDER: 存在外键的表的表名
  -- FK_ID_CUSTOMER: 自定义, 但一般是FK_外键名倒写, CUSTOMER_ID: 本表(TBL_ORDER)中的外键字段名
  add constraint FK_ID_CUSTOMER foreign key (CUSTOMER_ID)
  -- TBL_CUSTOMER: 以这个外键为主键的那个表的表名, CUSTOMER_ID: 这个表的主键 
  references TBL_CUSTOMER (CUSTOMER_ID);  
alter table TBL_ORDER       -- 同上
  add constraint FK_ID_ORDER_TYPE foreign key (ORDER_TYPE_ID)
  references TBL_ORDER_TYPE (ORDER_TYPE_ID);

五. 创建触发器
-- 在ORCLE中, 没有像MYSQL那样, 如插入一条记录, 主键可以自增
-- ORCLE中需要创建触发器, 在每插入一条记录的时候触发, 主键自增
-- SEQ_TBL_ORDER: 自定义, 但这个值要和POJO类中的@SequenceGenerator(sequenceName="SEQ_TBL_ORDER")
-- 这个注解的sequenceName的值一样, start with: 开始值, increment by: 步长, 其他照写
create sequence SEQ_TBL_ORDER start with 1 increment by 1   
nomaxvalue
nominvalue
nocache;
-- 什么情况下触发触发器, SEQ_TBL_ORDER: 和上面的值一样
CREATE OR REPLACE TRIGGER SEQ_TBL_ORDER
BEFORE INSERT ON TBL_ORDER                -- TBL_ORDER: 针对哪个表, 在插入记录时触发
-- new表示一张临时表, 照写; ORDER_ID表示需要自增的字段, 这里说如果主键为空的情况下插入一条记录就会触发自增
FOR EACH ROW WHEN (new.ORDER_ID is null)  
begin
select SEQ_TBL_ORDER.nextval into:new.ORDER_ID from dual; -- 同上, dual是临时表, 照写
end;

-------------------------------<完>-------------------------------