您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Oracle中建表及表操作

bubuko 2022/1/25 20:05:44 其他 字数 11645 阅读 909 来源 http://www.bubuko.com/infolist-5-1.html

一、创建表 Oracle中的建表语句:create table 表名( 字段名1 数据类型 列属性,字段名2 数据类型 列属性,...... ) 如:创建表OA_DM.DM_GY_USER?https://www.cnblogs.com/sjxbg/p/11171543.html -- Create ...

一、创建表

Oracle中的建表语句:
create table 表名(
字段名1 数据类型 列属性,
字段名2 数据类型 列属性,
......
)

如:创建表OA_DM.DM_GY_USER https://www.cnblogs.com/sjxbg/p/11171543.html


-- Create table
create table OA_DM.DM_GY_USER
(
    user_id CHAR(32),
    username VARCHAR2(100) not null,
    loginname VARCHAR2(50) not null,
    password VARCHAR2(255) not null,
    email VARCHAR2(100),
    active CHAR(1) not null,
    delete_time DATE,
    register_time DATE,
    emp_num VARCHAR2(50),
    certificate VARCHAR2(200),
    sex CHAR(1),
    has_image CHAR(1),
    telephone VARCHAR2(50),
    cellphone_bak VARCHAR2(50),
    cert_no VARCHAR2(50),
    address VARCHAR2(1000),
    postcode VARCHAR2(10),
    bz VARCHAR2(2000),
    position VARCHAR2(200),
    fax VARCHAR2(50),
    ldap_unid VARCHAR2(100),
    xsxh NUMBER(8),
    lx VARCHAR2(200),
    cellphone VARCHAR2(50)
)
tablespace TS_OA_DMCS_DATA
pctfree 10
 --PCTFREE:默认是10,表示当数据块的可用空间低于10%后,当一个block剩余空间低于10%,就不可以被insert了,只能被用于update;即:当使用一个block时,在达到pctfree之前,该block是一直可以被插入的,这个时候处在上升期。
 --PCTUSED:是指当块里的数据低于多少百分比时,又可以重新被insert,一般默认是40,即40%,即:当数据低于40%时,又可以写入新的数据,这个时候处在下降期。
--假设你一个块可以存放100个数据,而且PCTFREE 是10,PCTUSED是40,则:不断的向块中插入数据,如果当存放到90个时,就不能存放新的数据,这是受pctfree来控制,预留的空间是给UPDATE用的。
--当你删除一个数据后,再想插入个新数据行不行?不行,必须是删除41个,即低于40个以后才能插入新的数据的,这是受pctused来控制的
initrans 1
 --每个block都有一个块首部。这个块首部中有一个事务表(Interested Transaction List)。事务表中会建立一些条目来描述哪些事务将块上的哪些行/元素锁定。这个事务表的初始大小由对象的INITRANS 设置指定
 --(Interested Transaction List)事物槽列表是Oracle数据块内部的一个组成部分,,它是由一系列的ITS(Interested Transaction Slot,事物槽)组成,其初始的ITL Slot数量由INITRANS决定的,如果有足够的剩余空间,oracle也会根据需要动态的分配这些slot,直到受到空间限制或者达到MAXTRANS,注意10g以后MAXTRANS被废弃,默认为255。
 --事物槽列表用来来记录该块所有发生的事务,一个itl可以看作是一个记录,在一个时间,可以记录一个事务(包括提交或者未提交事务)。当然,如果这个事务已经提交,那么这个itl的位置就可以被反复使用了,因为itl类似记录,所以,有的时候也叫itl槽位。


maxtrans 255
storage
(
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
)
--数据库的逻辑结构如下:数据库是由一系列表空间(tablespace)组成,表空间由若干段(segment)组成,段由若干区(extent)组成,区由若干块(block)组成
--当在表空间中创建表时,系统先分配一个初始空间,这个空间大小由initial这个参数决定,此处为64KB,minextents 表示建好表后至少要分配几个区,这里是1个,maxextents 表示表空间最多能分配几个区,这里是无限制
nologging;
-- Add comments to the table
comment on table OA_DM.DM_GY_USER
is ‘用户表‘;
-- Add comments to the columns
comment on column OA_DM.DM_GY_USER.user_id
is ‘用户id‘;
comment on column OA_DM.DM_GY_USER.username
is ‘姓名‘;
comment on column OA_DM.DM_GY_USER.loginname
is ‘登录名‘;
comment on column OA_DM.DM_GY_USER.password
is ‘密码‘;
comment on column OA_DM.DM_GY_USER.email
is ‘邮箱‘;
comment on column OA_DM.DM_GY_USER.active
is ‘状态||1启动0禁用2注销‘;
comment on column OA_DM.DM_GY_USER.delete_time
is ‘删除时间‘;
comment on column OA_DM.DM_GY_USER.register_time
is ‘注册事件‘;
comment on column OA_DM.DM_GY_USER.emp_num
is ‘员工编号‘;
comment on column OA_DM.DM_GY_USER.certificate
is ‘登陆验证方式‘;
comment on column OA_DM.DM_GY_USER.sex
is ‘性别||0:男 1:女‘;
comment on column OA_DM.DM_GY_USER.has_image
is ‘是否有图片‘;
comment on column OA_DM.DM_GY_USER.telephone
is ‘固定电话号码‘;
comment on column OA_DM.DM_GY_USER.cellphone_bak
is ‘手机号码‘;
comment on column OA_DM.DM_GY_USER.cert_no
is ‘身份证号码‘;
comment on column OA_DM.DM_GY_USER.address
is ‘工作所在地‘;
comment on column OA_DM.DM_GY_USER.postcode
is ‘邮政编码‘;
comment on column OA_DM.DM_GY_USER.bz
is ‘备注‘;
comment on column OA_DM.DM_GY_USER.position
is ‘职位‘;
comment on column OA_DM.DM_GY_USER.fax
is ‘传真‘;
comment on column OA_DM.DM_GY_USER.ldap_unid
is ‘LDAP_UNID‘;
comment on column OA_DM.DM_GY_USER.xsxh
is ‘显示序号‘;
comment on column OA_DM.DM_GY_USER.lx
is ‘类型‘;
-- Create/Recreate indexes
create index OA_DM.IDX_USER_LGOIN_PWD_ACTIVE on OA_DM.DM_GY_USER (LOGINNAME, PASSWORD, ACTIVE)
tablespace TS_OA_DMCS_IDX
pctfree 10
initrans 2
maxtrans 255
storage
(
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
)
nologging;
-- Create/Recreate primary, unique and foreign key constraints
alter table OA_DM.DM_GY_USER
add constraint PK_DM_GY_USER primary key (USER_ID)
novalidate
using index
tablespace TS_OA_DMCS_IDX
pctfree 10
initrans 2
maxtrans 255
storage
(
    initial 8M
    next 16M
    minextents 1
    maxextents unlimited
);
alter index OA_DM.PK_DM_GY_USER nologging;
--oracle日志模式分为(logging,force logging,nologging)
--默认情况是logging,就是会记录到redo日志中,
--force logging是强制记录日志,
--nologging是尽量减少日志。
--FORCE LOGGING可以在数据库级别、表空间级别进行设定、
--LOGGING与NOLOGGING可以在表级别设定。
--force logging和nologging是只记录到redo日志中,归档不归档是另外的设置,但是如果用nologging了,那么显然就算归档的话,归档日志就少了,但是可能不能用于介质回复了,因为有些根本没有记录。


二、表操作

建测试表


 

create table dept(
   deptno number(3) primary key,
   dname varchar2(10),
   loc varchar2(13)
);
create table employee_info(
   empno number(3),
   deptno number(3),
   ename varchar2(10),
   sex char(1),
   phone number(11),
   address varchar2(50),
   introduce varchar2(100)
);


 

1、重名令
(1)重命名表:rename dept to dt;
rename dt to dept;
(2)重命名列:alter table dept rename column loc to location;
alter table dept rename column location to loc;
2、添加约束
(1)primary key
alter table employee_info add constraint pk_emp_info primary key(empno);
(2)foreign key
alter table employee_info add constraint fk_emp_info foreign key(deptno)
references dept(deptno);
(3)unique
alter table employee_info add constraint uq_emp_info unique(phone);
(4)check
alter table employee_info add constraint ck_emp_info check (sex in (‘F‘,‘M‘));
(5)not null
alter table employee_info modify phone constraint not_null_emp_info not null;
(6)default
alter table employee_info modify sex char(2) default ‘M‘;
3、禁用约束
alter table employee_info disable constraint uq_emp_info;
4、启用约束
alter table employee_info enable constraint uq_emp_info;
5、延迟约束
alter table employee_info drop constraint fk_emp_info;
alter table employee_info add constraint fk_emp_info foreign key(deptno)
references dept(deptno) deferrable initially deferred;
6、添加列
alter table employee_info add id varchar2(18);
alter table employee_info add hiredate date default sysdate not null;
7、删除列
alter table employee_info drop column introduce;
8、修改列
(1)修改列的长度
alter table dept modify loc varchar2(50);
(2)修改列的精度
alter table employee_info modify empno number(2);
(3)修改列的数据类型
alter table employee_info modify sex char(2);
(4)修改默认值
alter table employee_info modify hiredate default sysdate+1;
9、添加注释
(1)向表中添加注释
comment on table employee_info is ‘information of employees‘;
(2)向列添加注释
comment on column employee_info.ename is ‘the name of employees‘;
comment on column dept.dname is ‘the name of department‘;
10、清除表中所有数据
truncate table employee_info; (DELETE FROM table_name或DELETE * FROM table_name)
11、删除表
drop table employee_info;

注:查看表的约束信息:user_constraints视图查看约束、user_cons_columns视图查看有关列的约束信息、user_tab_comments视图查看对表的注释 、user_col_comments视图查看对表列的注释,desc tablename查看表结构。

三、补充

1、建表时指定约束
Oracle 支持下面五类完整性约束:
NOT NULL 非空
UNIQUE Key 唯一键
PRIMARY KEY 主键
FOREIGN KEY 外键
CHECK 自定义检查约束
如:


 

CREATE TABLE s_dept (
    id NUMBER(7) CONSTRAINT s_dept_id_pk PRIMARY KEY,
    name VARCHAR2(25) CONSTRAINT s_dept_name_nn NOT NULL,
    region_id NUMBER(7) CONSTRAINT s_dept_region_id_fk REFERENCES region (id),
    CONSTRAINT s_dept_name_region_id_uk UNIQUE(name, region_id)
);

-- 在列属性后面添加约束,指定约束的名字
CREATE TABLE s_emp (
    id NUMBER(7) CONSTRAINT s_emp_id_pk PRIMARY KEY,
    last_name VARCHAR2(25) CONSTRAINT s_emp_last_name_nn NOT NULL,
    first_name VARCHAR2(25),
    userid VARCHAR2(8) CONSTRAINT s_emp_userid_nn NOT NULL CONSTRAINT s_emp_userid_uk UNIQUE,
    start_date DATE DEFAULT SYSDATE,
    comments VARCHAR2(25),
    manager_id NUMBER(7),
    title VARCHAR2(25),
    dept_id NUMBER(7) CONSTRAINT s_emp_dept_id_fk REFERENCES s_dept(id),
    salary NUMBER(11,2),
    commission_pct NUMBER(4,2) CONSTRAINT s_emp_commission_pct_ck CHECK (commission_pct IN(10,12.5,15,17.5,20))
);

-- 在列属性后面添加约束,不指定约束的名字
CREATE TABLE s_emp (
    id NUMBER(7) PRIMARY KEY,
    last_name VARCHAR2(25) NOT NULL,
    first_name VARCHAR2(25),
    userid VARCHAR2(8) NOT NULL UNIQUE,
    start_date DATE DEFAULT SYSDATE,
    comments VARCHAR2(25),
    manager_id NUMBER(7),
    title VARCHAR2(25),
    dept_id NUMBER(7) REFERENCES s_dept(id), --dept_id NUMBER(7) FOREIGN KEY REFERENCES s_dept(id)
    salary NUMBER(11,2),
    commission_pct NUMBER(4,2) CHECK (commission_pct IN(10,12.5,15,17.5,20))
);

-- 在列定义后添加约束
CREATE TABLE s_emp (
    id NUMBER(7),
    last_name VARCHAR2(25) NOT NULL,
    first_name VARCHAR2(25),
    userid VARCHAR2(8) NOT NULL UNIQUE,
    start_date DATE DEFAULT SYSDATE,
    comments VARCHAR2(25),
    manager_id NUMBER(7),
    title VARCHAR2(25),
    dept_id NUMBER(7),
    salary NUMBER(11,2),
    commission_pct NUMBER(4,2) CHECK (commission_pct IN(10,12.5,15,17.5,20)),
    CONSTRAINT s_emp_id_pk PRIMARY KEY(id),
    constraint s_emp_dept_id_fk foreign key (dept_id) references s_dept(id)
);


2、利用现有表创建表
方式一:create table 新表 as select *[或者具体列名] from 旧表 [查询条件]
方式二:insert into 表1 select *[或者具体列名] 表2 [查询条件]

 

参考自:https://www.cnblogs.com/kkxwze/articles/10794544.html

 

Oracle中建表及表操作

原文:https://www.cnblogs.com/shujk/p/12492662.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶