2023年6月21日发(作者:)

oracle⾯试Oracle:全局数据库orcl1.登陆超级管理员⽤户:system⽤户(dba)2.创建表空间–创建表空间create tablespace itheimadatafile ‘c:’–设置表空间存储位置size 100m --设置表空间的⼤⼩autoextend on --设置为⾃动扩展next 10m;–删除表空间drop tablespace itheima;3.创建⽤户–创建⽤户create user itheima --创建⼀个itheima的⽤户identified by itheima --给当前设置密码为itheimadefault tablespace itheima;–当前⽤户出⽣地4.给⽤户授权–给⽤户授权–oracle数据库中常⽤⾓⾊connect–连接⾓⾊,基本⾓⾊resource–开发者⾓⾊dba–超级管理员⾓⾊–给itheima⽤户授予dba⾓⾊grant dba to itheima;5.常⽤的数据类型r varchar2 字符串类型(n,m) n代指总长度,m代指⼩数点的位数 带有时间戳6.创建表的命令:操作表的基本单位是⽤户⽽不是数据库(mysql是数据库)create table person( id number(10),pname varchar2(20) );7.表结构的修改—修改表结构—添加⼀列alter table person add (gender number(1));—修改列类型alter table person modify gender char(1);—修改列名称alter table person rename column gender to sex;—删除⼀列alter table person drop column sex;8.标准的SQL语句–删除delete from 表名 where 条件–修改update 表明 set 字段名1=字段值1,字段名2=字段值2…where 条件–插⼊–部分插insert into 表名(字段1,字段2…)values(字段1的值,字段2的值…)–全插insert into 表名 values(对应表中字段顺序的字段值);–查询select * from 表名 where 条件 (排序 分组)单表查询多表的查询⼦查询虚表9.序列----序列不真的属于任何⼀张表,但是可以逻辑和表做绑定。----序列:默认从1开始,依次递增,主要⽤来给主键赋值使⽤。----dual:虚表,只是为了补全语法,没有任何意义。create sequence s_person;select s_l from dual;nextval:查询序列的下⼀个值currval:查询序列当前的值⽤户,密码默认是tiger----scott⽤户,密码tiger。–解锁scott⽤户alter user scott account unlock;–解锁scott⽤户的密码【此句也可以⽤来重置密码】alter user scott identified by tiger;–切换到scott⽤户下11.函数nvl(v1,v2):当v1为null时使⽤v2数据,如果v1不为null则继续使⽤v1数据nvl2(x,v1,v2):当x为空时,返回v2,⾮空时返回v112.分组函数where :select 查询条件having:group by分组条件having永远不可能在where之前13.分页rownum—rownum⾏号:当我们做select操作的时候,–每查询出⼀⾏记录,就会在该⾏上加上⼀个⾏号,–⾏号从1开始,依次递增,不能跳着⾛。----emp表⼯资倒叙排列后,每页五条记录,查询第⼆页。----rownum⾏号不能写上⼤于⼀个正数。select * from( select rownum rn, tt.* from( select * from emp order by sal desc ) tt where rownum<11) where rn>5–count:5–pageNum:1 1-5 2 6-10 3 11-15–(pageNum-1)count+1–pageNumcount解决监听器启动失败问题:cmd的命令⾏窗⼝下,输⼊lsnrctl start,回车即启动监听。再输⼊sqlplus /nolog,回车再输⼊ conn / as sysdba;回车再输⼊startup,回车.这步是启动oracle服务。再登录⼀下oracle就可以解决中⽂乱码问题:中⽂乱码问题解决1.查看服务器端编码select userenv(‘language’) from dual;我实际查到的结果为:AMERICAN_16GBK2.执⾏语句 select * from V$NLS_PARAMETERS查看第⼀⾏中PARAMETER项中为NLS_LANGUAGE 对应的VALUE项中是否和第⼀步得到的值⼀样。如果不是,需要设置环境变量.否则PLSQL客户端使⽤的编码和服务器端编码不⼀致,插⼊中⽂时就会出现乱码.3.设置环境变量计算机->属性->⾼级系统设置->环境变量->新建设置变量名:NLS_LANG,变量值:第1步查到的值, 我的是 AMERICAN_16GBK4.重新启动PLSQL,插⼊数据正常⼯程中使⽤Oracle1.添加坐标ojdbc14是oracle10g注意:远程仓库下载坐标失败,需要导⼊第三⽅架包到本地仓库放在盘符下⽐如D:⾸先进⼊当前盘符/执⾏以下命令:mvn install:install-file -DgroupId= -DartifactId=ojdbc14 -Dversion=1.10 -Dfile= -Dpackaging=jar2.打开idea中setting设置,更新本地仓库ties⽂件的配置=Driver远程ip 端⼝号:全局数据库名称=jdbc:oracle:thin@192.168.181.128:1521:me==itheima1.存储过程和函数存储过程重在处理数据,函数可以返回值。(1)存储过程是procedure⽤户定义的⼀系列sql语句的集合,涉及特定表或其他对象的任务,⽤户可以调⽤存储过程。(2)函数通常是数据库已定义的⽅法,它接收参数并返回某种类型的值并且不涉及特定⽤户表。(3)可以理解函数是存储过程的⼀种,都是预编译的(块语句每次运⾏都会编译 存储过程块 ⼀次编译多次运⾏ 效率更⾼)plsql块语句:BeginEnd存储过程块Create procedure prg_add()AsBeginEnd;(4)函数可以没有参数,但是⼀定要有⼀个返回值,存储过程可以没有参数,不需要返回值。(5)函数return返回值没有返回参数模式,存储过程通过out参数返回值,如果需要返回多个参数则建议使⽤存储过程(函数oracle 在函数可以使⽤in和out mysql不能使⽤out)(6)在sql数据操纵(DML)语句中只能调⽤函数⽽不能调⽤存储过程2.存储过程的概念,优点(或特点),写⼀个简单的存储过程存储过程:是⼀组为了完成特定功能的SQL语句集,利⽤SQL Server所提供的T-SQL语⾔所编写的程序,经编译后存储在数据库中。优点:(1)执⾏速度快,存储过程只在创建时进⾏编译,以后每次执⾏不需要再重新编译,⼀般sql语句每执⾏⼀次就编译⼀次(2)存储过程可重复使⽤(3)安全性⾼(可设定只有某些⽤户才具有对指定存储过程的使⽤权)(4)当对数据库进⾏复杂操作时,可完成复杂的判断和⽐较复杂的运算,可⽤存储过程封装起来(5)易于维护和集中控制,当企业规则变化时在服务器中改变存储过程即可。⽆需修改 应⽤程序。简单的存储过程:create proc select_query @year intasselect * from tmp where year=@year3.触发器(1)触发器:触发器可以看成是⼀个特殊的存储过程,存储过程是要显⽰调⽤去完成,⽽触发器可以⾃动完成。⽐如:当数据库中的表发⽣增删改操作时,对应的触发器就可以执⾏对应的PL/SQL语句块(2)作⽤:维护表的完整性,记录表的修改来审计表的相关信息分为:DML触发器:当数据库服务器中发⽣数据操作语⾔事件时执⾏的存储过程,分为:After触发器和instead of触发器DDL触发器:特殊的触发器,在响应数据定义语⾔(DDL)语句时触发,⼀般⽤于数据库中执⾏管理任务。DDL触发器是响应create、after、或drop开头的语句⽽激活触发器⽤处还是很多的,⽐如校内⽹、开⼼⽹、Facebook,你发⼀个⽇志,⾃动通知好友,其实就是在增加⽇志时做⼀个后触发,再向通知表中写⼊条⽬。因为触发器效率⾼4.触发器和存储过程的优缺点(⼀)缺点:1、可移植性是存储过程和触发器最⼤的缺点。2、占⽤服务器端太多的资源,对服务器造成很⼤的压⼒3、不能做DDL。4、触发器排错困难,⽽且数据容易造成不⼀致,后期维护不⽅便。优点:1、预编译,已优化,效率较⾼。避免了SQL语句在⽹络传输然后再解释的低效率。2、存储过程可以重复使⽤,减少开发⼈员的⼯作量。3、业务逻辑封装性好,修改⽅便。4、安全。不会有SQL语句注⼊问题存在。(⼆)优点:1.由于应⽤程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProcedure为封装此代码提供了⼀个替换位置。2.执⾏计划(存储过程在⾸次运⾏时将被编译,这将产⽣⼀个执⾏计划-- 实际上是 Microsoft SQL Server为在存储过程中获取由 T-SQL 指定的结果⽽必须采取的步骤的记录。)缓存改善性能。…但sql server新版本,执⾏计划已针对所有 T-SQL 批处理进⾏了缓存,⽽不管它们是否在存储过程中,所以没⽐较优势了。3.存储过程可以⽤于降低⽹络流量,存储过程代码直接存储于数据库中,所以不会产⽣⼤量T-sql语句的代码流量。4.使⽤存储过程使您能够增强对执⾏计划的重复使⽤,由此可以通过使⽤远程过程调⽤ (RPC) 处理服务器上的存储过程⽽提⾼性能。RPC封装参数和调⽤服务器端过程的⽅式使引擎能够轻松地找到匹配的执⾏计划,并只需插⼊更新的参数值。5.可维护性⾼,更新存储过程通常⽐更改、测试以及重新部署程序集需要较少的时间和精⼒。6.代码精简⼀致,⼀个存储过程可以⽤于应⽤程序代码的不同位置。7.更好的版本控制,通过使⽤ Microsoft Visual SourceSafe 或某个其他源代码控制⼯具,您可以轻松地恢复到或引⽤旧版本的存储过程。8.增强安全性:a、通过向⽤户授予对存储过程(⽽不是基于表)的访问权限,它们可以提供对特定数据的访问;b、提⾼代码安全,防⽌ SQL注⼊(但未彻底解决,例如,将数据操作语⾔--DML,附加到输⼊参数);c、SqlParameter 类指定存储过程参数的数据类型,作为深层次防御性策略的⼀部分,可以验证⽤户提供的值类型(但也不是万⽆⼀失,还是应该传递⾄数据库前得到附加验证)。缺点:1.如果更改范围⼤到需要对输⼊存储过程的参数进⾏更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新GetValue() 调⽤,等等,这时候估计⽐较繁琐了。2.可移植性差由于存储过程将应⽤程序绑定到 SQL Server,因此使⽤存储过程封装业务逻辑将限制应⽤程序的可移植性。如果应⽤程序的可移植性在您的环境中⾮常重要,则将业务逻辑封装在不特定于 RDBMS 的中间层中可能是⼀个更佳的选择。

2023年6月21日发(作者:)

oracle⾯试Oracle:全局数据库orcl1.登陆超级管理员⽤户:system⽤户(dba)2.创建表空间–创建表空间create tablespace itheimadatafile ‘c:’–设置表空间存储位置size 100m --设置表空间的⼤⼩autoextend on --设置为⾃动扩展next 10m;–删除表空间drop tablespace itheima;3.创建⽤户–创建⽤户create user itheima --创建⼀个itheima的⽤户identified by itheima --给当前设置密码为itheimadefault tablespace itheima;–当前⽤户出⽣地4.给⽤户授权–给⽤户授权–oracle数据库中常⽤⾓⾊connect–连接⾓⾊,基本⾓⾊resource–开发者⾓⾊dba–超级管理员⾓⾊–给itheima⽤户授予dba⾓⾊grant dba to itheima;5.常⽤的数据类型r varchar2 字符串类型(n,m) n代指总长度,m代指⼩数点的位数 带有时间戳6.创建表的命令:操作表的基本单位是⽤户⽽不是数据库(mysql是数据库)create table person( id number(10),pname varchar2(20) );7.表结构的修改—修改表结构—添加⼀列alter table person add (gender number(1));—修改列类型alter table person modify gender char(1);—修改列名称alter table person rename column gender to sex;—删除⼀列alter table person drop column sex;8.标准的SQL语句–删除delete from 表名 where 条件–修改update 表明 set 字段名1=字段值1,字段名2=字段值2…where 条件–插⼊–部分插insert into 表名(字段1,字段2…)values(字段1的值,字段2的值…)–全插insert into 表名 values(对应表中字段顺序的字段值);–查询select * from 表名 where 条件 (排序 分组)单表查询多表的查询⼦查询虚表9.序列----序列不真的属于任何⼀张表,但是可以逻辑和表做绑定。----序列:默认从1开始,依次递增,主要⽤来给主键赋值使⽤。----dual:虚表,只是为了补全语法,没有任何意义。create sequence s_person;select s_l from dual;nextval:查询序列的下⼀个值currval:查询序列当前的值⽤户,密码默认是tiger----scott⽤户,密码tiger。–解锁scott⽤户alter user scott account unlock;–解锁scott⽤户的密码【此句也可以⽤来重置密码】alter user scott identified by tiger;–切换到scott⽤户下11.函数nvl(v1,v2):当v1为null时使⽤v2数据,如果v1不为null则继续使⽤v1数据nvl2(x,v1,v2):当x为空时,返回v2,⾮空时返回v112.分组函数where :select 查询条件having:group by分组条件having永远不可能在where之前13.分页rownum—rownum⾏号:当我们做select操作的时候,–每查询出⼀⾏记录,就会在该⾏上加上⼀个⾏号,–⾏号从1开始,依次递增,不能跳着⾛。----emp表⼯资倒叙排列后,每页五条记录,查询第⼆页。----rownum⾏号不能写上⼤于⼀个正数。select * from( select rownum rn, tt.* from( select * from emp order by sal desc ) tt where rownum<11) where rn>5–count:5–pageNum:1 1-5 2 6-10 3 11-15–(pageNum-1)count+1–pageNumcount解决监听器启动失败问题:cmd的命令⾏窗⼝下,输⼊lsnrctl start,回车即启动监听。再输⼊sqlplus /nolog,回车再输⼊ conn / as sysdba;回车再输⼊startup,回车.这步是启动oracle服务。再登录⼀下oracle就可以解决中⽂乱码问题:中⽂乱码问题解决1.查看服务器端编码select userenv(‘language’) from dual;我实际查到的结果为:AMERICAN_16GBK2.执⾏语句 select * from V$NLS_PARAMETERS查看第⼀⾏中PARAMETER项中为NLS_LANGUAGE 对应的VALUE项中是否和第⼀步得到的值⼀样。如果不是,需要设置环境变量.否则PLSQL客户端使⽤的编码和服务器端编码不⼀致,插⼊中⽂时就会出现乱码.3.设置环境变量计算机->属性->⾼级系统设置->环境变量->新建设置变量名:NLS_LANG,变量值:第1步查到的值, 我的是 AMERICAN_16GBK4.重新启动PLSQL,插⼊数据正常⼯程中使⽤Oracle1.添加坐标ojdbc14是oracle10g注意:远程仓库下载坐标失败,需要导⼊第三⽅架包到本地仓库放在盘符下⽐如D:⾸先进⼊当前盘符/执⾏以下命令:mvn install:install-file -DgroupId= -DartifactId=ojdbc14 -Dversion=1.10 -Dfile= -Dpackaging=jar2.打开idea中setting设置,更新本地仓库ties⽂件的配置=Driver远程ip 端⼝号:全局数据库名称=jdbc:oracle:thin@192.168.181.128:1521:me==itheima1.存储过程和函数存储过程重在处理数据,函数可以返回值。(1)存储过程是procedure⽤户定义的⼀系列sql语句的集合,涉及特定表或其他对象的任务,⽤户可以调⽤存储过程。(2)函数通常是数据库已定义的⽅法,它接收参数并返回某种类型的值并且不涉及特定⽤户表。(3)可以理解函数是存储过程的⼀种,都是预编译的(块语句每次运⾏都会编译 存储过程块 ⼀次编译多次运⾏ 效率更⾼)plsql块语句:BeginEnd存储过程块Create procedure prg_add()AsBeginEnd;(4)函数可以没有参数,但是⼀定要有⼀个返回值,存储过程可以没有参数,不需要返回值。(5)函数return返回值没有返回参数模式,存储过程通过out参数返回值,如果需要返回多个参数则建议使⽤存储过程(函数oracle 在函数可以使⽤in和out mysql不能使⽤out)(6)在sql数据操纵(DML)语句中只能调⽤函数⽽不能调⽤存储过程2.存储过程的概念,优点(或特点),写⼀个简单的存储过程存储过程:是⼀组为了完成特定功能的SQL语句集,利⽤SQL Server所提供的T-SQL语⾔所编写的程序,经编译后存储在数据库中。优点:(1)执⾏速度快,存储过程只在创建时进⾏编译,以后每次执⾏不需要再重新编译,⼀般sql语句每执⾏⼀次就编译⼀次(2)存储过程可重复使⽤(3)安全性⾼(可设定只有某些⽤户才具有对指定存储过程的使⽤权)(4)当对数据库进⾏复杂操作时,可完成复杂的判断和⽐较复杂的运算,可⽤存储过程封装起来(5)易于维护和集中控制,当企业规则变化时在服务器中改变存储过程即可。⽆需修改 应⽤程序。简单的存储过程:create proc select_query @year intasselect * from tmp where year=@year3.触发器(1)触发器:触发器可以看成是⼀个特殊的存储过程,存储过程是要显⽰调⽤去完成,⽽触发器可以⾃动完成。⽐如:当数据库中的表发⽣增删改操作时,对应的触发器就可以执⾏对应的PL/SQL语句块(2)作⽤:维护表的完整性,记录表的修改来审计表的相关信息分为:DML触发器:当数据库服务器中发⽣数据操作语⾔事件时执⾏的存储过程,分为:After触发器和instead of触发器DDL触发器:特殊的触发器,在响应数据定义语⾔(DDL)语句时触发,⼀般⽤于数据库中执⾏管理任务。DDL触发器是响应create、after、或drop开头的语句⽽激活触发器⽤处还是很多的,⽐如校内⽹、开⼼⽹、Facebook,你发⼀个⽇志,⾃动通知好友,其实就是在增加⽇志时做⼀个后触发,再向通知表中写⼊条⽬。因为触发器效率⾼4.触发器和存储过程的优缺点(⼀)缺点:1、可移植性是存储过程和触发器最⼤的缺点。2、占⽤服务器端太多的资源,对服务器造成很⼤的压⼒3、不能做DDL。4、触发器排错困难,⽽且数据容易造成不⼀致,后期维护不⽅便。优点:1、预编译,已优化,效率较⾼。避免了SQL语句在⽹络传输然后再解释的低效率。2、存储过程可以重复使⽤,减少开发⼈员的⼯作量。3、业务逻辑封装性好,修改⽅便。4、安全。不会有SQL语句注⼊问题存在。(⼆)优点:1.由于应⽤程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProcedure为封装此代码提供了⼀个替换位置。2.执⾏计划(存储过程在⾸次运⾏时将被编译,这将产⽣⼀个执⾏计划-- 实际上是 Microsoft SQL Server为在存储过程中获取由 T-SQL 指定的结果⽽必须采取的步骤的记录。)缓存改善性能。…但sql server新版本,执⾏计划已针对所有 T-SQL 批处理进⾏了缓存,⽽不管它们是否在存储过程中,所以没⽐较优势了。3.存储过程可以⽤于降低⽹络流量,存储过程代码直接存储于数据库中,所以不会产⽣⼤量T-sql语句的代码流量。4.使⽤存储过程使您能够增强对执⾏计划的重复使⽤,由此可以通过使⽤远程过程调⽤ (RPC) 处理服务器上的存储过程⽽提⾼性能。RPC封装参数和调⽤服务器端过程的⽅式使引擎能够轻松地找到匹配的执⾏计划,并只需插⼊更新的参数值。5.可维护性⾼,更新存储过程通常⽐更改、测试以及重新部署程序集需要较少的时间和精⼒。6.代码精简⼀致,⼀个存储过程可以⽤于应⽤程序代码的不同位置。7.更好的版本控制,通过使⽤ Microsoft Visual SourceSafe 或某个其他源代码控制⼯具,您可以轻松地恢复到或引⽤旧版本的存储过程。8.增强安全性:a、通过向⽤户授予对存储过程(⽽不是基于表)的访问权限,它们可以提供对特定数据的访问;b、提⾼代码安全,防⽌ SQL注⼊(但未彻底解决,例如,将数据操作语⾔--DML,附加到输⼊参数);c、SqlParameter 类指定存储过程参数的数据类型,作为深层次防御性策略的⼀部分,可以验证⽤户提供的值类型(但也不是万⽆⼀失,还是应该传递⾄数据库前得到附加验证)。缺点:1.如果更改范围⼤到需要对输⼊存储过程的参数进⾏更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新GetValue() 调⽤,等等,这时候估计⽐较繁琐了。2.可移植性差由于存储过程将应⽤程序绑定到 SQL Server,因此使⽤存储过程封装业务逻辑将限制应⽤程序的可移植性。如果应⽤程序的可移植性在您的环境中⾮常重要,则将业务逻辑封装在不特定于 RDBMS 的中间层中可能是⼀个更佳的选择。