Oracle中建表及表操作
一、创建表
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中建表及表操作的更多相关文章
- Oracle中如何实现Mysql的两表关联update操作
在看<MySQL 5.1参考手册>的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.p ...
- Oracle language types(语言种类) 表的相关操作 DDL数据定义语言
数据定义语言 Data Definition Language Statements(DDL)数据操纵语言 Data Manipulation Language(DML) Statements事务控制 ...
- Oracle数据库表的备份和数据表的删除操作
--Oracle数据库中的表备份: --备份语句:在备份之后就可以将这张表的所有数据源删除了,但是之后有人对这张表的数据进行操作,但是在操作完成之后要记得将数据表恢复 CREATE TABLE DZH ...
- Oracle 11g 学习3——表空间操作
一.表空间概述 表空间是Oracle中最大的逻辑存储结构,与操作系统中的数据文件相相应: 基本表空间:一般指用户使用的永久性表空间,用于存储用户的永久性数据 暂时表空间: 主要用于存 ...
- oracle 大表在线删除列操作(alter table table_name set unused )
在某些情况下业务建的表某些列没有用到,需要进行删除,但是如果是数据量很大的大表,直接 alter table table_name drop column column_name;这种方法删除,那么将 ...
- Oracle 表空间常用操作
aliases: [Oracle表空间] tags: [数据库,Oracle,Blog] summary: [Oracle表空间常用操作,包括查询.分析.扩容.删除.优化等] date: ...
- Oracle触发器实现监控某表的CRUD操作
前提:请用sys用户dba权限登录 1.创建一个表来存储操作日志 create table trig_sql( LT DATE not null primary key, SID NUMBER, SE ...
- Oracle 表的常见操作
--创建表并指定表空间 create table goods( id VARCHAR2(20) primary key, name VARCHAR2(20) NOT NULL, price NUMBE ...
- Oracle学习笔记八 表空间
表空间 表空间是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间 . 分区表 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下 ...
随机推荐
- Notepad++ 过滤注释行和空行
Notepad++ 删除指定字符开头的行的正则表达式 1.删除A之后的所有字符用:A.*$ 2.删除A之前的所有字符用:^([^s]*)A ####如果是其他字符就把A替换为其他字符 注释:如何是特殊 ...
- 黑客是如何利用DNS域传送漏洞进行渗透与攻击的?
一.DNS域传送 DNS :Domain Name System 一个保存IP地址和域名相互映射关系的分布式数据库,重要的互联网基础设施,默认使用的TCP/UDP端口号是53 常见DNS记录类型: 1 ...
- Go语言并发模型 G源码分析
Go 的线程实现模型,有三个核心的元素 M.P.G,它们共同支撑起了这个线程模型的框架.其中,G 是 goroutine 的缩写,通常称为 "协程".关于协程.线程和进程三者的异同 ...
- 18-Spring Cloud Alibaba Nacos
简介 为什么叫Nacos 前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service Nacos是什么 一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平 ...
- python及pygame雷霆战机游戏项目实战01 控制飞机
入门 在这个系列中,将制作一个雷霆战机游戏. 首先,将游戏设置修改一下: WIDTH = 480 HEIGHT = 600 FPS = 60 玩家精灵 要添加的第一件事是代表玩家的精灵.最终,这将是一 ...
- 来了!公开揭密团队成员开发鸿蒙 OpenHarmony 的完整过程(收获官方7000奖金和开发板等,1w字用心总结)
背景 随着 OpenHarmony 组件开发大赛结果公布,我们的团队成员被告知获得了二等奖,在开心之余也想将我们这段时间宝贵的开发经验写下来与大家分享,当我们看到参赛通知的时候已经是 9 月中旬的时候 ...
- 菜鸡的Java笔记 第十八 - java 代码块
代码块 code block content (内容) 在程序结构之中使用"{}"定义的内容就称为代码块,但是会根据其声明的位置以及关 ...
- 关于如何在MyEclipse下修改项目名包名,以及类
1.修改项目名,右键选择properties->web->web-Context-root修改名称或者直接按F2修改.2,修改包名,右键选择Refactor->rename修改名称即 ...
- [bzoj1711]吃饭
由于无法直接将果汁和饮料连边,所以将人放在中间,果汁和饮料放在两侧,然后分别向对应的人连边.同时,为了保证每一个人只被算一次,对每一个人裂点,两个点中间连一条流量为1的边. 1 #include< ...
- [cf997E]Good Subsegments
一个区间为好区间当且仅当$\max_{l\le i\le r}a_{i}-\min_{l\le i\le r}a_{i}=r-l$,考虑固定右端点$r$,维护所有左端点$l$的上述式子左-右的值,那么 ...