一、创建表

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中建表及表操作的更多相关文章

  1. Oracle中如何实现Mysql的两表关联update操作

    在看<MySQL 5.1参考手册>的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.p ...

  2. Oracle language types(语言种类) 表的相关操作 DDL数据定义语言

    数据定义语言 Data Definition Language Statements(DDL)数据操纵语言 Data Manipulation Language(DML) Statements事务控制 ...

  3. Oracle数据库表的备份和数据表的删除操作

    --Oracle数据库中的表备份: --备份语句:在备份之后就可以将这张表的所有数据源删除了,但是之后有人对这张表的数据进行操作,但是在操作完成之后要记得将数据表恢复 CREATE TABLE DZH ...

  4. Oracle 11g 学习3——表空间操作

    一.表空间概述 表空间是Oracle中最大的逻辑存储结构,与操作系统中的数据文件相相应: 基本表空间:一般指用户使用的永久性表空间,用于存储用户的永久性数据          暂时表空间: 主要用于存 ...

  5. oracle 大表在线删除列操作(alter table table_name set unused )

    在某些情况下业务建的表某些列没有用到,需要进行删除,但是如果是数据量很大的大表,直接 alter table table_name drop column column_name;这种方法删除,那么将 ...

  6. Oracle 表空间常用操作

    aliases: [Oracle表空间] tags:      [数据库,Oracle,Blog] summary: [Oracle表空间常用操作,包括查询.分析.扩容.删除.优化等] date:   ...

  7. Oracle触发器实现监控某表的CRUD操作

    前提:请用sys用户dba权限登录 1.创建一个表来存储操作日志 create table trig_sql( LT DATE not null primary key, SID NUMBER, SE ...

  8. Oracle 表的常见操作

    --创建表并指定表空间 create table goods( id VARCHAR2(20) primary key, name VARCHAR2(20) NOT NULL, price NUMBE ...

  9. Oracle学习笔记八 表空间

    表空间 表空间是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间 .   分区表 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下 ...

随机推荐

  1. Notepad++ 过滤注释行和空行

    Notepad++ 删除指定字符开头的行的正则表达式 1.删除A之后的所有字符用:A.*$ 2.删除A之前的所有字符用:^([^s]*)A ####如果是其他字符就把A替换为其他字符 注释:如何是特殊 ...

  2. 黑客是如何利用DNS域传送漏洞进行渗透与攻击的?

    一.DNS域传送 DNS :Domain Name System 一个保存IP地址和域名相互映射关系的分布式数据库,重要的互联网基础设施,默认使用的TCP/UDP端口号是53 常见DNS记录类型: 1 ...

  3. Go语言并发模型 G源码分析

    Go 的线程实现模型,有三个核心的元素 M.P.G,它们共同支撑起了这个线程模型的框架.其中,G 是 goroutine 的缩写,通常称为 "协程".关于协程.线程和进程三者的异同 ...

  4. 18-Spring Cloud Alibaba Nacos

    简介 为什么叫Nacos 前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service Nacos是什么 一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平 ...

  5. python及pygame雷霆战机游戏项目实战01 控制飞机

    入门 在这个系列中,将制作一个雷霆战机游戏. 首先,将游戏设置修改一下: WIDTH = 480 HEIGHT = 600 FPS = 60 玩家精灵 要添加的第一件事是代表玩家的精灵.最终,这将是一 ...

  6. 来了!公开揭密团队成员开发鸿蒙 OpenHarmony 的完整过程(收获官方7000奖金和开发板等,1w字用心总结)

    背景 随着 OpenHarmony 组件开发大赛结果公布,我们的团队成员被告知获得了二等奖,在开心之余也想将我们这段时间宝贵的开发经验写下来与大家分享,当我们看到参赛通知的时候已经是 9 月中旬的时候 ...

  7. 菜鸡的Java笔记 第十八 - java 代码块

    代码块  code block                content (内容)        在程序结构之中使用"{}"定义的内容就称为代码块,但是会根据其声明的位置以及关 ...

  8. 关于如何在MyEclipse下修改项目名包名,以及类

    1.修改项目名,右键选择properties->web->web-Context-root修改名称或者直接按F2修改.2,修改包名,右键选择Refactor->rename修改名称即 ...

  9. [bzoj1711]吃饭

    由于无法直接将果汁和饮料连边,所以将人放在中间,果汁和饮料放在两侧,然后分别向对应的人连边.同时,为了保证每一个人只被算一次,对每一个人裂点,两个点中间连一条流量为1的边. 1 #include< ...

  10. [cf997E]Good Subsegments

    一个区间为好区间当且仅当$\max_{l\le i\le r}a_{i}-\min_{l\le i\le r}a_{i}=r-l$,考虑固定右端点$r$,维护所有左端点$l$的上述式子左-右的值,那么 ...