Oracle数据更新,表结构,约束
Oracle数据更新,表结构,约束
数据插入
insert into 表名称[(列名称1,列名称2,…)] values (值1,值2…);
字符串:使用单引号声明,例如:‘sasda’;
数字:直接编写,例如:100;
日期:当前日期(sysdate)、使用to_date()转换
范例:使用完整格式:
insert into myemp(empno,sal,job,comm,ename,mgr,hiredate,deptno) values(8888,6666,'清洁工',10,'张三',7369,TO_DATE('1992-2-21','yyyy-mm-dd'),40);
数据更新
要针对于数据表中的数据修改的时候可以使用如下的语法完成
update 表名称 set 字段1 = 值 ,字段2 = 值,…[where 更新条件(s)];
在使用更新的时候,where子句里面的内容可以使用in,between…and,like等进行限定查询。
范例:
将Allen的工资修改为SCOTT的工资
update myemp set sal=(select sal from emp where ename = 'SCOTT')
where ename = 'ALLEN';
范例:
将低于公司平均工资的雇员工资上涨20%
- 先找到公司的平均工资 select avg(sal) from emp;
- 更新工资信息 update emp set emp = emp*1.2 where sal < (select avg(sal) from emp);
对于软件而言,判断效率的方式就两个:时间复杂度、空间复杂度。
软件的性能运行方式无外乎只有两种:以时间换控空间、以空间换时间。
总结:以后只要是写更新操作,不可能不写WHERE字句。
数据删除
delete from 表名称 [where 删除条件(s)]
事务处理
总结:
只有更新操作才会存在事务处理,DDL不支持事务处理,而且在ORACLE里面,如果发生DDL操作,所有未提交的事务都会被自动提交。
两个重要事务处理命令:Commit,RollBack.
数据伪列
- rownum
取出第一行记录:select rownum *from emp where rownum =1;只能是数字1。
取出前N行记录:select rownum *from emp where rownum <= N;
取出6到10行记录:
select * from(select * rownum rn from emp where rownum <= 10)temp
where temp.rn > 5;
分页语法
select * from(select 列,,,,rownum rnfrom 表名称,表名称,,,where rownum <=(currentpage*linesize)order by,,,,)temp
where temp.rn >(currentpage-1)*linesize
- rowid
整理去重SQL(留最早出入的数据):
Delete from mydept where ROWID not in (select MIN(ROWID) --max(ROWID)表示留最后出入的数据from mydeptgroup by deptno,dname,loc);
表的创建与管理(常用数据类型)
常见的数据类型
因为数据表就属于各种类型第一个集合,所以要想创建属于自己的数据表,那么就要先清楚常见的数据类型:
- VARCHAR2(n) 表示字符串,其中n表示最大长度,一般保存长度比较小的内容可以使用此类型(200个字以内的内容都建议使用VARCHAR2(n)
- NUMBER(n,m) NUMBER(n):表示整数数据,最多不能超过n个长度。
NMBERE(n,m):表示小数位占m位,而整数位占n-m位 - DATE 保存日期时间数据
- CLOB 大文本数据,最多可以保存4G的文字
- BLOB 二进制数据,最多可以保存4G的内容
创建表
创建表的语法
CREATE TABLE 表名称(列名称 类型 【DEFAULT】);
可以在表中创建多个列名称要用,隔开。
创建一个表:
CREATE TABLE member(mid NUMBER,name VARCHAR2(50) DEFAULT'无名氏',age NUMBER(3),birthday DATE DEFAULT SYSDATE,note CLOB
);
为表重命名
所谓表重命名,本质上就是更新一下数据字典中的相应信息。但是数据字典信息是由ORACLE自己维护,此信息修改必需由oracle命令完成,不可以直接update。
命令格式:rename [oldTable] to [newTable]
- 用户级别的数据字典:user_*开头
- 管理员级别数据字典:dba_*开头
- 全级别:all_*开头
表的截断
要清除表的一张数据表的记录,执行DELETE操作,但是在使用DELETE的时候严格来讲,表所占用的资源(约束、索引)并不会被立刻释放掉。
可以rollback,之后在查发现数据还在。
如果想要将数据表所占的全部资源清空,就需要用截断表的操作。
语法是:TRUNCATE TABLE 表名称;
表的复制
复制表的语法(严格来说这是根据子查询返回的结构在创建数据表,并且将子查询中的数据保存到新的数据表中)
CREATE TABLE 表名称 AS子查询
创建一张只包含有10部门雇员信息的数据表
CREATE TABLE aaa AS SELECT * FROM emp WHERE deptno=10;
创建一张空表
CREATE TABLE emp_20190512 AS SELECT * FROM emp WHERE 1=2; --因为1永远不等于2,所以会产生一张emp的空表,不加where条件就是全部数据和表结构复制为另一张表(备份表)
表的删除
数据表的删除操作,严格来讲是属于对象的删除,于是语法是 DROP TABLE 表名称;
删除表
DROP TABLE aaa;
数据表的删除操作是比数据删除更为可怕的事情,所有几乎的数据库都不会提供全部删除表的命令。
闪回技术
如果用户执行了DROP TABLE命令,队数据库来说就是表被删除了。
从oracle10g开始引入了闪回(Flash back)技术,这个技术和windows的回收站很像。
当执行数据表删除后并不会立马就真的删了,而是先将数据表保存在回收站中,为了标记出回收站里的内容不是空的,就在表的数据字典上提供
有“BIE”开头的内容。
查看回收站:SHOW RECYCLEBIN;
修改表结构
修改表中数据列,语法:
ALTER TABLE 表名称 MODIFY(列名称 类型 【DEFAULT 默认值】,
列名称 类型 【DEFAULT 默认值】,...);
将name的长度修改成20,默认值设置为无名氏
ALTER TABLE member MODIFY(name VARCHAR2(20) DEFAULT '无名氏');
删除列,语法
ALTER TABLE DROP COLUMN 列名称;
删除sex列
ALTER TABLE member DROP COLUMN sex;
约束
共6中约束。关键字:CONSTRAINT
1、非空约束:NOT NULL;
示例:1、创建约束:name varchar2(8) NOT NULL;;2、添加非空约束:ALTER TABLE 表名 MODIFY 字段 NOT NULL;;3、删除非空约束:ALTER TABLE 表名 MODIFY 字段 NULL;。
异常信息:ORA-01400:无法将NULL插入("登录用户"."用户表名"."表字段")。
2、唯一约束:UNIQUE;
示例:phone number(11) UNIQUE; 或 phone number(11);CONSTRAINT uk_phone UNIQUE (phone);
注意:NULL值(如果允许为NULL)不会受到字段唯一约束限制;
异常信息:ORA-00001:违反唯一约束条件(登录用户.约束对象名 | 登录用户.自定义约束别名(uk_phone)(约束对象可通过数据字典"user_constraints"查看所属表;可通过数据字典"user_cons_columns"所属表的字段:SELECT * FROM user_cons_columns;)
)。
3、主键约束(唯一约束 + 非空约束):PRIMARY KEY;
唯一主键示例:id number(11) PRIMARY KEY; 或 CONSTRAINT pk_id PRIMARU KEY (id);
复合主键示例:CONSTRAINT pk_id_name PRIMARU KEY (id, name);
异常信息:同“唯一约束”或“非空约束”异常。
4、检查约束:CHECK;
示例:CONSTRAINT ck_age CHECK (age BETWEEN 0 AND 250);
注意:检查约束是一个个进行过滤的,并发量大情况下,影响性能。
异常信息:查询详情时,同“唯一约束”相同。
5、外键约束:FOREIGN KEY;
示例:CONSTRAINT fk_xid FOREIGN KEY (子表字段) REFERENCES 主表名 (主表字段) [ON DELETE 级联关系(可选)];
注意:子表数据范围,受主表数据的影响。
限制:1、在删除主表前,一定要先删子表。(A、B两表互设外键时,就会遇到无法删除的情况,可用强制删除表:DROP TABLE 表名 CASCADE CONSTRAINT;。强制删除的表会进入Oracle“回收站”);2、子表外键关联的主表字段,必须设置为主键约束或唯一约束;3、主表中的数据,在子表中存在外键数据,那么主表的这条数据不允许别删除(可设置级联关系删除)。
设置外键的级联关系:1、级联删除:CONSTRAINT fk_xid FOREIGN KEY (子表字段) REFERENCES 主表名 (主表字段) ON DELETE CASCADE;;2、级联更新:CONSTRAINT fk_xid FOREIGN KEY (子表字段) REFERENCES 主表名 (主表字段) ON DELETE SET NULL;。
异常信息:ORA-02291:违反完整约束条件(登录用户.约束对象名) - 未找到父项关键字。
6、修改约束:
示例:1、添加约束:ALTER TABLE 表名 ADD CONSTRAINT 自定义约束名cons_id 约束类型UNIQUE (字段) [选项];;2、删除约束:ALTER TABLE 表名 DORP CONSTRAINT 自定义约束名。
注意:无法增加非空约束NOT NULL,可通过修改表结构添加非空约束:ALTER TABLE 表名 MODIFY(字段 varchar2(n) NOT NULL);;删除非空约束,要先找到非空约束所在字典中的对象:ALTER TABLE 表名 DROP CONSTRAINT 非空对象SYS_C0011097;。
Oracle数据更新,表结构,约束相关推荐
- oracle 查看表结构约束,oracle 约束
约束是表中列的属性,用来维护数据结构完整性的一种手段 约束的种类: NOT NULL UNIQUE PARIAMRY KEY FOREIGN KEY CHECK enble validate 检查现有 ...
- oracle怎么看一个表结构,Oracle查看表结构的几种方法
Oracle查看表结构的几种方法 1,DESCRIBE 命令 使用方法如下: SQLgt; describe nchar_tst(nchar_tst为表名) 显示的结果如下: Oracle查看表结构的 ...
- MySql 、Oracle 获取表结构和字段信息
MySql获取表结构信息 SELECTTABLE_NAME,TABLE_COMMENT FROMinformation_schema.`TABLES` WHERETABLE_SCHEMA = 'dm' ...
- oracle复制一个表的结构图,Oracle复制表结构
Oracle复制表结构 如下,表a是数据库中已经存在的表,b是准备根据表a进行复制创建的表: 1.只复制表结构的sql create table b as select * from a where ...
- 数据库oracle修改属性列,Oracle修改表结构
本篇文章帮大家学习Oracle修改表结构,包含了Oracle修改表结构使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 在本教程中,我们将学习如何使用Oracle ALTE ...
- oracle 数据库表结构对比
oracle 数据库表结构对比 由于公司工作比较混乱,总有人会改数据库中表的内容和字段. 在部署的时候总会因为数据库出现了未知的改变而发生错误. 所以需要对数据库内容进行比对,以求得到变化的内容. 导 ...
- oracle用命令查表结构,Oracle查看表结构命令详解
获取表: select table_name from user_tables; //当前用户的表 select table_name from all_tables; //所有用户的表 select ...
- 查询oracle表结构及注释,oracle查看表结构和注释
查看表结构: 看字段名与数据类型 select * from cols WHERE TABLE_name=upper( 'table_name ') 查看主键: select ...
- oracle 查看表结构
oracle 查看表结构 1.命令窗口:desc 表名 2.sql窗口:select * from user_tab_columns where table_name='大写表名':
- Oracle修改表结构字段名和字段长度
添加字段的语法:alter table tablename add (column datatype [default value][null/not null],-.); 修改字段的语法:alter ...
最新文章
- AttributeError: module ‘os‘ has no attribute ‘mknod‘
- R语言配对图可视化:配对图(pair plot)可视化(根据分类变量的值为散点图上的数据点添加颜色和形状、Add color and shape by variables)
- laravel cookie加密解密原理
- [BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)
- StrategyPattern--策略模式java实现
- 谈论Java原子变量和同步的效率 -- 颠覆你的生活
- 9个元素换6次达到排序序列_C语言必学的12个排序算法:希尔排序(第3篇)
- foreach lambda写法_Java8新特性之forEach+Lambda 表达式遍历Map和List
- 使用countDownLahct模拟多线程并发场景
- 十字链表 java_十字链表法,十字链表压缩存储稀疏矩阵详解
- js define函数_不夸张,这真的是前端圈宝藏书!360前端工程师Vue.js源码解析
- c ++中哈希表如何访问_C / C ++中的哈希表–完整的实现
- AcWing 796. 子矩阵的和
- 【权限设计】如何以“权限”为单位的进行权限设计(二)
- 【POJ 1456】Supermarket【并查集】
- 编译原理(第3版)陈火旺——课后习题答案——第四章
- 跨平台开发实践之Flutter
- for of 的基本用法
- 计算机表格数据怎么样汇总,Excel 中如何汇总相同结构的多个工作表数据
- 2024浙江大学计算机考研信息汇总
热门文章
- 【无标题】研究过程中的一些经验感悟
- Tushare Day4——导入IPO新股列表new_share并分析基金和盈利
- html5 重度游戏,款款经典 2016年H5重度游戏好作大盘点
- iphone通讯录 android,3个方法,教你如何快速而又有效的将联系人从iPhone转移到安卓...
- CUrl 创始人怒怼苹果:靠开源年赚数十亿,却把开发者当免费工具人
- Linux判断服务进程存在,存在则重启,不存在则启动
- 重新认识 Java 的 System.in
- 玩转算法面试LeetCode题目目录
- 信汇、电汇和票汇的概念、程序及其异同点
- linux游戏星际公民,鲜游快报:《星际公民》众筹破3.1亿美元 公布新视频展示新机制...