Database FAQ

1. What is the function of the trigger?

Trigger is a special stored procedure, which is mainly triggered by events and executed. It enforces constraints to maintain data integrity and consistency, and tracks operations within the database so that unauthorized updates and changes are not allowed. Can be cascaded. For example, a trigger on one table contains a data operation on another table, which in turn causes the trigger on that table to be fired.

2. What is a stored procedure? What to call?

A stored procedure is a precompiled SQL statement, which has the advantage of allowing modular design, that is, it only needs to be created once and can be called multiple times in the program later. If an operation requires multiple SQL executions, using a stored procedure is faster than a simple SQL statement. Call: 1) You can use a command object to call the stored procedure. 2) It can be called by external programs, such as java programs.

3. What are the advantages and disadvantages of stored procedures?

Advantages: 1) The stored procedure is precompiled and has high execution efficiency. 2) The code of the stored procedure is directly stored in the database, and is called directly through the name of the stored procedure to reduce network communication. 3) High security, users with certain permissions are required to execute stored procedures. 4) Stored procedures can be reused, which can reduce the workload of database developers. Disadvantage: poor portability

4. Difference between stored procedure and function

stored procedure function
Used to complete specific operations or tasks in the database (such as insert, delete, etc.) for specific data (such as selection)
procedure header declaration with procedure Program header declaration with function
The program header declaration does not need to describe the return type The return type should be described in the program header declaration, and at least one valid return statement should be included in the PL/SQL block
Parameters in three modes of in/out/in out can be used Parameters in three modes of in/out/in out can be used
Can be executed as a standalone PL/SQL statement cannot be executed independently, must be called as part of an expression
Can return zero or more values ​​via out/in out Return a value through the return statement, and the changed value must be consistent with the declaration part, or it can be a variable brought out by a parameter of type out
Stored procedures cannot be called in SQL statements (DML or SELECT) Functions can be called in SQL statements (DML or SELECT)

5, the role of the index? And what are its pros and cons?

索引就一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

6、什么样的字段适合建索引

唯一、不为空、经常被查询的字段

7、索引类型有哪些?

逻辑上:
Single column 单行索引
Concatenated 多行索引
Unique 唯一索引
NonUnique 非唯一索引
Function-based 函数索引
Domain 域索引 物理上:
Partitioned 分区索引
NonPartitioned 非分区索引
B-tree :
Normal 正常型B树
Rever Key 反转型B树 Bitmap 位图索引

8、什么是事务?什么是锁?

事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。 锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

9、什么叫视图?游标是什么?

视图:是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。 游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

10、视图的优缺点

优点: 1)对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。 2 )用户通过简单的查询可以从复杂查询中得到结果。 3 )维护数据的独立性,试图可从多个表检索数据。 4 )对于相同的数据可产生不同的视图。 缺点: 性能:查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,那么就无法更改数据

11、列举几种表连接方式,有什么区别?

内连接、自连接、外连接(左、右、全)、交叉连接 内连接:只有两个元素表相匹配的才能在结果集中显示。 外连接: 左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。 右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。 全外连接:连接的表中不匹配的数据全部会显示出来。 交叉连接: 笛卡尔效应,显示的结果是链接表数的乘积。

12、主键和外键的区别?

主键在本表中是唯一的、不可唯空的,外键可以重复可以唯空;外键和另一张表的主键关联,不能创建对应表中不存在的外键。

13、在数据库中查询语句速度很慢,如何优化?

1.建索引 2.减少表之间的关联 3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据 量大的表排在前面 4.简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据 5.尽量用PreparedStatement来查询,不要用Statement

14、数据库三范式是什么?

第一范式:列不可再分 第二范式:行可以唯一区分,主键约束 第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束 且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上

15、union和union all有什么不同?

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。 UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。 从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL。

16、Varchar2和varchar有什么区别?

Char的长度是固定的,而varchar2的长度是可以变化的,比如,存储字符串“abc”对于char(20),表示你存储的字符将占20个字节,包含17个空,而同样的varchar2(20)只占了3个字节,20只是最大值,当你存储的字符小于20时,按实际长度存储。 char的效率要被varchar2的效率高。 目前varchar是varchar2的同义词,工业标准的varchar类型可以存储空字符串,但是oracle不能这样做,尽管它保留以后这样做的权利。 Oracle 自己开发了一个数据类型varchar2,这个类型不是一个标准的varchar,他将在数据库中varchar列可以存储空字符串的特性改为存储null值,如果你想有向后兼容的能力,oracle建议使用varchar2而不是varchar

17、Oracle和Mysql的区别?

1)库函数不同。 2)Oracle是用表空间来管理的,Mysql不是。 3)显示当前所有的表、用户、改变连接用户、显示当前连接用户、执行外部脚本的语句的不同。 4)分页查询时候时候, mysql 用limit oracle用rownum
  1. mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15 //为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1: mysql> SELECT * FROM tableLIMIT 95,-1; // 检索记录行 96-last. //如果只给定一个参数,它表示返回最大的记录行数目: mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行 //换句话说,LIMIT n 等价于 LIMIT 0,n。 5)sql的语法的不同。

    18、Oracle语句有多少类型

    Oracle语句分三类:DDL、DML、DCL。 DDL(Data Definition Language)数据定义语言,包括: Create语句:可以创建数据库和数据库的一些对象。 Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。 Alter语句:修改数据表定义及属性。 Truncate语句:删除表中的所有记录,包括所有空间分配的记录被删除。 DML(Data Manipulation Language)数据操控语言,包括: Insert语句:向数据表张插入一条记录。 Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是它的操作对象仍是记录。 Update语句:用于修改已存在表中的记录的内容。 DCL(Data Control Language)数据库控制语言,包括: Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。 Revoke语句:可以废除某用户或某组或所有用户访问权限

    19、oracle分页查询语句

    使用rownum,两种如下: 第一种: select * from (select t.*,rownum row_num from mytable t) b where b.row_num between 1 and 10 第二种: select * from ( select a.*, rownum rn from mytable a where rownum <= 10 ) where rn >= 1 使用rowid, 如下: select * from scott.emp where rowid in (select rd from (select rowid as rd ,rownum as rn from scott.emp ) where rn<=6 and rn>3)

    20、从数据库中随机取50条

    select * from (select * from t_example order by dbms_random.random) where rownum <= 50

    21、order by与group by的区别

    order by 排序查询、asc升序、desc降序 group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。

    22、commit在哪里会运用

    oracle的commit就是DML语句提交数据(这里是释放锁不是锁表),在未提交前你前面的操作更新的都是内存,没有更新到物理文件中。 执行commit从用户角度讲就是更新到物理文件了,事实上commit时还没有写date file,而是记录了redo log file,要从内存写到data物理文件,需要触发检查点,由DBWR这个后台进程来写,这里内容有点多的,如果不深究的话你就理解成commit即为从内存更新到物理文件。

    23、行转列、列换行怎么转

    1)使用decode函数 2)使用case when语句

    24、什么是PL/SQL?

    PL/SQL是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL 只有 Oracle 数据库有。 MySQL 目前不支持 PL/SQL 的。

    25、序列的作用

    Oracle使用序列来生成唯一编号,用来处理一个表中自增字段。 Oracle序列是原子对象,并且是一致的。也就是说,一旦您访问一个序列号,Oracle将在处理下一个请求之前自动递增下一个编号,从而确保不会出现重复值。

    26、表和视图的关系

    视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。 表就是关系数据库中实际存储数据用的。

    27、oracle基本数据类型

    1)字符串类型 char、nchar、varchar、varchar2、nvarchar2 2)数字类型 number、integer 3)浮点类型 binary_float、binary_double、float 4)日期类型 date、 timestamp 5)LOB类型 blob、clob、nclob、bfile

    28、truncate与 delete区别

    TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
    TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 TRUNCATE,DELETE,DROP 放在一起比较:
    TRUNCATE TABLE :删除内容、释放空间但不删除定义。
    DELETE TABLE: 删除内容不删除定义,不释放空间。
    DROP TABLE :删除内容和定义,释放空间。

    29、oracle获取系统时间

    select to_char(sysdate, 'yyyy-MM-dd HH24:mi:ss') from dual;

    30、oracle怎么去除去重

    使用distinct关键字

    31、现在有表:

    A(id ,name,regdate) B(id,groupid) C(id,name2) 写出下面的SQL语句 A)统计A表中每个月注册用户数 select count(*),to_char(regdate,'yyyymm') from A group by to_char(regdate,'yyyymm'); B)统计A表中有姓名相同的用户数 select count(*) from (select name from A group by name having count(*) >1); C)如果表A中有姓名相同的用户,把相同的查出,写入表C中 nsert into C(name2) select name from A group by name having count(*) >1; D)A中ID有多个相同的数据,A中姓名相同的ID只保留注册时间最大的数据 delete from E where e.regdate < (select max(regdate) from a X where E.id = X.id);

    32、现有表:

    Student(S#,SN,SD)学生表 Course(C#,CN,T#)课程表 SC(S#,C#,score)成绩表 1.查询选了课程‘税收’的学生的学号和名字 答: select SN,SD from Student where S# in( select S# from Course C , SC where C.C#=SC.C# and CN= ’税收基础’); 2.查询选课数量大于5的学生的学号和名字 答: select SN,SD from Student where S# in ( select S# from SC group by S# having count(distinct C#) > 5); ) 3.建立一个学生表students,包括name,age,head_teacher,id,score(姓名,年龄,班主任,学号,成绩) Create table students ( Id number(9) not null primary key, Name varchar2(40) not null, Age int check(age between 0 and 100), Head_teacher vachar2(40), Score float ); 4.对上表插入一条记录,姓名:张三,年龄:18,班主任:李四,学号:22 Insert into student(id,name,age,head_teacher) values(‘22’,’张三’,’18’,’李四’); 5.对上表中的age+name创建一个索引,并说明它的作用和使用方法 Create index student_index on students(age,name);

    33、怎样把这样一个表(表名:tmp_table_201307)

    year month amount 2012 1 1.1 2012 2 1.2 2012 3 1.3 2012 4 1.4 2012 4 1.6 2013 1 2.1 2013 2 2.2 2013 2 2.2 2013 3 2.3  2013 4 2.4   查成这样一个结果   year m1 m2 m3 m4   2012 1.1 1.2 1.3 3   2013 2.1 4.4 2.3 2.4   Select   year,   Sum(case when month = 1 then amount else 0 end) as m1,   Sum(case when month = 2 then amount else 0 end) as m2,   Sum(case when month = 3 then amount else 0 end) as m3,   Sum(case when month = 4 then amount else 0 end) as m4   From tmp_table_201307 a   Group by year   Order by 1;

    34、数据库中有一张表ismg_icp_flow,结构如下

    SQL> desc ismg_icp_flow Name Null Type ———————————————————————————————— ICPNO NOT NULL VARCHAR2(6) SERVICE_ID NOT NULL VARCHAR2(10) STAT_MIN NOT NULL DATETIME MT_RECV_OK NOT NULL NUMBER(10) 请写出一条SQL语句同时满足以下3个条件: 计算MT_RECV_OK的总和(显示为total),并以此对结果集进行升序排序 以ICPNO和SERVICE_ID两个字段进行分组 所得出数据的STAT_MIN必须为大于2003年1月1号0时0分并且小于2003 年2月1号0时0分 期望的输出结果如下: ICPNO SERVICE_ID TOTAL ———— —————— ———————————— 901001 7700 271965 901001 7800 3857795 答: select ICPNO,SERVICE_ID,sum(MT_RECV_OK) TOTAL from ismg_icp_flow where STAT_MIN between to_date('2003-1-1','yyyy-mm-dd') and to_date('2003-2-1','yyyy-mm-dd') group by ICPNO,SERVICE_ID order by TOTAL;

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325980083&siteId=291194637