1.数据库的三范式?
一范式: 每个列都是不可分割的原子单元;无重复的列
二范式: 必须满足第一范式; 每个列都依赖于主键。
三范式:属性不依赖于其它非主属性 [ 消除传递依赖 ]
2.主键的设计原则有哪些?
a.主键应当是对用户没有意义的。
b.主键应该是单列的,以便提高连接和筛选操作的效率。
c.永远也不要更新主键。
d.主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。
e.主键应当有计算机自动生成。
3.数据的约束有哪些特点(主键约束,唯一约束, 非空约束, null约束, 默认值约束, check[枚举]约束, 外键约束, 长度约束)
4.主键约束和唯一约束有哪些区别?
1.主键约束(PRIMARY KEY)
1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。
2) 是不可能(或很难)更新.
3) 主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).
4) 主健可作外健,唯一索引不可;
2.唯一性约束(UNIQUE)
1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束.
2) 只要唯一就可以更新.
3) 即表中任意两行在 指定列上都不允许有相同的值,允许空(NULL).
4) 一个表上可以放置多个唯一性约束
5.内连接和外连接的区别
1、内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2、外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不加限制)
6.左外连接,右外连接和全外连接的区别
左外连接就是以左表为准,去匹配右表,左表有多少条数据,结果就是多少条数据
右外连接就是与左外连接反之,以右表为准,去匹配左表,右表有多少条数据,结果就是多少条数据
全外连接数据条数不一定,相当与是左外连接 和右外连接 的综合
7.你使用过哪些mysql函数.
常用的函数有:
1. 字符串函数;主要用于处理字符串。
2. 数值函数;主要用于处理数字。
3. 日期和时间函数;主要用于处理日期和事件。
4. 系统信息函数;获取系统信息。
8.视图是什么? 视图的优点有哪些?
视图是存储在数据库中的查询的SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。
视图:查看图形或文档的方式。视图是从一个或多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。和表一样,视图也是包括几个被定义的数据列和多个数据行,但就本质而言这些数据列和数据行来源于其所引用的表。所以视图不是真实存在的基础表而是一张虚表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样又在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改(有一定的限制)、删除。当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化,同时,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。
9.常用的oracle的函数有哪些?
1、Substr 截取函数 Select productid 产品编号,substr(productid,1,6) as 截取后的编号 from 表名 //查询产品编号从第一位开始的后6位 2、Distinct 去除重复函数 Select distinct(productid) 产品编号 from 表名 //查询产品编号去除重复的编号 3、Order By 排序函数 asc(默认) desc 默认null 最大 。。。。。。order by 列名 asc (desc) nulls first 可以将null 放在首位 4、Null 查询时 不能使用”=” 而用 is null 或 is not null 。。。。。。where price is null (is not null) 5、Group by 他不属于where 语句 故位置不固定 他不能用在where函数中 Select avg(price) from 表名 group by 类型,厂家 6、Having 一般与group by 公用的限制语句 他不与单个值有关而是与组有关 Select category, avg(productprice) 产品价格 from product group by category having avg(productprice)>2000 7、Inner join……on 内连接语句 Select p.productname, p.productprice, c.categoryid from productinfo p , cageoryinfo c where p.category = c.categoryid 等价于 Select p.productname, p.productprice, c.categoryid from productinfo p inner join cageoryinfo c on p.category = c.categoryid 8、Abs 取绝对值的函数 Select Asb(-100) from dual 9、mod 取余函数 Select mod(10,6) from dual 值为4 若b为0 返回A A b 10 、sign 返回数的符号 正为1 0为0 负为-1 Select sign(‘9’),sign(-9),sign(10),sign(0.00) from dual 返回为1,-1,1,0 11、cell(n) 返回>=n的最小整数 要求n必须是十进制的数 Floor(n) 返回<=n的最大整数 要求n 必须是十进制的数 12、sort(n) 返回n的平方根 当n小于0是返回nan Power(n1,n2) 返回 n1的n2次幂 Exp(n) 返回e的n次幂 Log(n1,n2) 返回以n1为底n2的对数 n1不为0,1 Ln(n) 返回n的自然对数 n不为 0,1 13、round(n,interger) 四舍五入n的interger位 若interger为正保留小数点后interger位四舍五入,若interger为负向小数点前数interger位四舍五入 如round(155,-2) 结果为200 。Trunc(n,interger) 截取n的interger位 若interger为正向小数点后截取interger位,若interger为负向小数点前截取interger为 如 trunk(155,-2) 结果为100 14、ASCII(char)返回参数首字母的ASCII码值 15、lengtch(char) 返回字符串char 的长度 16、 substr(‘给定的字符串’,A,B) A表示从第几位开始截 B表示截几位,如果A为负值 从右边数到A位开始向后截B位 17、connect(char1,char2)连接字符串 把char1和char2连接起来 connect(‘我的’,‘测试’)等价于‘我的’||‘测试’ 18、cast 数据类型转换函数 Select cast(’123’ as interger),cast(123 as varchar2(8)) from dual 结果为123 123 19、chartorowid 函数 将 char类型转换为ROWID 类型 但是最后长度必须满足rowid的标准18位 Rowidtochar 函数 将rowid 类型转换为char 因为rowid长度为18,故转换成的字符串也是18位。 20、to_char(number) 将数字类型转换成字符类型 To_char(data) 将日期转换成字符型 21、lnnvl (条件) 排除条件得到指定条件之外的函数 Select *from productinfo where lnnvl(quantity>=70) 获得quantity小于70的数据 22、nvl(expr1,expr2) 如果expr1为null 则返回expr2 否则返回expr1 替换时常用 Select productname,nvl(quantity,0) from productinfo 表示若quantity为NULL返回0否则返回quantity的值 Nvl2(expr1,expr2,expr3) 意思一样当expr1为空返回expr3,不为空返回expr2
10.存储函数和存储过程的区别?
本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。
函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少
1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。
3. 存储过程一般是作为一个独立的部分来执行(EXEC执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
4. 当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。
可以出于任何使用SQL 语句的目的来使用存储过程,它具有以下优点:
(1)功能强大,限制少。
(2)可以在单个存储过程中执行一系列SQL 语句。
(3)可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
(4)存储过程在创建时即在上进行编译,所以执行起来比单个SQL 语句快。
(5)可以有多个返回值,即多个输出参数,并且可以使用SELECT返回结果集。
11.存储过程的缺点 和 优点?
优点
1. 运行速度:对于很简单的sql,存储过程没有什么优势。对于复杂的业务逻辑,因为在存储过程创建的时候,数据库已经对其进行了一次解析和优化。存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用,所以执行速度会比普通sql快。
2. 减少网络传输:存储过程直接就在数据库服务器上跑,所有的数据访问都在数据库服务器内部进行,不需要传输数据到其它服务器,所以会减少一定的网络传输。但是在存储过程中没有多次数据交互,那么实际上网络传输量和直接sql是一样的。而且我们的应用服务器通常与数据库是在同一内网,大数据的访问的瓶颈会是硬盘的速度,而不是网速。
3. 可维护性:的存储过程有些时候比程序更容易维护,这是因为可以实时更新DB端的存储过程。 有些bug,直接改存储过程里的业务逻辑,就搞定了。
4. 增强安全性:提高代码安全,防止 SQL注入。这一点sql语句也可以做到。
5. 可扩展性:应用程序和数据库操作分开,独立进行,而不是相互在一起。方便以后的扩展和DBA维护优化。
缺点
1. SQL本身是一种结构化查询语言,但不是面向对象的的,本质上还是过程化的语言,面对复杂的业务逻辑,过程化的处理会很吃力。同时SQL擅长的是数据查询而非业务逻辑的处理,如果如果把业务逻辑全放在存储过程里面,违背了这一原则。
2. 如果需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新调用,等等,这时候估计会比较繁琐了。
3. 开发调试复杂,由于IDE的问题,存储过程的开发调试要比一般程序困难。
4. 没办法应用缓存。虽然有全局临时表之类的方法可以做缓存,但同样加重了数据库的负担。如果缓存并发严重,经常要加锁,那效率实在堪忧。
5. 不支持群集,数据库服务器无法水平扩展,或者数据库的切割(水平或垂直切割)。数据库切割之后,存储过程并不清楚数据存储在哪个数据库中。
12.jdbc中如何调用存储过程?
在 JDBC 中调用存储过程的语法为:{call procedure_name[(?, ?, ...)]};返回结果参数的存储过程的语法为:{? = call procedure_name[(?, ?, ...)]};不带参数的存储过程的语法为:{call procedure_name}。
13.jdbc的执行步骤
1、加载JDBC驱动程序:
2、提供JDBC连接的URL
3、创建数据库的连接
4、创建一个Statement
5、执行SQL语句
6、处理结果 两种情况: 1、执行更新返回的是本次操作影响到的记录数。 2、执行查询返回的结果是一个ResultSet对象。
7、关闭JDBC对象
14.触发器是什么? 触发器的类型有哪些?
触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。
触发器有如下作用: 可在写入数据表前,强制检验或转换数据。
SQL Server 包括三种常规类型的触发器:DML 触发器、DDL 触发器和登录触发器。
1、DML触发器当数据库中表中的数据发生变化时,包括insert,update,delete任意操作,如果我们对该表写了对应的DML触发器,那么该触发器自动执行。DML触发器的主要作用在于强制执行业 务规则,以及扩展Sql Server约束,默认值等。因为我们知道约束只能约束同一个表中的数据,而触发器中则可以执行任意Sql命令。2、DDL触发器它是Sql Server2005新增的触发器,主要用于审核与规范对数据库中表,触发器,视图等结构上的操作。比如在修改表,修改列,新增表,新增列等。它在数据库结构发生变化时执行,我们主要用它来记录数据库的修改过程,以及限制程序员对数据库的修改,比如不允许删除某些指定表等。3、登录触发器登录触发器将为响应 LOGIN 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。因此,来自触发器内部且通常将到达用户的所有消息(例如错误消息和来自 PRINT 语句的消息)会传送到 SQL Server 错误日志。如果身份验证失败,将不激发登录触发器。
15.游标的作用?
游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果 每个游标区都有一个名字 用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理 主语言是面向记录的,一组主变量一次只能存放一条记录 仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求 嵌入式SQL引入了游标的概念,用来协调这两种不同的处理方式
16.mysql的端口? oracle的端口?
MySQL 默认端口号为:3306
Oracle 默认端口号为:1521
17.mysql的分页? oracle的分页?
limit分页; rownum分页;
18.简单说下数据库的事务;
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
⑴ 原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
⑵ 一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
⑶ 隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
关于事务的隔离性数据库提供了多种隔离级别。
⑷ 持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作
19.oracle的索引.
Oracle中建立索引,会提高查询速度: create index 索引名 on 表名(列名);
20.同义词是什么,同义词的好处?
数据库中的同义词,可以相当于文件系统的快捷方式理解,例如表和视图的同义词,完全可以直接当表和视图使用。好处一:应用程序开发可以不管数据库的具体对象名。好处二:避免应用程序直接访问数据库对象,提高数据库安全性。好处三:简化数据库对象的访问。
21.简单说说oracle的包;
包也是模式对象,它是将相关元素集成在一起的PL/SQL结构。包由以下两部分组成:
- 包头
- 包体
包头和包体是单独存放在数据库的字典中。在包中,我们可以集成以下对象:
- 存储过程
- 函数
- 游标
- 变量
- 常量
- 异常
- 记录类型
22.oracle的授权和收权;
1.GRANT 赋于权限
常用的系统权限集合有以下三个:
CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理)
GRANT CONNECT, RESOURCE TO 用户名;
GRANT SELECT ON 表名 TO 用户名;
GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2;
2.REVOKE 回收权限
REVOKE CONNECT, RESOURCE FROM 用户名;
REVOKE SELECT ON 表名 FROM 用户名;
REVOKE SELECT, INSERT, DELETE ON 表名 FROM 用户名1, 用户名2;