mysql面试必会6题经典_经典sql面试题及答案第7期

mysql面试必会6题经典_经典sql面试题及答案第7期deletefromsalarywherenotexists(selectwidfromworkerwhereworker.wid=salary.wid)a.直接创建索引和间接创建索引直接创建:使用sql语句创建间接创建:定义主键约束或者唯一性键约束,可以间接创建索引,主键默认为唯一索引。b.普通索引和唯一性索引普通索引:CREATEINDEXmycolumn_i…

大家好,又见面了,我是你们的朋友全栈君。

delete from salary where not exists (

select wid from worker where worker.wid = salary.wid)

a. 直接创建索引和间接创建索引

直接创建:使用sql语句创建

间接创建:定义主键约束或者唯一性键约束,可以间接创建索引,主键默认为唯一索引。

b. 普通索引和唯一性索引

普通索引:

CREATE INDEX mycolumn_index ON mytable (myclumn)

唯一性索引:保证在索引列中的全部数据是唯一的,对聚簇索引和非聚簇索引都可以使用:

CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)

c. 单个索引和复合索引

单个索引:索引建立语句中仅包含单个字段,如上面的普通索引和唯一性索引创建示例。

复合索引:又叫组合索引,在索引建立语句中同时包含多个字段:

CREATE INDEX name_index ON username(firstname, lastname)

其中firstname为前导列。

d. 聚簇索引和非聚簇索引(聚集索引,群集索引)

聚簇索引:物理索引,与基表的物理顺序相同,数据值的顺序总是按照顺序排列:

CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH ALLOW_DUP_ROW

其中WITH ALLOW_DUP_ROW表示允许有重复记录的聚簇索引。

非聚簇索引:

CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)

索引默认为非聚簇索引。

a. 对于复合索引,把使用最频繁的列做为前导列(索引中第一个字段)。如果查询时前导列不在查询条件中则该复合索引不会被使用。如:

create unique index PK_GRADE_CLASS on student (grade, class)

select * from student where class = 2 未使用到索引

select * from dept where grade = 3 使用到了索引

b. 避免对索引列进行计算,对where子句列的任何计算如果不能被编译优化,都会导致查询时索引失效。

c. 比较值避免使用NULL

d. 多表查询时要注意是选择合适的表做为内表。连接条件要充份考虑带有索引的表、行数多的表,内外表的选择可由公式:外层表中的匹配行数*内层表中每一次查找的次数确定,乘积最小为最佳方案。实际多表操作在被实际执行前,查询优化器会根据连接条件,列出几组可能的连接方案并从中找出系统开销最小的最佳方案。

e. 查询列与索引列次序一致。

f. 用多表连接代替EXISTS子句。

g. 把过滤记录数最多的条件放在最前面。

h. 善于使用存储过程,它使sql变得更加灵活和高效。

update B set B.value =

(select A.value from A where A.key = B.key)

where B.id in(select B.id from B, A where B.key = A.key);

事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

select * from EMPLOYEE where FIRST_NAME not in (‘John’,’Roy’);

游标是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

数据库一般的操作是集合操作,也就是对由WHERE子句和选择列确定的结果集作集合操作,游标是提供的一个非集合操作的途径。一般情况下,游标实现的功能往往相当于客户端的一个循环实现的功能,所以,大部分情况下,我们把游标功能搬到客户端。

游标是把结果集放在服务器内存,并通过循环一条一条处理记录,对数据库资源(特别是内存和锁资源)的消耗是非常大的,所以,我们应该只有在没有其他方法的情况下才使用游标。

select cid, cname, score, (case when score<60 then ‘fail’ else ‘pass’ end) as mark from course;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153442.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 深入理解 JVM 垃圾回收机制及其实现原理

    深入理解 JVM 垃圾回收机制及其实现原理对于JVM来说,我们都不陌生,其是JavaVirtualMachine(Java虚拟机)的缩写,它也是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统,其本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java语言的可移植性正是建立在JVM的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(`.class`)就可以在该平台上运行。这就是

  • jQuery each方法中结束本次循环和退出循环

    jQuery each方法中结束本次循环和退出循环

  • Qt Mac 在软件 icns图标制作

    Qt Mac 在软件 icns图标制作

  • linux如何卸载jdk版本并重装_centos卸载jdk

    linux如何卸载jdk版本并重装_centos卸载jdklinuxcentos7自带了openjdk,这个版本的jdk是缺少一部分功能的,最好重新安装oraclejdk。但在没有卸载openjdk就安装oraclejdk时,部分依赖包装不上,后期程序运行时会出现问题。以下为卸载jdk的步骤(openjdk或oraclejdk)和安装步骤。#1.查看目前系统中包含的jdk版本rpm-qa|grepjdk#2.得到的结果如下:java-1.8.0-openjdk-1.8.0.322.b06-1.e

  • loadrunner11基础使用「建议收藏」

    loadrunner11基础使用「建议收藏」装好Loadrunner后要用管理员权限打开,不然可能会报错win10可以装lr12和12.5,但是无法激活成功教程,最大并发50人,还只有7天试用期,7天过了要重新装loadrunner11中主要就是三个模块:VuGen:创建/编辑脚本,脚本录制和脚本增强Controller:运行负载测试,性能场景的设计和性能指标的分析及指标监控Analysis:分析测试结果,性能结果分析,出报告VuGen:创建/编辑脚本主要就是页面中四个按钮,主要用前两个按钮,新建脚本和打开现有脚本。点击新建脚本,选择Web

  • CSAPP:Attack Lab —— 缓冲区溢出攻击实验

    CSAPP:Attack Lab —— 缓冲区溢出攻击实验CSAPP:AttackLab——缓冲区溢出攻击实验X86-64寄存器和栈帧PartI:CodeInjectionAttacksPartII:Return-OrientedProgrammingAttacks

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号