MLDN魔乐科技Oracle课堂笔记
- 格式:doc
- 大小:35.50 KB
- 文档页数:12
1.触发器创建命令 Creat trigger <触发器名称>2.before insert or update of department_id on employees 意思是当表employees执行insert操作以及针对employees表中的department_id字段做update操作地时候,发起触发器;3.referencing old as old_value new as new_value for each row 定义了触发器关键动作(insert,update,delete)的修改临时变量(new,old) insert: 此时有一个new的修改临时变量可以被后续SQL操作当为insert时,只存在new变量,存放着insert的所有记录信息 update: 当为update时,update之前的数据存放在old中, update之后的数据存放在new中;注:如果update了一个字段,那么old和new里是保存着字段值还是一个完整的记录值 delete: 当为delete时,delete之前的数据存放在old中,并且只有old;4.定义触发器限制 when (new_value.department_id<>805.if...then elseif...then6. user当前登录用户7. Raise_application_error一个oracle定义的异常对象8. Create or replace 创建或者替换触发器9. sysdate当前系统时间 10.表修改关键字alter table 11.Declare 定义触发器中的变量 12.<字段>%type 表示字段的类型 13.定义触发器生效之后的SQL句操作 begin :new_mission_pct :=0; end; 14.before....for each row表示触发器对每一行生效 15.create sequence 建立字增长的序列号。
oracle课堂笔记星期⼀:Monday星期⼆:Tuesday星期三:Wednesday星期四:Thursday星期五:Friday星期六:Saturday星期天:Sunday数据库⽬录实例主⽬录:C:\oracle\product\10.1.0\admin实例⽬录⽂件:bdump:⽤于保存进程跟踪⽂件 cdump:⽤于保存内核放弃⽂件 create:o数据库创建⽂件 pfile:初始化参数⽂件 udump:⽤户SQL跟踪⽂件C:\oracle\product\10.1.0\oradata\orcl 数据库⽂件 .ctl 数据库控制⽂件 .log 重做⽇志⽂件 .dbf 数据⽂件Oracle注册表相关项[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\OracleCSService] Oracle服务相关项[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1] Oracle安装,运⾏环境,参数设置相关项[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Oracle in OraDb10g_home1] 与ODBC驱动相关的⼦键变量&select employee_id,last_name,salary,department_id from employees where employee_id=&请输⼊员⼯编号;select job_id, last_name, department_id, salary*12,salary from employees where job_id='&job' 中⽂字符要加单引号select employee_id,last_name,job_id,&column_name from employees;select employee_id,last_name,job_id,&column_name from employees order by &order_column;操作符优先级:(1)乘除的优先级⾼于加减。
Oracle超详细学习笔记-----员⼯培训------1.最简单的查询--例SELECT *FROM employees;DESC employees;SET linesize 600;SET PAGESIZE 50;--例2SELECT table_name FROM user_tables;--查询数据库中所有表名--2.查询特定的列--例SELECT employee_id,fisrt_name,last_name.salaryFROM employees;--3.在SELECT⼦句中使⽤直接量--例SELECT 5FROM employees;-----------------------SELECT 5FROM dual;--这是Oracle提供的伪表--例2:SELECT 'Hello Oracle SQL'--在Oracle中如何表⽰字符串常量FROM employees;SELECT 'Hello Oracle SQL'--在Oracle中如何表⽰字符串常量FROM dual;--例3:SELECT 'Hello Oracle''s SQL'--⽤两个连续单引号进⾏单引号转义FROM employees;--4在SELECT⼦句中使⽤算术表达式--例1:查询员⼯的编号、姓名和年薪SELECT employee_id,fist_name,last_name,salry,salary*12FROM employees;--例2:SELECT 5/2FROM dual;--5.给例定义别名--例1:SELECT employee_id AS idFROM employees;--例2:SELECT employee_id AS "Id"--双引号中的字符原样显⽰FROM employees;--例3:SELECT employee_id,fist_name,last_name,salry,salary*12 AS annual_salary FROM employees;--例4:SELECT employee_id,fist_name,last_name,salry,salary*12 AS "annual salary" FROM employees;--如果别名有特殊字符必须使⽤双引号--6.字符串的链接运算符--例:SELECT employee_id||''||fist_name,last_name,salry,salary*12 AS annual_salary FROM employees;--7.过滤重复记录--例1:SELECT DISTINCT department_idFROM employees;--例2:SELECT DISTINCT department_id,job_idFROM employees;--第⼆章过滤查询和结果集排序--1.使⽤WHERE⼦句过滤记录--例1:SELECT *FROM employeesWHERE salary > 8000;--例2:SELECT employee_id,first_name,last_name,salary FROM employeesWHERE salary = 17000;--例3:SELECT employee_id,first_name,last_name,salary FROM employeesWHERE salary <> 17000;-- !=--⽐较运算符号:>,>=,<,<=,=,!=或<>--例4SELECT employee_id,first_name,last_name,salary FROM employeesWHERE salary >=2500 AND salary <= 17000;--逻辑运算符:AND,OR,NOT--2.在WHERE⼦句中使⽤字符串和⽇期--例1:查询职位ID为st_clerk的员⼯信息SELECT employee_id,job_id,first_name,FROM employeesWHERE job_id = 'ST_CLERK';--表中字段的值是区分⼤⼩写的--例2:查询1998年7⽉9⽇⼊职的员⼯信息SELECT employee_id,job_id,first_nameFROM employeesWHERE hire_date = '09-7⽉-1998';--⽇期直接量必须以字符串的形式来体现--Oracle的⽇期是格式敏感的--标准⽇期表⽰DD-MM-RR--3.其他⽐较运算符--1)BETWEEN AND--例1:查询⼯资在【2500,7000】上的员⼯信息SELECT employee_id,job_id,first_name,salaryFROM employeesWHERE salary BETWEEN 2500 AND 7000;--包含边界值--第⼀个值要⼩于第⼆个值--练习:查询1998年⼊职的员⼯信息SELECT employee_id,job_id,first_name,salary,hire_dateFROM employeesWHERE hire_date BETWEEN '01-1⽉-1998' AND '31-12⽉-1998';--2) IN--例1:查询职位ID是ST_CLERK或者ST_MAN的员⼯SELECT employee_id,job_id,first_name,salary,hire_dateFROM employeesWHERE job_id IN ('ST_CLERK','ST_MAN');--例2SELECT employee_id,job_id,first_name,salary,hire_dateFROM employeesWHERE NOT job_id IN ('ST_CLERK','ST_MAN');----------------------------------------------------------------------------SELECT employee_id,job_id,first_name,salary,hire_dateFROM employeesWHERE job_id NOT IN ('ST_CLERK','ST_MAN');--3)LIKE--例1:模糊查询SELECT employee_id,job_id,first_name,salary,hire_dateFROM employeesWHERE job_id LIKE 'ST%';--通配符:%任意多个字符,_⼀个字符。
oracle 笔记摘要:一、Oracle 简介1.Oracle 的发展历程2.Oracle 的产品和服务二、Oracle 数据库的基本概念1.数据库管理系统2.关系型数据库3.Oracle 数据库的结构三、Oracle 数据库的安装与配置1.安装Oracle 数据库的前提条件2.安装过程及注意事项3.配置Oracle 数据库四、Oracle 数据库的管理1.数据库的启动与关闭2.数据库的备份与恢复3.用户与权限管理五、SQL 语言基础1.SQL 简介2.SELECT 查询语句3.INSERT、UPDATE 和DELETE 操作语句六、PL/SQL 编程1.PL/SQL简介2.存储过程与函数3.触发器与异常处理七、Oracle 数据库的应用1.Oracle 数据库在企业级应用中的优势2.Oracle 数据库在典型行业的应用案例正文:一、Oracle 简介Oracle(甲骨文)公司成立于1977 年,总部位于美国加州,是全球著名的数据库软件及解决方案供应商。
Oracle 的产品和服务涵盖了数据库、应用软件、中间件、云计算等领域,广泛应用于企业、政府、金融、医疗等各个行业。
二、Oracle 数据库的基本概念1.数据库管理系统:数据库管理系统(DBMS)是一种用于存储、检索和管理数据的计算机软件。
它提供了对数据的高效组织、存储、检索、更新和维护功能。
2.关系型数据库:关系型数据库是基于关系模型的数据库,采用表格形式存储数据,并通过SQL(结构化查询语言)进行操作。
Oracle 数据库是一种关系型数据库,具有强大的数据管理功能和高度的数据安全性。
3.Oracle 数据库的结构:Oracle 数据库由物理结构和逻辑结构组成。
物理结构包括数据库文件、数据块、表空间等;逻辑结构包括表、视图、索引等。
三、Oracle 数据库的安装与配置1.安装Oracle 数据库的前提条件:首先,需要确保计算机硬件满足Oracle 数据库的最低要求;其次,需要获取Oracle 数据库的安装文件,这些文件通常可以从Oracle 官网下载。
目录Oracle学习路线 (1)在windows XP之后的版本中安装Oracle10g的注意事项 (2)创建和删除临时表空间 (3)创建数据表空间 (4)3、创建用户并指定表空间 (4)4、给用户授予权限 (4)Oracle学习路线1、sql、pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验)作为oracle的基本功,需要大家对sql和plsql非常的熟悉。
特别是sql 里面的多表连接、子查询、各种新版本的函数,以及plsql里面的所有语法。
建议大家拿出足够的时间来研究这两块。
不要认为这是开发人员的工作,他也是DBA的重要工作,而且对DBA的要求更高,你不但能看懂,还要能够找出问题。
学些这方面知识的要点就是:多练、多思考。
2、Oracle管理(体系结构)(这一块一定要听课,而且是要听“大师”的课、多讨论)这是Oracle的难点,Orcle技术博大精深,主要的难点就集中在这里面。
包括Oracle的存储管理、对象管理、内存和进程、undo管理、初始化参数、数据字典视图、安全、latch和lock、权限和角色、资源调度、闪回、日志原理等。
学习这一块知识的时候,一个重点是:要知道原理和“根”,知道表面的东西没有任何意义。
知道原理以后,通过实验去证明,将原理总结出来。
这一块学习的好还是不好,直接决定了以后的一个备份恢复、优化、排错。
这一块虽然是研究管理,但是更加注重原理和体系结构的分析和解剖。
应该叫做“深入剖析Oracle体系结构”,多深都需要。
在这一部分的学习中,已经学习了很多优化的内容,在学习任何一个知识点的时候,我们都离不开对性能的分析。
3、备份恢复(听听课、看几本书,多做做实验、多讨论)有了第二部分的铺垫,这一章的学习相对有意思,前提是我们对Oracle的日志原理研究得较深,对oracle的内存和进程研究得较深。
策划一个完美和正确的备份计划和实施方案(具体要分析出原理),实施备份;对各种损坏进行恢复(还是要能够够分析出原理);另外可以做一些高难度的恢复实验(还是老话、要能够分析出原理)。
关于Oracle的学习笔记,可能包括以下几个重要部分:数据库创建和管理:创建用户和表空间。
以超级管理员的身份登录,创建表空间,创建用户,给用户授权,使用新用户进行查询测试。
数据定义语言(DDL)用于建立、修改、删除数据库对象,包括创建语句(CREATE)、修改语句(ALTER)、删除语句(DROP)。
例如,使用CREATE TABLE创建表,使用ALTER TABLE修改表,使用DROP TABLE删除表等。
数据库查询:数据查询语言(DQL)用于查询所需要的数据。
排序查询结果。
例如,使用SELECT语句查询员工信息,并按升序排序。
排序可使用NULLS FIRST和NULLS LAST来选择空的信息的位置。
字符串拼接。
通过“||”实现字符串的拼接。
例如,查询所有员工姓名并在后面加一个“a”。
当字符串拼接遇到空的时候,空会自动变成一个空字符串。
数据库数据操作:数据操作语言(DML)用于改变数据库数据,包括INSERT、UPDATE、DELETE三条语句。
使用DISTINCT去重。
例如,SELECT DISTINCT name, id FROM A,作用于多列。
数据库高级特性:使用PARTITION BY在保留全部数据的基础上,只对其中某些字段做分组排序。
虚拟表DUAL是一个虚表,虚拟表,是用来构成SELECT的语法规则,Oracle保证DUAL里面永远只有一条记录。
数据库控制和管理:数据控制语言(DCL)用于数据库的控制和管理。
事务控制语言(TCL)用于数据库事务的控制。
以上内容只是Oracle学习笔记的一部分,实际上Oracle数据库系统的学习还包括很多其他的内容,如索引管理、视图、存储过程、触发器等高级数据库对象的管理和使用,以及数据库性能优化、安全性管理等内容。
1、s qlload导入数据1.1、sql loader 的特点oracle自己带了很多的工具可以用来进行数据的迁移、备份和恢复等工作。
但是每个工具都有自己的特点。
比如说exp和imp可以对数据库中的数据进行导出和导出的工作,是一种很好的数据库备份和恢复的工具,因此主要用在数据库的热备份和恢复方面。
有着速度快,使用简单,快捷的优点;同时也有一些缺点,比如在不同版本数据库之间的导出、导入的过程之中,总会出现这样或者那样的问题,这个也许是oracle公司自己产品的兼容性的问题吧。
sql loader 工具却没有这方面的问题,它可以把一些以文本格式存放的数据顺利的导入到oracle数据库中,是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具。
缺点就速度比较慢,另外对blob等类型的数据就有点麻烦了。
1.2、sql loader使用例子创建一个假日表a、insert,为缺省方式,在数据装载开始时要求表为空b、append,在表中追加新记录c、replace,删除旧记录,替换成新装载的记录d、truncate,同上1.4、执行命令将jrb.ctl文件和jrb0.dat文件放在e:\tem目录下arms/arms@armsdb这里数据库用户名:arms;密码:arms;数据库:armsdb;2、oracle对应用程序性能分析有的时候我们发现一个应用系统运行很慢,运行很慢主要是由于跟数据库有关,致使数据很长时间没有返回数据,这个时候我们可能去查oracle到底哪里有问题,是什么原因导致他运行非常慢。
其实很多时间都是由于程序人员写的sql执行效率非常低或者某个时间段访问量忽然猛增或者其他原因,那么我们如何定位到是哪一个SQL或是哪一个时间段有问题呢?因为如果我们定位到某个时间段比其他时间段cpu,内存都相当耗时,我们就可以查看我们应用系统在这个时间段做什么,从而分析出系统运行慢的原因;我们也可以分析某个sql的运行时间,有时一段sql跑上几个小时都没跑出来。
Oracle数据库学习笔记1.oracle的特点?(选择记忆,理解)✓ORACLE7.X以来引入了共享SQL和多线索服务器体系结构。
这减少了ORACL E的资源占用,并增强了ORACLE的能力,使之在低档软硬件平台上用较少的资源就可以支持更多的用户,而在高档平台上可以支持成百上千个用户。
✓提供了基于角色(ROLE)分工的安全保密管理。
在数据库管理功能、完整性检查、安全性、一致性方面都有良好的表现。
✓支持大量多媒体数据,如二进制图形、声音、动画以及多维数据结构等。
✓提供了与第三代高级语言的接口软件PRO*系列,能在C,C++等主语言中嵌入S QL语句及过程化(PL/SQL)语句,对数据库中的数据进行操纵。
加上它有许多优秀的前台开发工具如POWER BUILD、SQL*FORMS、VISIA BASIC 等,可以快速开发生成基于客户端PC 平台的应用程序,并具有良好的移植性。
✓提供了新的分布式数据库能力。
可通过网络较方便地读写远端数据库里的数据,并有对称复制的技术。
支持各种分布式功能,特别是支持Internet应用。
✓功能强大,层次清晰,安全机制好,跨平台,数据操作,系统管理,安全性,集群技术,分布式应用,商业智能✓具有完整的数据管理功能。
✓作为一个应用开发环境,Oracle提供了一套界面友好、功能齐全的数据库开发工具。
✓Oracle使用PL/SQL语言执行各种操作,具有可开放性、可移植性、可伸缩性等功能。
✓可用性强✓可扩展性强✓数据安全性强✓稳定性强✓无范式要求,可根据实际系统需求构造数据库。
✓采用标准的SQL结构化查询语言。
✓具有丰富的开发工具,覆盖开发周期的各阶段。
✓支持大型数据库,数据类型支持数字、字符、大至4GB的二进制数据,为数据库的面向存储提供数据支持。
✓具有第四代语言的开发工具(SQL*formS、SQL*REPORTS、SQL*MENU等)。
✓具有字符界面和图形界面,易于开发。
✓通过SQL*DBA控制用户权限,提供数据保护功能,监控数据库的运行状态,调整数据缓冲区的大小。
Oracle经典自学笔记(doc 34页)一.验证Oracle已经安装完成了,首先得确认程序里有这些个选项,有四个选项:Oracle Installation Products、集成管理工具、配置和移植工具(管理员用得比较多)、应用程序开发。
Oracle也可以形成一种层次性的链接(Directory Manager),对于我们来说用得最多是sqlplus,而OLE 是一种面向对象的技术,利用这种技术可开发可重复使用的软件组件(COM),他是微软提出的,在用VB开发时可能要用,对于我们来说不须管。
当启动sqlplus时会提示输入用户名和口令,所谓的sqlplus是Oracle的一个客户端。
Oracle大多数命令都用命令来实现,所以比较难使,就如同unix比windows难使。
口令你输入tiger,建议就用它,因为以后去企业里Oracle 9i就是用的这个口令。
当你看到SQL>命令符时说明已经进入到了Oracle的命令行了。
图形版的sqlplus,命令行的sqlplus,还有一个就是通过网页访问Oracle的服务,启动sqlplus,端口号是5560,URL是录,它其实就是一个普通的dba用户,但是如果以as sysdba登录,其结果实际上它是作为sys 用户登录的,这一点类似Linux里面的sudo的感觉,从登录信息里面我们可以看出来。
sys用户必须以as sysdba或as sysoper形式登录。
然后输入命令alter user scott account unlock;它的意思是将Scott用户解锁,以后关于dba 的用到一个学一个,没必要从头到尾的去学它。
二.SQL语言是在数据库下进行操作的语言,它本身是一个标准语言,有国际标准。
有两套一个是SQL1992,SQL1999。
大多数数据库既支持旧的标准也支持新的,很多也是用的旧的SQL语言写程序的,对于我们来说新旧都要学,而且对大多数数据库系统来说都是通用的,只不过不同数据库有一个轻微的改变,这就是最郁闷的地方,没办法到时候查手册或google一下。
Oracle学习笔记Oracle学习笔记Oracle学习笔记(1) Oracle数据库编程基础文章分类:数据库这段时间出差,一直在搞需求分析和设计,每天都是写文档画UML,都有好几个月没有写代码了,只怕都快忘记了!这是我用Oracle时学习的Oracle编程做的笔记,今天也发上来与大家分享一下,一共有八章。
现在在有时间就学一下EJB3,因为在项目中会用到,等学完了把EJB3的笔记也发上来和大家分享!通过SqlPlus登录Oracle ,sqlplus 用户名/密码@数据库名建表Sql代码1.create table demo(2. id number(8),3. name varchar2(20)4.)插入数据Sql代码1.insert into demo values(1,'zhangshang');2.insert into demo values(2,'lishi');提交Sql代码/doc/fe11207420.html,mit;查询数据字典(table_name='这里的值要大写')Sql代码1.select * from dba_tab_cols a where a.table_name='DEMO';创建视图create or replace:如果该视图存在就替换,如果不存在就创建1.create or replace view myView as select id 编号,name 姓名 from demo;2.select * from myView;创建同义词(同义词相当于表的别名或逻辑名,可以通过该名称来操作相对应的物理表)在分布式Oracle数据库中,标识一个对象需要四部分:主机名、实例名、模式名、对象名。
例如********************,其中模式名是SYSTEM,对象名是auths,PX.orcl是一个数据库链,它指向服务器PX上的实例orcl,我们可以为其指定一个同义词,使所有的用户都可以通过简单的同义词来访问表********************创建公有的同义词Sql代码1.create public synonym syn1 for demo;创建私有的同义词Sql代码1.create synonym syn2 for demo;创建并使用序列创建序列的完整语法:create sequence 序列名 increment by 增量种子数 start with 起始数字maxvalue 最大值;我们可以使用序列的两个属性nextval和currval,其中nextval 是返回下一个可用的序列值,而currval用于获得当前序列的值创建序列的简单方法Sql代码1.create sequence mySeq;使用创建的序列Sql代码1.insert into demo values(mySeq.nextval,'ddd');获得当前序列的值1.select mySeq.currval from dual;删除一条记录Sql代码1.delete from demo where id=2;查询所有记录Sql代码1.select * from demo;格式化日期时间Sql代码1.select to_char(sysdate,'yyyy-MM-dd hh24:mm:ss') 格式化日期 from dual;Oracle学习笔记(2) PLSQL编程基础文章分类:数据库这是第二章的学习笔记,学习完第一章的基础之后,从现在开始要学习Oracle编程了……,希望大家能多给俺一些支持啊!编程时使用的工具是PLSQL Developer 7.1.4Sql代码1.select * from Employee;2.select * from dba_tab_cols t where t.table_name='EMPLOYEE'; Sql代码1.-- 声明部分,用于定义变量2.declareconstant用于定义常量,当定义常量时必须指定它的初始值,且数据不能改变Sql代码1.n_aaa constant number(4,2) :=5.5;boolean 类型的值只能用于sqlplus语句块中,不能用在表字段的数据类型中not null 用于强制初始化变量不能为空,此时必须为变量指定值default用于指定变量或常量的默认值1.v_valid boolean not null default false;2.v_name varchar2(20);为了确保变量使用合适的数据类型和长度,可以使用%type属性定义变量,它会按照数据库列或其它变量来确定新变量的类型和长度Sql代码1.v_job Employee.Job%type;将v_job2定义为与变量v_job的数据类型和长度完全一致Sql代码1.v_job2 v_job%type;复合变量:处理单行单列数据时,用标量变量;处理单行多列时,用PL/SQL 记录;处理单列多行时,用集合;处理多行多列数据时,可以结合使用PL/SQL记录和集合PL/SQL记录(RECORD):方法一:emp_recode_type 是PL/SQL记录类型并包含有三个成员(name,salary,job)Sql代码1.type emp_recode_type is record(2. name /doc/fe11207420.html,%type,3. salary employee.salary%type,4. job employee.job%type5.);emp_recode是记录变量Sql代码1.emp_recode emp_recode_type;方法二:使用表名的%rowtype 属性定义记录变量注意:用%rowtype 属性定义记录变量时,记录成员个数、名称、类型必须与表或视图的列的个数、名称和类型完全相同Sql代码1.emp_recode2 employee%rowtype;集合类型PL/SQL 表(也称索引表,下标可以为负数,下标没有上限和下限,并且元素的个数无限)Sql代码1.--这里的table 实指集合2.type name_table_type is table of /doc/fe11207420.html,%type index by bi nary_integer;3. name_table name_table_type;嵌套表:嵌套表的下标不能为负值,其元素的个数没有限制并可以使用表列的数据类型在使用嵌套表时必须先用create type 语句建立嵌套表类型嵌套表只是比PL/SQL 表少了 index by binary_integerSql代码1.type num_table_type is table of number(4);2.num_table num_table_type;varray(变长数组):varray的元素个数是有限制的,在使用其之前必须先建立varray 类型在此创建的varray只能存放20个varchar2类型的数据注意:嵌套表列数据需要存储在专门的存储表中,而varray数据则与其它列数据一起存放在表字段中Sql代码1.type v_varray_type is varray(20) of varchar2(10);2.n_empno employee.empno%type;Sql代码1.-- 程序开始2.begin执行部分,执行PL/SQL/和SQL语句可以用into将从表人查询出来的值赋给指定的变量将值赋给变量有两种方法,一是用 := ,二是用 into& 符号用于提示用户输入一个值,& 为sqlplus的替代变量Sql代码1.n_empno := &输入你要查询的员工编号:;2.select Name,Job into v_name,v_job from Employee where empno=n_empno;这里的 || 号与Java中的 + 号类似,表示要将两边的字符串连接起来dbms_output是Oracle所提供的系统包,用于输出数据或消息,而put_line是该包所包含的过程,用于输出字符串信息并换行当在CMD中使用dbms_output包时,必须要先将sqlplus 的环境变量serveroutput 设置为 onSql代码1.dbms_output.put_line('你查询的员工是:' || v_name || ' 他的工作是:' || v_job);引用记录变量的成员并赋值(赋值可以用 := 和 into 两种方法)注意:用sele ct……into 语句给记录变量赋值时,select语句中的列名列表的名称和个数、类型必须与记录变量的成员个数、名称、类型完全相同Sql代码1.dbms_output.put_line('你查询的员工是:' || v_name || ' 他的工作是:' || v_job);2.3.emp_/doc/fe11207420.html, := '钱森';4. dbms_output.put_line('引用记录变量的成员并赋值(Recode):' || emp_/doc/fe11207420.html,);5.6. select name,job into emp_/doc/fe11207420.html,,emp_recode2.jobfrom employee where empno=2;7. dbms_output.put_line('引用记录变量的成员并赋值(RowType):' || emp_/doc/fe11207420.html, || ' 的工作是:' || emp_recode2.job);8. -- 使用PL/SQL表(索引表)9. select name into name_table(-50) from employee where empno=1;10. dbms_output.put_line('雇员名:' || name_table(-50));11. -- 使用嵌套表12. -- 必须先设置嵌套表的下标,然后才能对该集合进行赋值13. num_table := num_table_type(1,2,3,4,5);14. num_table(1) := 10;15. num_table(5) := 100;16. dbms_output.put_line('使用嵌套表:' || num_table(1) || ',' || num_table(5));17.18.exception19. -- 异常处理部分20. when NO_DATA_FOUND then dbms_output.put_line('查询不到员工编号为' || n_empno || '的员工!');21. when TOO_MANY_ROWS then dbms_output.put_line('数据完整性错误,员工编号' || n_empno || '重复!');22. when OTHERS then dbms_output.put_line('PL/SQL执行错误!' || sqlerrm);23.-- 程序结束24.end;25./Oracle学习笔记(3) PLSQL程序控制结构文章分类:数据库这是第三章的学习笔记,学习完第二章的编程基础之后,从现在开始要学习Oracle编程了……,希望大家能多给俺一些支持啊!这周六总算是不用加班,可以好好出去玩一下了!今天去武大看樱花了,哈哈,不错!编程时使用的工具是PLSQL Developer 7.1.4Sql代码1.select * from employee;2.select * from dba_tab_cols t where t.table_name='EMPLOYEE';Sql代码1.declare2. n_empno employee.empno%type;3. v_name /doc/fe11207420.html,%type;4. n_salary employee.salary%type;5. v_temp varchar2(30);6. n_temp number(5) := 1;7. -- 自定义异常8. e_exception exception;exception_init 是一个编译时指令,用于将一个内部错误与异常的名称关联。
Oracle课堂笔记---------??create建表??------------------createtableemp_tian(EmpnonNumber(4)删除,enamevarchar(20),jobvarchar(20),salarynumber (7,2),BonuNumber(7,2),hiredatedate,managernumber(4),deptnonumber(2))-----------------------------------------?? 插入添加信息--------------------插入时间值(1001,'Zhangwji','manager',100002000,'12-mar-10',1005,10);insertintoemp_uuTianValues(1002,'liucangsong','analyst',80001000,'01-apr-11',1001,10);insertintoemp_uuTianValues(1003,'liyu','analyst',90001000,'10年4月11日',1001,10);insertintoemp_uTian值(1004,'guoferong','programmer',5000,null,'01-jan-11',1001,10);插入时间值(1005,'zhangsanfeng','persident',15000,空,'08年5月15日',空,20);insertintoemp_u2;tianvalues(1006,'yanxiaoliu','manager',5000400,'01-feb-09',1005,20);插入时间值(1007,'luwushuang','clerk',4000500,'01-feb-09',1006,20);insertintoemp_uuTian价值观(1008,'huangrong','manager',4000500,'01-may-09',1005,30);insertintoemp_uTianValues(1009,'weixiaobao','saller',4000,空,'2022年2月20日',1008,30);insertintoemp_ujian值(1010,'guojing','Saleser',4500,null,'09年5月10日',1008,30);------------调整数据显示(仅在Oracle中试用,重新登录后无效)--------------列宽调整columnempnofor9999---------------column可用col代替columnenamefora10---------------format可用for代替columnmanagerformat9999columnsalaryformat99999columnbonusfor9999coljobfora10ColNameFormat10 ColJobFormat12翻页设置setpagesize100setlinesize300调整数据显示(仅在Oracle中试用,重新登录后无效)------?修改信息-----------------updateemp_uuTiansetjob=\whereName='jizyue';select*fromemp_tian;-------------查询-----------------选择姓名,从emp_uuu_u;tianwherelower(job)in('analyst','clerk','programer');在(10,20)中选择eName,deptnofromemp_u_2;tian wherelower(deptno);selectename,salaryfromemp_tianwheresalary>=5000andsalary<=8000;-------------------------相当于5000至8000之间的工资;nvl(***,0)----当***中内容为null时,则返回0,否则返回***的值selectename.salaryfromemp_tianwherenvl(salary,0)=0;-----------找到了一个内容为空的选项--------------selectenamefromemp_tianwheresalaryisnull;-----------找到非空的选项---------从EMP_uutian where salary snotnull;-------------获取项目数-----------从用户表格中选择Count(*);showuser-------显示当前用户-------通配符%以查找名为EMP+任意字符的文件----------选择Table_u-namefromuser_uuu-table_uu-namelike'EMP%';selectename,salary,四舍五入(工资*0.12345678)astaxfromemp_ujian;------------舍入(Num,XXX)舍入-----------------XXX(截断整数)-------------xxx0(保留十的整数)-----------------xxx.xx(保留两位小数)selectename,salary,四舍五入(薪水*0.12345678)astax,四舍五入(薪水*0.12345678,-1)astax1,四舍五入(薪水*0.12345678,2)Astax2来自Emp_u_jian;---------------trunc直接截取--------------------------------selectename,salary,trunc(salary*0.12345678)astax,trunc(salary*0.12345678,-1)astax1,trunc(salary*0.12345678,2)astax2from emp___tian;--------------得到系统日期-------------------dual是一个虚表单行单列的表selectsysdatefromdual;---------------------按照指定的格式显示------------------selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')asmytimefromdual;selectto_char(sysdate,'yearmonthmondaydyam')fro mdual;selectto_char(sysdate,'yearmonthmondaydyam')fromdual;---------------按照制定的格式显示某个时间量-------------------选择eName,hiredate,to_char(hiredate,'yyyy-mm-dd')hirefromemp_ujian;一.oracle中的日期处理selectsysdatefromdual;----------------计算两个日期之间的间隔------------------------selectename,hiredate,sysdate-hiredateasdaysfromemp_tian;---------------计算间隔天数(整数)-----------------------------选择名称、hiredate、round(sysdate hiredate)作为DaysFrommp_uTian;--------------计算间隔月----------------------------------------selectename,hiredate,months_between(sysdate,hiredate)asdaysfromemp_tian;-----------------计算间隔月份整月份--------------------------------------------选择名称、雇佣日期、轮数(从(系统日期、雇佣日期)到日的月数);----------------------计算某月的最后一天------------------------------selectlast_day(sysdate)fromdual;------------------------计算三个月后的日期--------------------从Dual中选择Add_u;monds(sysdate,3);------------------------计算10天前/后的日期-------------------------------selectsysdate-10fromdual;selectsysdate+10fromdual;--------------------将万晓飞的进入时间修改为2022年2月1日-------------------updateemp_uu;tiansethiredate='01-feb-12'whereename='wanxiaofei';--------------将字符串更改为日期(以特定格式)-------------------------updateemp_tiansethiredate=to_date('2021/03/01','yyyy/mm/dd')whereename='wanxia ofei';----------------------添加员工:1012,‘Jerry’,‘2022-01-12’---------插入emp_utian(empno,ename,hiredate)values(1012,'jerry',to_date('2021/01/01','yyyy/mm/dd'));--------------------------------------------------至图表编号日期------------>字符------------>编号-to_datetochar---------------------------------------------------数字字符编号-10000------>$10000.00------>10000-to_charto_number---------------------------------------------------II单线函数计算——一个数据对应一个结果NVL(奖金,0)upper(job)='analyst'round(salary,2)至字符(sysdate,'yyyy-mm-ss')至日期('2022/03/01','yyy/mm/dd')------------如果有奖金发奖金,没奖金的发工资的一半,都没有的话发一百-----------selectename,salary,bonus,coalesce(bonus,salary*0.5,100)asfinalbonusfromemp_tia n;-----------------雅思成绩------------------姓名听、读、写、说总分叶凡55786.25->6.5[0,0.25)[0.25,0.75)[0.75,1)00.51select*fromielts_tian;-----------------------计算每人四项的平均结果-----------------------------------selectname,scr1,scr2,scr3,scr4,(scr1+scr2+scr3+scr4)scorefromielts_tian;-------------------------------取模-------------------------------------------得到小数位mod(7.25,1)-------结果0.25得到整数位trunc(7.25)-------结果7casewhen....thenwhen....thenwhen....thenend整数部分TRUNC((sCR1+scr2+scr3+scr4)/4)小数部分mod((sCR1+scr2+scr3+scr4)/4,1)----------------------雅思算分代码---------------------------------------选择名称、scr1、scr2、scr3、scr4、trunc((scr1+scr2+scr3+scr4)/4)+casewhenmod((scr1+scr2+scr3+scr4)/4,1)<0.25Then0 WhenMod((scr1+scr2+scr3+scr4)/4,1)>=0.25andmod((scr1+scr2+scr3+scr4)/4,1)<0.75then0.5whenmod((scr1+scr2+scr3+scr4)/4,1 )>=0.75then1endasieltscorefromielts_tian;-----------------------------数据库创建函数------------------------------------------CreateReplaceFunctionCalculation_uUtian(scorenumber)ReturnNumbers--定义变量记住;——整数jnumber——十进制resultnumber;--结果begin--程序体i:=trunc(分数);——数据库中的作业:=J:=mod(分数1);如果j<0.25,则结果:=i+0;elsifj>=0.25andj<0.75thenresult:=i+0.5;elsifj>=0.75thenresult:=i+1;endif;返回结果;结束;/——使生效showerrors--------------检查错误语法----------------用你自己的函数替换复杂的代码--------------------选择名称、sCR1、scr2、scr3、scr4、(sCR1+scr2+scr3+scr4)/4asagv、计算_Utian((sCR1+scr2+scr3+scr4)/4)AsieltsCorefromielts_Utian;selectename,salary,bonusfromemp_tianorderbybonus;----------------------分别提薪---------------------方法一selectename,job,salary,当“职员”时的案例工作NVL(工资,0)*1.05when'programmer'thennvl(salary,0)*1.1when'analyst'thennvl(salary,0)*1.15elsenv l(salary,0)从Emp_u_u_u_u_u_u_u_u_u_u_u_;tian获得新的薪水;----------------------分别提薪---------------------方法二selectename,job,salary,casewwhenjob='clerk'thennvl(工资0)*1.05whenjob='programmer'thennvl(salary,0)*1.1whenjob='analyst'thennvl(salary,0)*1. 15elsenvl(salary,0)。
基本概念:数据:描述事物的符号;数据库:数据存放的地方,数据库是由数据和数据库对象组成的;数据库管理系统(DBMS):用于管理数据的计算机软件,使用户能方便的定义和操纵数据,维护数据的安全性和完整性,以及进行多用户下的并发控制和数据库恢复。
关系数据库(RDB):基于关系模型的数据库。
ORACLE数据库的体系结构是由一个实例和若干个数据库文件组成。
SQL语句分为:数据定义语句(DDL):create、drop、alter、truncate(不能回滚)数据操作语句(DML):insert、select、update、delete、merge数据控制语句(DCL):grant、revoke事物控制语句:commit、rollback、savepointORACLE数据库的核心组件:数据字典(DD)动态性能表(DPT)触发器PL/SQL包用户与角色:角色是一些权限的集合,分为dba、connect、resource、exp_full_database、imp_full_database。
用户分为sys、system。
用户权限包括两种:是指执行某一SQL语句或访问另一用户对象的权限。
它分为系统权限和对象权限。
(Dba_roles/dba_roles_privs/dba_sys_privs/dba_tab_pri vs/dba_col_privs/role_role_privs/role_sys_privs/role_ta b_privs)创建用户:Create user username identified by password;修改用户:Alter user username identified by newpassword; 创建角色:Create role rolename identified by password;修改角色:Alter role rolename identified by new password; ORACLE数据库的物理结构:1.数据文件:用于存放所有的数据库数据,若干个数据文件组成表空间;它包括系统数据(数据字典)、用户数据(表、索引、簇等)、undo数据等。
目录❀Oracle部分第一章数据库介绍 (3)第二章Oracle简介 (4)第三章用户、权限 (6)第四章Oracle数据类型 (8)第五章SQL语句概述 (9)第六章表空间 (11)第七章表 (12)第八章函数 (14)第九章约束 (17)第十章单查询查询 (22)第十一章多表查询-内连接 (23)第十二章多表查询-外连接 (25)第十三章多表查询-基本 (26)第十四章多表查询-连接 (29)第十五章子查询 (32)第十七章组函数及分组统计 (34)第十八章数据库对象-视图 (37)第十九章数据库对象-序列 (40)第二十章数据库对象-同义词 (43)第二十一章数据库对象-索引 (44)第二十二章网络配置 (47)第二十三章嵌套表、可变数组 (48)❀PL/SQL部分第一章PL/SQL 简介 (51)第二章PL/SQL数据类型 (54)第三章LP/SQL控制语句 (58)第四章动态SQL (63)第五章错误处理 (64)第六章游标-隐式游标 (66)第七章游标-显式游标 (68)第八章游标-REF游标 (72)第九章子程序-过程 (74)第十章子程序-函数 (77)第十一章自主事物处理 (80)第十二章程序包 (82)第十三章触发器讲解 (85)第十四章触发器实例 (89)第十五章数据库设计和三大范式 (92)第十六章数据库的备份与恢复简介 (97)第十七章导入导出工具 (99)第十八章数据库归档方式 (101)❀JDBC部分JDBC部分 (104)第一章jdbc简介 (104)第二章连接数据库 (106)第三章常用数据库的驱动程序和JDBC URL (108)第四章连接池 (109)第五章数据操作-创建表 (111)第六章数据操作-查询 (112)第七章预处理 (113)第八章批处理 (114)第九章数据的数据 (115)第十章调用函数 (116)第十一章调用过程 (119)第十二章DAO封装 (122)第一章数据库介绍一、数据的储存方法:第一种方法:用大脑来记住数据第二种方法:写在纸上第三种方法:写在计算机的内存中第四种方法:写成磁盘文件二、数据库能做什么?1.存储大量数据,方便检索和访问2.保持数据的一致、完整3.共享和安全4.通过组合分析,产生新的有用信息三、数据库的发展史萌芽阶段--文件系统★使用磁盘文件储存数据初级阶段--第一代数据库★出现了网状模型、层次模型的数据库中级阶段--第一代数据数据库★关系型数据库和结构化查询语言高级阶段--新一代数据库★“关系-对象”型数据库四、当前的数据库产品Oracle ------甲骨文BD2 -------IBMSQL Server ------微软Sybase -------赛贝思MySql -------SUN五、数据库和应用程序六、数据库相关的基本概念概念模型:基于客户的想法和观点所形成的认识和对象实体(Entiy):客观存在的、可以被描述的事物。
基础部分第一章SQL语言基础一什么是SQLStructured Query Language 结构化查询语言二SQL语言的特点非过程化语言提供视图功能(view)两种使用方式:a)交互式b)程序方式*.sql ——> SQL>@d:\文件名.sql(两个@表示被调用的子文件和当前文件在同一个目录,如:@@emp.sql== @d:\tty\emp.sql)控制数据库的数据的存取课上实践(使用文件见附件)创建用户:a)以system登陆数据库:SQL>@d:\cr_user.sqlSQL>@d:\cr_emp.sqlb)查询创建的用户:SQL>select * from all_users;三SQL 命令分类数据查询语言(QL)Query Language数据操纵语言(DML)Data Manipulation Language数据定义语言(DDL)Data Definition Language数据库控制语言(DCL)Data Control Language四SQL关键字(SQL命令,以“;”结束)Alter :修改表结构命令;如果有DBA权限,可以修改数据库结构;DDL类命令。
Audit :数据库审计命令;监视和审计用户对数据库的使用;DDL类命令。
NoAudit:取消审计;DDL类命令。
Comment:在表里增加注视功能;DDL类命令。
Create:创建命令;DDL类命令。
Drop:删除命令;将结构和数据全部删除;DDL类命令。
Grant:授权命令,DDL类命令。
Revoke:收权命令,DDL类命令。
Lock:对表强制加锁,不允许使用。
Rename;修改表名,DDL类。
Truncate:将表的数据清空,只保留空表的结构,DDL类命令。
Validate:对表进行验证,DDL类命令。
Commit:数据提交;DCL类命令。
Rollback:数据回退;DCL类命令。
Select:数据查询,QL类。
Oracle的增删改查CRUD = CREATE + READ + UPDATE +DELETE●insert 增加操作:INSERT INTO table_name (colunms_name) VALUES(columns_values) ;1.插入数据应该与字段的数据相同。
2.数据的大小应该在规定范围内。
3.在value中列出的数据位置必须与列的排列位置对应。
4.字符和日期类型必须包含在单引号里面。
5.插入空值,不指定或使用null。
在oracle的字段中,‘单个空格’=null。
6.如果全部添加,可以不加列名。
PS:select age,dump(age) from test_table ;这个dump显示本列的详细信息。
具体案例:向students里面添加几条数据。
insert into studentsvalues (1 , '汪海洋','男','11-11月-2012',1000,'Hello,World!') ;●update修改操作:UPDATE table_name SET col_name = expr1 WHERE 条件1.可以用新值更新原有表行中的各列。
举例:update students set sex = '女' where name ='郑志春' ;2.where特别注意限制,update和delete的遗失数据不可撤销。
●案例update要求:⏹将所有人薪水改为5000元⏹将姓名为张三的同学薪水改为3000元⏹将李四的薪水在原来的基础上增加1000块钱⏹将没有奖学金的同学改为10元update students set fellowship=10 where fellowship is null ;●delete语句:delete from table_name where 条件。
MLDN魔乐科技_Oracle课堂笔记1.sqlplusw命令(窗口形式),sqlplusw不支持编辑,一般在编辑器(记事本)中编辑好了后拷贝进去执行,或用ed命令;2.descdesc [tablename];查看表结构3.show user查看当前用户4.select table_name from tabs显示当前用户下的表名;5.set linesizeset linesize [number];6.set pagesizeset pagesize [number];7.eded命令用来从sqlplusw中打开编辑器来编辑文件(文本文件);8.@执行sql文件@D:\a.txt;@d:\a;(a文件的扩展名为.sql)9.connconn username/pwd@实例名;10.sql标准,其功能:DML(数据操作语言),DDL(数据定义语言),DCL(数据控制语言)11.别名Oracle中指定列别名;(不要指定为中文);12.distinct去除重复记录;13.||字符串连接符;select "我的名字是:" || name from t_user;14.NOT NULL/IS NULL选择列值不为空的记录where collumname IS NOT NULL;相反IS NULL;15.BETWEEN…AND…WHERE COLUMENAME BETWEEN...AND...; 等价于>=,<=,如果是在时间之前,则需将时间''起来;16.大小写oracle中查询值是大小写区分的,但关键字不区分;17.InFieldName in (值1,值2,值3,...值n);NOT IN;18.Like在使用Like时常用的通配符:%,匹配任意长度内容,_,匹配一个长度内容;例:select * from emp where ENAME Like '_M%';表示第二个字母为M的名字.19.>,<,>=,<=,<>,!=用法20.order byOrder by语句,放在SQL语句最后;desc(从大到小)/asc(从小到大)(默认)21.单行函数字符/数值/日期/转换/通用函数;(1).字符:UPPER()变大写,LOWER()变小写,INITCAP()将单词第一个字母大写;字符长度LENGTH(),字符串截取SUBSTR(),字符串替换REPLACE()其中substr()的第二个参数即起始位置索引为0或1效果都是从第一个字符开始,负数是从右边开始;(2).数值:四舍五入ROUND(),截取TRUNC(),求模MOD();ROUND(23.45,2),TRUNC(23.45,-1),MOD(10,3);(3).日期:MONTHS_BETWEEN(),两个日期之间的月数;MONTHS_BETWEEN(DATE1,DATE2)ADD_MONTHS(),下月的今天;NEXT_DAY(),下一个的今天日期;LAST_DAY(), 给定日期的最后一天日期;(4).转换:TO_CHAR(),TO_NUMBER(),TO_DA TE();fm去除前导0,例如:to_char(sysdate,'fmyyyy-mm-dd') 得出结果2009-1-2(本应为2009-01-02).千位分隔符(格式字符用9表示),货币前缀($美元,L本地币种)to_char(123456,'$99,999')美元to_char(123456,'L99,999')本地币种(5).通用:如果有NULL类型数据参与运算,必需用NVL()转换成特定值再计算;如:NVL(filed1,'0')DECODE()函数,用于替换;DECODE(field/expression,1,"one",2,"two")表示如果field/expression如果是1的话,则替换为one,是2的话替换为two;22.ORACLE用户(1)超级管理员:sys/change_on_install;(2)管理员:system/manager;(3)普通用户:scott/tiger;23.左、右(外)连接默认左连接where a.field1(+) = b.field2"+"在左边表示右连接,在右边表示左连接cross join产生笛卡尔积;标准语法:select table1.*,table2.* from table1,table2 where table1.no=table2.no;24.sql1999select table1.*,table2.* from table1[cross join table2][natural join table2][join table2 using collumname][left|right|full outer join table2]on table1.collum1 = table2.collum2where 1=1group by 分组条件having 分组条件order by...注:where子句中不能带组函数;25.组函数(1).count();(2).max();(3).min();(4).sum();(5).avg();26.分组统计group by27.子查询示例:select * from emp where sal > (select sal from emp where empno = 7654)使用分类:单列(用得最多),单行,多行;子查询的三种操作:(1) in 在结果集之中;(2) any=any即=,>any 比最小值的要大的结果集,<any比值最大的要小的结果集;(3) all>all,比最大的值要大,<all,比最小的值要小;格式:where field1 > all(子查询)28.事务一个窗口一个会话,如没有提交互不影响;commit;提交;rollback;回滚;死锁,等待,一个session没有提交,其它session不能处理,要等待前一个session提交了再进行处理;29.子查询、外连接练习select e.job,count(e.empno)from emp e right outer join (select job from emp group by job having min(sal) > 1500) emon e.job = em.jobgroup by e.job;select e.job,count(e.empno)from emp e ,(select job from emp group by job having min(sal) > 1500) emwhere e.job(+) = em.jobgroup by e.job;select e.job,count(e.empno)from emp ewhere e.job in (select job from emp group by job having min(sal) > 1500)group by e.job;29.表的建立与删除Oracle中的主要数据类型;varchar,varchar2为255字符;number(m,n),---float,number(n)----intdateclob,blog 4G(1)复制表create table tablename as select * from emp;(2)复制表结构(加永不成立的where条件)create table tablename as select * from emp where 1==2;(3)创建表create table tablename (字段1 类型1 default '默认值',字段2 类型2,...字段n 类型n)(4)修改表删除表: drop table tablename;增加列:alter table tablename add(columnname 类型default '默认值',columnname 类型default '默认值')修改列:alter table tablename modify(columnname 类型default '默认值')修改列名:alter table rename column columnname to newcolumnname重命名表:rename tablename1 to tablename2;只能用于oracle截断表:truncate table tablename;与delete类似,但直接释放,不能回滚;30.约束的分类与使用作用:保证数据库中数据的完整性;分类:主键(PRIMARY KEY),唯一(UNIQUE),检查(CHECK),非空(NOT NULL),外键约束(FOREIGN KEY);其中,前四种约束为单表约束,外键约束为多表约束;通过constraint指定约束:constraint person_pid_pk PRIMARY KEY(pid)constraint person_sex_ck CHECK(sex in ('男','女'))外键:强制删除父表:一般是先删除子表,再删除父表,但技术上可以实现强制先删除父表(同时删除从表相关约束):DROP TABLE tablename CASCADE CONSTRAINT;(一般不使用)强制删除从表数据:删除父表数据时,从表相应有约束的记录也删除, 需在创建表约束时这样处理:CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES persion(pid) ON DELETE CASCADE示例:CREATE TABLE T_PARENT(ID NUMBER(10) PRIMARY KEY NOT NULL,NAME V ARCHAR2(10));CREATE TABLE T_CHIRLD(ID NUMBER(10) PRIMARY KEY NOT NULL,NAME V ARCHAR2(10),PARENT_ID NUMBER(10),CONSTRAINT CHIRLD_PARENT_FK FOREIGN KEY(PARENT_ID) REFERENCES T_PARENT ON DELETE CASCADE);增加约束:ALTER TABLE tablename ADD CONSTRAINT 约束名PRIMARY KEY(pid);示例:alter table T_CHIRLDadd constraint CHIRLD_PARENT_FK foreign key (PARENT_ID)references T_PARENT (ID) on delete cascade;修改约束:ALTER TABLE tablename MODIFY CONSTRAINT 约束名PRIMARY KEY(pid);字段名_PK,字段名_UK,字段名_CK,字段名_NK,从表字段名_父表字段名_FK删除约束:ALTER TABLE tablename DROP CONSTRAINT 约束名;31.表的关联查询:并(UNION),交(INTERSECT),差(MINUS)UNION:将多个查询的结果组合到一个查询结果中,没有重复;UNION ALL:将多个查询的结果组合到一个查询结果中,可以有重复;INTERSECT:返回两个结果集的公共部分;MINUS:返回两个结果集的差值;(左边表减右边表)示例:select * from emp UNION select * from emp2;32.ROWNUM伪列的作用自动编号,存在于每一个查询中,使用情境:只想显示前五条记录,则只需加条件:ROWNUM <= 5;常用于分页操作如果想取得中间记录的数据,不能用ROWNUM(BETWEEN AND),只能用子查询:例:查出第五条到第十条记录;SELECT * FROM (SELECT ROWNUM rn,empno,ename,job FROM emp WHERE ROWNUM<=10) tempWHERE temp.rn>=5;33.序列的使用用途:用于自动增长;创建序列:CREATE SEQUENCE seqname[INCREMENT BY n][START WITH n] --START WITH默认从1开始;[{MAXV ALUE n|NOMAXV ALUE}][{MINV ALUE n|NOMINV ALUE}][{CYCLE|NOCYCEL}][{CACHE|NOCACHE}]示例:create sequence myseq;使用序列:insert into tablename (next,curr) values (myseq.nextval,myseq.currval);删除序列:DROP SEQUENCE seqname;34.视图创建语法:CREATE OR REPLACE VIEW 视图名称AS 子查询其中子查询是一个复杂的select语句视图创建好后,可以作为一张表来查询使用;以上创建的视图可以执行UPDA TE,且可将原表进行修改;但实际应用用,视图是只读的,可以需要在创建视图的时候加上以下参数:WITH CHECK OPTION 不能更新视图条件字段,但能更新其它非条件字段;WITH READ ONL Y 表示只读,不能更新;删除语法:DROP VIEW 视图名称;35.同义词,用户管理,权限分配与撤销,数据库的备份同义词(只适用于oracle):作用:通过同义词可访问不同用户下的表,例如,scott用户可以访问sys用户下的dual表;创建同义词:CREATE SYNONYM 同义词名称FOR 用户名.表名称;示例:create synonym emp for scott.emp;删除同义词:DROP SYNONYM 同义词名称;用户管理创建用户:CREATE USER 用户名IDENTIFIED BY 密码;为用户授权:GRANT 权限1,权限2,... TO 用户;示例将创建session的权限赋给testuser,以使得其可以连接到数据库:GRANT CREATE SESSION TO testuser;赋予角色给用户testuser:GRANT CONNECT,RESOURCE TO testuser;修改用户密码:ALTER USER 用户名IDENTIFIED BY 密码;使用户密码失效:ALTER USER 用户名PASSWORD EXPIRE;锁住用户:ALTER USER 用户名ACCOUNT LOCK;解锁用户:ALTER USER 用户名ACCOUNT UNLOCK;将某张表的读取,删除权限赋给用户testuser:GRANT SELECT,DELETE ON scott.emp TO testuser;回收权限:REVOKEREVOKE 权限ON 用户.表名称FROM 用户;示例:REVOKE SELECT,DELETE ON scott.emp FROM testuser;数据库的备份:导入导出命令EXP,IMP36.可变数组类似于嵌套表,一般开始过程中不用37.数据库设计范式第一范式:每一个字段不可再分;第二范式:实现多对多的关联;第三范式:实现一对多的关联;(用得最多90%以上的项目)注:以上三范式在设计数据库时仅作参考,数据库设计的维一原则是:表关联尽可能少,SQL 尽可能简单;37.嵌套表(ORACLE特有,使用复杂,一般实际开发中不使用)在一个表中还包含另一个子表; 先定义类型.。