第一篇:T2 创建Oracle数据库以及数据库的启动和关闭_教案
T2 Oracle数据库的创建及其开启
【本讲主要目标】
1、创建Oracle数据库概述
2、手工创建数据库
3、使用向导工具创建数据库
4、启动/关闭数据库-1
【本讲重点】
1、手工创建数据库
2、使用向导工具创建数据库
3、启动/关闭数据库-1
【本讲难点】
无
【上讲回顾】
时间:10分钟
【课程知识讲解】
一、创建Oracle数据库概述(时间:20分钟)
• 一般在数据库安装结束后,Oracle 自动创建一个预定义数据库,–
如果这个数据库不符合要求
–
要在一个服务器中创建两个数据库
–
原数据库的物理结构已经破坏,但是系统文件可以使用
创建数据库的过程:
–
创建数据库的逻辑结构 时先创建系统表空间SYSTEM –
表空间创建后,表空间对应的数据文件在规定的操作系统目录中自动产生
–
在数据库结构产生后,数据库的控制文件、日志文件也同时产生,这样就产生了数据库的物理结构。
–
数据库参数文件中定义了数据库SGA 大小
– 启动实例时,分配系统全局区,形成数据库的内存结构 – 数据库启动 时自动产生进程结构。
一般来讲,一个数据库物理结构文件符合如下存储结构
– Windows 2000:
– D:oracleoradataDB-NAME*.* • *.* 是数据库物理结构文件
• D 为Oracle 安装磁盘
• DB-NAME 是数据库名,是在创建数据库时确定的名称,该名称成为数据库文件的存储目录名
具体目录可以查看安装时候默认的数据库
– Oracle_home:oraceloradata 数据库名
在Windows 2000下创建数据库
• •
• 从oracle9i开始创建数据库有两种不同的方法: – 通过手工创建创建
– 通过使用DBCA(数据库配置助手)创建
创建数据库的准备工作
–
规划数据库
–
确定数据库的创建方式
–
初始化参数文件和初始化参数
二、DBCA创建数据库(时间:30分钟)
• 初始化参数文件的主要内容: – 一组实例参数的值 – 实例关联的数据库名称
– 系统全局区的内存分配结构 – 如何处理联机重做日志文件 – 控制文件的路径和名称 – 回滚段信息 – 等等
常用的初始化参数 • 全局数据库名
– db_domain=xiangfan
db_name=xfitdb – Alter batabase rename 命令 修改数据库全局名 • 控制文件
– control_files • 数据块大小
– db_block_size=8192 • 缓冲区高速缓存(设置SGA区的缓冲区的高速缓存大小)– db_4k_cache_size • 大小为4KB的块可使用总量为8MB的高速缓存 – db_16k_cache_size • 大小为16KB的块可使用总量为8MB的高速缓存
• 共享池
– shared_pool_size=25165824
• 大型缓冲池
– large_pool_size=8388608 • SGA区最大尺寸
– Sga_max_size • 进程数
– processes=150 • 撤消表空间管理
– 决定oracel使用什么方法管理回滚数据
– undo_management=MANUL使用回滚段进行管理 – undo_management=AUTO 使用撤消表空间进行管理
– undo_tablespace 指定似乎用的撤消表空间(AUTO才用)• 许可管理
– license_max_sessions指定允许的最大并发会话数量,超过会发出警告信息 License_max_users指定允许创建的最大的用户数量
通过DBCA创建数据库
三、手工创建数据库(时间:30分钟)
1、确定数据库名db_name,并在―系统变量‖中指定‖oracle_sid=xfitdb‖ •
2、在window的注册表中增加oracle服务
– oradim –new –sid xfitdb –intpwd oracle –startmode a –pfile c:oracleora92databaseinitxfitdb.ora •
3、在window的注册表中启动oracle服务
– oradim –startup –sid xfitdb –usrpwd oracle –starttype srvc
–
此时可以在― 控制面板‖—― 管理工具‖—― 服务‖ 中查看是否启动 –
• • • •
• • • • • • • •
4、使用文本编辑器创建初始化文件 – initxfitdb.ora •
放在c:oracleora92database 目录下
只有一句话IFILE=―c:oracleadminxfitdbpfileinit.ora― •
指定初始化文件的路径和名字
– init.ora •
放在c:oracleadminxfitdbpfile 目录下
5、通过―开始/运行/sqlplusw /nolog‖打开SQL*Plus,且以下操作都在该窗口运行
6、连接到空闲进程
– conn sys/change_on_install as sysdba 7、启动实例
– startup nomount 8、创建数据库
–
先创建C:oracleoradataxfitdb 目录
CREATE DATABASE xfitdb MAXINSTANCES 1 MAXLOGHISTORY 1 MAXLOGFILES 5 MAXLOGMEMBERS 3 MAXDATAFILES 100 DATAFILE ‗C:oracleoradataxfitdbsystem01.dbf' SIZE 250M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE ‗C:oracleoradataxfitdbtemp01.dbf' SIZE 40M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED UNDO TABLESPACE “UNDOTBS1” DATAFILE ‗C:oracleoradataxfitdbundotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED CHARACTER SET ZHS16GBK NATIONAL CHARACTER SET AL16UTF16 LOGFILE GROUP 1(‗C:oracleoradataxfitdbredo01.log')SIZE 102400K, GROUP 2(‗C:oracleoradataxfitdbredo02.log')SIZE 102400K, GROUP 3(‗C:oracleoradataxfitdbredo03.log')SIZE 102400K;在以上操作完成的情况下,数据库创建成功,但还没有任何对象存在,比如数据字典视图等等 • • • • • •
• • • •
9、创建其他表空间
– CREATE TABLESPACE “USERS” LOGGING DATAFILE … 10、创建数据字典试图
– @C:oracleora92rdbmsadmincatalog.sql;11、创建PL/SQL 相关的对象
– @C:oracleora92rdbmsadmincatproc.sql;
–
等所有创建都完成一个数据库基本创建完毕。
四、启动和关闭数据库(时间:15分钟)
• • 只有拥有DBA权限或者以sysoper或sysdba身份才能连接到数据库。完整的启动数据库包含三个过程: –
启动实例
• 读取初始化参数spfileSID.ora,spfile.ora,initSID.ora • 分配SGA,并启动后台进程
• 打开alertSID.log文件和跟踪文件 –
安装数据库
• 将数据库与一个打开的实例关联,• 打开控制文件,并获得数据,及其重做日志文件名字与状态 –
打开数据库
• 打开数据库与联机重做日志文件 Oracle提供3中方式启动数据库: –
启动实例方式
–
装载数据库方式
–
打开数据库方法 •
【本讲总结】
(时间:10分钟)
1、手工创建数据库
2、使用向导工具创建数据库
3、启动/关闭数据库-1
【考核点】
1、手工创建数据库
2、使用向导工具创建数据库
3、启动/关闭数据库-1
【测试题】
无
【扩展部分】
无
【学生问题汇总】
无 【作业】
参见对应的理论作业.txt文件。
第二篇:Oracle数据库实验报告
中南林业科技大学
实验报告
课程名称:
Oracle数据库 专业班级: 姓名:
学号:
****年**月**日
实验一
安装和使用Oracle数据库
【实验目的】
1.掌握Oracle软件安装过程,选择安装组件 2.掌握建立Oracle数据库,配置网络连接 3.掌握Oracle企业管理器的基本操作 4.使用SQL*Plus,登录到实例和数据库 5.掌握命令方式的关闭和启动实例及数据库 【实验内容】
1.查看已安装的Oracle组件
2.查看服务,记录下和数据库有关的服务名,将他们设为手动方式,启动相关服务。
3.配置监听器,查看是否在服务中有LISTENER,是否能启动。4.配置本地net服务,提示:设置正确的服务器地址和端口号。5.打开SQL*Plus,用SYS和SYSTEM用户名和密码登录。6.思考题:有几种打开SQL*Plus的方法?分别是什么? 7.用命令关闭实例和数据库,记录命令
8.用命令以NOMOUNT的方式启动实例,再加载数据库,打开数据库。
【实验结论】
1.查看已安装的Oracle组件
2.查看服务,记录下和数据库有关的服务名,将他们设为手动方式,启动相关服务。
3.配置监听器,查看是否在服务中有LISTENER,是否能启动。
4.配置本地net服务,提示:设置正确的服务器地址和端口号。
5.打开SQL*Plus,用SYS和SYSTEM用户名和密码登录。
6.思考题:有几种打开SQL*Plus的方法?分别是什么?(1)直接打开 sql plus 即窗口方式(2)cmd 命令行方式
(3)WEB 页面中 iSQL*Plus 方式 7.用命令关闭实例和数据库,记录命令 SQL>shutdown immediate
8.用命令以NOMOUNT的方式启动实例,再加载数据库,打开数据库。
sql>startup nomount sql>alter database mount;sql>alter database open;sql>startup
(1).用SQLplus 命令:show parameters参数名
(2).用select [列名] from 表名
2.初始化文件有几种?默认的保存位置在哪里?
初始化文件有三种:数据文件,日志文件,控制文件; 默认的保存位置E:oracleproduct10.2.0oradataorcl
4.打开OEM,查看三类物理文件信息
三类物理文件:数据文件、控制文件、日志文件 数据文件:.DBF存储表、索引及数据结构信息
日志文件:.LOG记录对数据库的所有修改信息,用于恢复
控制文件:.CTL二进制文件,记录数据库名、文件标识、检查点
5.分别用select命令查询V$parameter动态性能视图,用show命令查看全局数据库名、实例名、是否启动自动归档、标准数据块大小这四个参数的值,记录命令和结果。用select命令查询V$parameter动态性能视图
用show命令查看全局数据库名、实例名
用show命令查看是否启动自动归档、标准数据块大小
6.如何用命令查看数据文件、控制文件的文件名、存储位置和状态信息?
(1).查看数据文件的文件名、存储位置和状态信息
(2).查看控制文件的文件名、存储位置和状态信息
0
和服务器型文件都要找到),查看各类默认位置并记录下来(包括物理文件所在目录,该数据库相关的各个目录等),登录到mydb数据库。
2.用命令方式手工创建数据库testorcl
(1)创建批处理文件,建立必需的各级目录,参考第一题MYDB数据库的默认目录。
(4)运行数据库建立脚本,更改相关服务为手动启动方式
(5)运行数据字典等创建脚本
3.在DBCA中删除MYDB数据库。
Enter valuefor 4:runner Specify log path as parameter 5: Enter valuefor 5: D:oracleproduct10.2.0db_2RDBMSlog
二、完成下面的查询,记录查询命令和结果。1.查询HR方案种有哪些表,列出表名 2.设置行宽为160,每页行数为40 3.查询employees表中所有薪水在3000到6000元之间的员工编号、姓、名、受聘日期、工作代号、薪水、经理代号、部门号,按部门号升序排列,同一部门按员工编号降序排列
4.查询每个部门的人数、平均薪水、最高薪水、最低薪水,按部门编号升序排列
5.查询first_name的第三个字母是t的员工编号,first_name,电话号码,部门编号,部门名称
6.在job_history表中查询任职时间超过1年的员工编号,任职历时月份(保留整数),工作代号,部门代号。
7.查询每个部门经理的员工编号、姓名、薪水、部门号。
【实验结论】
一、需要访问HR示例方案中的表,如果机器上没有该示例方案,则运行相关包和相应配置装入HR方案。
1.将hr.rar解压到D:oracleproduct10.2.0db_2demoschema human_resources目录下,然后在SQL*PLUS 中执行 hr_main.sql
二、完成下面的查询,记录查询命令和结果。1.查询HR方案种有哪些表,列出表名
5.查询first_name的第三个字母是t的员工编号,first_name,电话号码,部门编号,部门名称
738
实验五
PL/SQL编程
【实验目的】
1.熟悉PL/SQL的数据类型和书写规则 2.熟悉控制结构和游标的使用 3.编写和运行函数、过程和触发器 【实验内容】
编写脚本文件,调试运行脚本文件,并记录结果。
1.在SQL*Plus中编写一个PL/SQL块,功能用于打印学生信息 在DECLARE部分完成:
(2)建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型(3)编写本地子过程:学生信息打印过程PrintStuRecord,把(1)中定义的记录类型作为参数(4)定义学生信息记录变量stu_record 在BEGIN…END部分完成:
(1)为stu_record变量的各个元素赋值如下: 学号:‘2001001’ 姓名:’李新’
性别:‘m’
籍贯:‘黑龙江省哈尔滨市’ 学习成绩:‘Excellent’
0
(1)建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型
set serveroutput on declare type stu_record_type is record
(s_no varchar2(8), s_name varchar2(10), s_sex varchar2(2), s_address varchar2(20), s_studyscore varchar2(10), s_activescore varchar2(10));(2)编写本地子过程:学生信息打印过程PrintStuRecord,把中定义的记录类型作为参数
procedure PrintStuRecord as begin dbms_output.put_line('学号:'|| stu_record.s_no);dbms_output.put_line('姓名 :'|| stu_record.s_name);dbms_output.put_line('性别:'|| stu_record.s_sex);dbms_output.put_line('籍贯:'|| stu_record.s_address);dbms_output.put_line('学习成绩:'|| stu_record.s_studyscore);dbms_output.put_line('活动成绩:'|| stu_record.s_activescore);end PrintStuRecord;(3)定义学生信息记录变量stu_record stu_record stu_record_type;在BEGIN…END部分完成:
(4)为stu_record变量的各个元素赋值如下: 学号:‘2001001’ 姓名:’李新’
性别:‘m’
籍贯:‘黑龙江省哈尔滨市’
2.建立对bookinfo表的DML触发器,一旦bookinfo表发生了任何变化,立即触发,对bookinfo表的数据进行统计,结果存储在数据统计表中
(1)如果没有则建立bookinfo表,选择建立在scott用户下,表结构为(bookno varchar2(36)Primary key, bookname varchar2(40)not null, authorname varchar2(10)not null, publishtime date, bookprice float)
create table bookinfo(bookno varchar2(36)Primary key,4
Selectcount(bookno),count(distinct authorname)from bookinfo;end;/
(4)在bookinfo表中插入、删除和更新信息,再查看major_stats表中数据的变化 <1>插入
647
实验六
模式对象管理与安全管理
【实验目的】
1.了解模式对象的类型
2.掌握在OEM中操作模式对象的方法
3.掌握命令方式建立表、视图、索引等常见对象的方法 4.熟悉Oracle中权限分类和设置,理解系统提供用户的角色和权限
5.熟练使用建立用户、角色,为用户授权、授予角色的命令
【实验内容】
1.创建一个TESTUSET用户,密码为test,默认表空间为user表空间
2.创建用户后为其授予登录数据库和创建数据库对象的权限 3.用TESTUSER用户登录数据库
4.创建学生信息表(学号,姓名,性别,入学成绩),定义主键和输入数据(至少5条数据),提交添加的数据。并完成下面的题目:
(1)再继续添加2条数据,设置一个保存点savepoint,再添加1条数据,执行回退到保存点的回退命令。查看此时表中数据(2)查询入学成绩大于480的学生信息(3)建立男生信息视图
(4)在“成绩”字段上建立B-树索引
5.创建一个表簇,名为empl_dep,容纳empl表和dep表,有公
第三篇:ORACLE数据库工作总结
2014-2015学第一学期ORACLE教学工作总结
班级:13高软班
数据库技术是计算机科学技术中发展最快的领域之一,也是应用最为广泛的技术之一,它已经成为计算机信息系统与应用的核心技术和重要基础。所以在学习这门课时,注重学生实际操作能力,安排了理论与上机操作相结合。以下是我的工作总结:
1、课前准备:备好课。认真学习贯彻教学大纲,钻研教材。了解教材的基本思想、基本概念、结构、重点与难点,掌握知识的逻辑。
了解学生原有的知识技能的质量,他们的兴趣、需要、方法、习惯,学习新知识可能会有哪些困难,采取相应的措施。
考虑教法,解决如何把已掌握的教材传授给学生,包括如何组织教学、如何安排每节课的活动。
2、课堂上的情况。组织好课堂教学,关注全体学生,注意信息反馈,调动学生的注意力,使其保持相对稳定性。同时,激发学生的情感,使他们产生愉悦的心境,创造良好的课堂气氛,课堂语言简洁明了,课堂提问面向全体学生,注意引发学生学习的兴趣,课堂上讲练结合,布置好课外作业,减轻学生的负担。
3、上机操作情况。让学生复习操作上节课的学习内容,布置一定的作业,做到每个学生的每个SQL语句,每个操作抖完全掌握。总之,作为一名教师,教学是我的基本工作,而教与学是一个良性互动的过程,在教中学,在学中教,才能实现自己在业务上的进步与飞跃。实施素质教育对教师的素质要求更高,在今后的教育教学中,我将严格要求自己,努力工作,发扬优点,开拓进取,为教育事业奉献自己的力量。
第四篇:Oracle 11g图形界面创建数据库实例
Oracle 11g图形界面创建数据库实例
注:以oracle11g为例,在windowsXP操作系统测试通过。
Step1创建数据库实例: 进入开始->所有程序->Oracle-OraDB11g_home1->配置和移植工具->Database Configuration Assistant
进入后如图所示:
点击下一步
默认选项创建数据库,点击下一步:
默认一般事务和用途,点击下一步:
输入数据库名和sid,以sinosoft为例,(注:如果提示没有创建监听器,请在开始->所
有程序->Oracle-OraDB11g_home1->配置和移植工具->Net Configuration Assistant进行配置,这里就不一一熬述了)点击下一步:
默认选项,点击下一步:
为不同账户设置不同的口令,我们选择所有账户使用统一管理口令:sinosoft,点击下一步:
点击下一步:
点击下一步:
点击下一步:
点击下一步:
点击字符集,设置数据库字符集为GBk还是UTF-8,点击下一步:
点击下一步:
点击下一步:
点击下一步:
点击完成:
点击确定:
正在启动并创建oracle实例:
记录下URL: https://PC-Zheng:5500/em,因为我们等下要用它登陆控制台创建表空间;点击退出完成数据库实例创建。
Step2 创建表空间
在IE中打开https://PC-Zheng:5500/em(如果显示无法找到网站,请在控制面板—管理工具—服务中启动OracleDBConsolet 服务)
出现登陆窗口,我们用sys登陆,密码是我们之前设置的口令:sinosoft,连接身份选sysdab,点击登录:
登录进去后点击“服务器”,点击表空间来创建表空间:
点击创建:
输入名称:sinosoft_tablespace 点击右下脚添加数据文件
输入文件名:sinosoft_file,选择文件大小(不能超过4GB,windows系统文件最大限制为4GB),填入自动扩展增量,点击右下脚继续,然后再点击确定:
这时我们的表空间就创建好了
Step3 创建角色
如图所示,在服务器—安全性下点击角色
点击创建:
输入我们角色的名称以及口令,这个名称和口令将会在pl/sql连接时所用,选择默认表空间,选择完后点击角色:
点击编辑列表:
将CONNECT DBA RESOURCE unlimited加入到角色当中,点击确定,再点击应用,角色创建完成。
Step4 配置tnsnames.ora 在oracleproduct11.1.0db_1NETWORKADMIN路径下找到tnsnames.ora,(如果没有请新建一个并在头部加入:# tnsnames.ora Network Configuration File: ‘填入你tnsnames.ora文件所在的绝对路径,如:E:oracleproduct10.2.0db_1networkadmintnsnames.ora’ # Generated by Oracle configuration tools.)用UE打开,加入字符串: sinosoft =
(DESCRIPTION =
(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.5.31)(PORT = 1521))
(CONNECT_DATA =
(SID = sinosoft)
(SERVICE_NAME = sinosoft)))保存,打开PL/SQL:
用户名口令为创建角色时所建的用户名密码,数据库位创建的sinosoft数据库实例,连接选为SYSDBA即可登录
Step5 导入dmp文件
以将lloyds_new_arch.dmp导入sinosoft数据库为例,在登录PL/SQL后,授权yltest,具体命令为(请在之前进入控制台创建临时表空间): create user yltest identified by yltest default tablespace SINOSOFT_TABLESPACE2 temporary tablespace sinosoft_temp profile DEFAULT;--Grant/Revoke role privileges grant connect to yltest;grant dba to yltest;grant resource to yltest;--Grant/Revoke system privileges grant create any table to yltest;grant create procedure to yltest;grant create session to yltest;grant debug connect session to yltest;grant select any table to yltest;grant unlimited tablespace to yltest;执行完毕后,运行dos窗口,开始—运行—cmd,假设dmp文件路径为:D:dmplloyds_new_arch.dmp 将命令: imp yltest/yltest@sinosoft file=D:dmplloyds_new_arch.dmp log=yltest full=y ignore=y 粘贴于命令行中
回车即可导入dmp文件到sinosoft库中。至此数据库完全建立成功
附SQL命令创建相关操作:
--建立表空间
create tablespace SINOSOFT_TABLESPACE logging datafile 'E:ORACLEORADATADB11GLLOYDS_TEST_DF.dbf' size 4096m autoextend on next 512m extent management local;
--建立临时表空间
create temporary
tablespace
SINOSOFT_TEMP
tempfile 'E:ORACLEORADATADB11GLLOYDS_TEST_TMP_DF.dbf' size 512m autoextend on next 50m extent management local;
--建立用户
Create the user create user yltest identified by sinosoft_test default tablespace SINOSOFT_TABLESPACE temporary tablespace SINOSOFT_TEMP;
Grant/Revoke role privileges grant connect to yltest;grant dba to yltest;grant resource to yltest;--Grant/Revoke system privileges grant unlimited tablespace to yltest;
--dmp导入
imp yltest/yltest@sinosoft file=D:dmplloyds_new_arch.dmp log=yltest full=y ignore=y
////////////////////////////////// Oracle 11g 常用命令!表空间命令 2009年05月20日 星期三 14:37 1.查看oracle数据有多少表空间
SELECT COUNT(*)FROM DBA_DATA_FILES;SELECT FILE_NAME,TABLESPACE_NAME,BYTES,USER_BLOCKS FROM DBA_DATA_FILES;SELECT TABLESPACE_NAME FROM DBA_DATA_FILES;
2.删除表空间
drop tablespace opencmstest including contents;
3.创建表空间
#----------------------创建临时表空间
create temporary tablespace tmp_jportal
tempfile '/u01/app/oracle/database/tmp_jportal.dbf' Size 32m autoextend on extent management local;
#----------------------创建表空间
create tablespace jportal logging
datafile '/u01/app/oracle/database/jportal.dbf' Size 32m autoextend on extent management local;
#----------------------创建用户
create user jboss identified by jboss default tablespace jportal
temporary tablespace tmp_jportal;
#----------------------授权给用户
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATE SESSION TO jboss
第五篇:Oracle数据库 知识点总结
1.constraint约束:
alter table [table_name] add constraint [pk_name] primary key(pkname);//添加主键
alter table [table_name] drop constraint [pk_name];//删除主键
alter table [table_name] add constraint [fk_name] foreign key(fkname)references [tablename](fkname);//添加外
键
alter table [table_name] drop constraint [fk_name];//删除外键
2.union 关键字:
A username, B username
rod
bruce
rose
marina
select username from A
union
select username from B
2、几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当
ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来 自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随
EXCEPT 一起使用时(EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随
INTERSECT 一起使用时(INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
3.复合主键一般不设外键
4.组函数也称为聚合函数。
例如:我们把学生可以分为男生和女生两个组,如果想求每组的人数,平均身高,平均年龄等,就需要用到分组函数了。
在SQL中常用的组函数有以下几个:
COUNT():求出全部的记录数
MAX():求出一组中的最大值
MIN():求出一组中的最小值
AVG():求出一组中的平均值
SUM():求和
范例:COUNT()函数
SELECT COUNT(empno)FROM emp;
我们常用COUNT(*),最好能够用字段代替*
范例:MAX()、MIN()函数,求最大最小值,一般是针对于数值的字段的,求出所有员工的的最高工资,和最底工资和平均工
资。
SELECT MAX(sal)最高工资,MIN(sal)最底工资,AVG(sal)平均工资 FROM emp;
范例:求出部门10的所有员工工资的总合
SELECT SUM(sal)工资综合 FROM emp WHERE deptno=10;
如果如下查询输出部门编号和其部门所有员工的工资总和,会产生错误。
SELECT deptno ,SUM(sal)工资综合 FROM emp WHERE deptno=10;
错误: “不是单组分组函数”
发生以上的错误信息,是因为这样的查询需要进行分组统计。
分组统计有其固定的语法格式:
SELECT {DISTINCT} *| 查询列 列别名1,查询列2 列别名2,……
FROM 表名称1 表别名1,表名称2 表别名2,……
{WHERE 条件(s)}
{ORDER BY 排序的字段1,排序的字段2 ASC|DESC}
{GROUP BY 分组字段}
所以老师写的是错的!
5.//从t_student表中删除名字重复的记录的信息
delete from t_student where sid not in(select sid from(select min(sid)sid,sname from t_student group by sname));
// delete from tablename where id not in(select max(id)from tablename group by col1,col2,...)
6.sequence
在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。
(1)
CREATE SEQUENCE seqTest
INCREMENT BY 1--每次加几个
START WITH 1--从1开始计数
NOMAXvalue--不设置最大值
NOCYCLE--一直累加,不循环
CACHE 10;--设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为----NOCACHE(2)
定义好sequence后,你就可以用currVal,nextVal取得值。
CurrVal:返回 sequence的当前值
NextVal:增加sequence的值,然后返回 增加后sequence值
eg:
SELECT Sequence名称.CurrVal FROM DUAL;
select seqtest.currval from dual(3)
在Sql语句中可以使用sequence的地方:
-不包含子查询、snapshot、VIEW的 SELECT 语句
-INSERT语句的子查询中
-INSERT语句的values中
-UPDATE 的 SET中
如在插入语句中
insert into 表名(id,name)values(seqtest.Nextval,'sequence 插入测试');
7.范式:
所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一
列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分
为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式
就是无重复的域。
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。
第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作
为实体的唯一标识。第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一
部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一
对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。例如在员工表中的身份证号码即可实现每个一员工的区分,该身份证号码即为候选键,任何
一个候选键都可以被选作主键。在找不到候选键时,可额外增加属性以实现区分,如果在员工关系中,没有对其身份证号
进行存储,而姓名可能会在数据库运行的某个时间重复,无法区分出实体时,设计辟如ID等不重复的编号以实现区分,被
添加的编号或ID选作主键。
第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门
有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简
介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有
大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传
递依赖于主属性。