MySQL数据库基础面试题

news2024/9/27 5:59:15

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Java面试题总结
✨特色专栏:国学周更-心性养成之路
🥭本文内容:MySQL数据库基础面试题
更多内容点击👇
      Java Web高级面试题(一)

本文目录

    • Q1. 数据库的三范式是什么
    • Q2. 数据库引擎有哪些
    • Q3. InnoDB与MyISAM的区别
    • Q4. 简述你进行过的SQL优化
    • Q5. 简单说一说drop、delete与truncate的区别
    • Q6. 什么是内联接、左外联接、右外联接?
    • Q7. mysql有哪些数据类型
    • Q8. 介绍几个MySQL存储引擎
    • Q9. 什么是sql注入,如何防止?
    • Q10. sql如何优化?
    • Q11. NULL是什么意思?
    • Q12. 什么是主键?什么是外键?
    • Q13. 你可以用什么来确保表格里的字段只接受特定范围里的值?
    • Q14. SQL语言包括哪些类型?
    • Q15. 内联接,外联接区别?
    • Q16. 查询表A(id,name)中存在id重复三次以上的记录,查询语句请写出来?
    • Q17. 适用于MySql的分页查询语句?
    • Q18. 谈谈数据库设计的三范式
    • Q19. 设计数据库应注意那些问题
    • Q20. 表与表之间的关联关系
    • Q21. 数据库设计的必要性及设计步骤
    • Q22. 什么是数据模型?什么是规范化?
    • Q23. union和union all有什么不同?
    • Q24. 所有部门之间的比赛组合一个叫department的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合.
    • Q25. 简单说一说drop、delete与truncate的区别
    • Q26. char和vachar区别?
    • Q27. 什么是E-R图?
    • Q28. MySQL两种引擎InnoDB和MyISAM的区别?
    • Q29. 如何解决MYSQL数据库中文乱码问题?
    • Q30. mysql数据库存储引擎
    • Q31. order by与group by的区别
    • Q32. oracle基本数据类型
    • Q33. truncate与 delete区别
    • Q34. 表与表之间的关联关系
    • Q35. 什么是数据模型?什么是规范化?
    • Q36. 设计数据库应注意那些问题?
    • Q37. 怎样查看数据库引擎的报错
    • Q38. 给出数据库正常启动所经历的几种状态?
    • Q39. 用一条SQL 语句查询出每门课都大于80 分的学生姓名
    • Q40. 学生表 如下:
    • Q41. 一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.
    • Q42. 请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。
    • Q43. 面试题:怎么把这样一个表儿
    • Q44. 有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value这道题的SQL 语句怎么写?
    • Q45. 有表A,结构如下:
    • Q46. 列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况?
    • Q47. 怎样才能找出最后一次插入时分配了哪个自动增量?
    • Q48. LIKE 声明中的%和_是什么意思?
    • Q49. MySQL 如何优化 DISTINCT?
    • Q50. NOW()和 CURRENT_DATE()有什么区别?
    • Q51. 什么是非标准字符串类型?
    • Q52. MySQL 里记录货币用什么字段类型好
    • Q53. 列的字符串类型可以是什么?
    • Q54. 实践中如何优化 MySQL
    • Q55. 优化数据库的方法
    • Q56. SQL注入漏洞产生的原因?如何防止?
    • Q57. 为表中得字段选择合适得数据类型
    • Q58. 完整性约束包括哪些?

在这里插入图片描述

Q1. 数据库的三范式是什么

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

Q2. 数据库引擎有哪些

mysql常用引擎包括:MYISAM、Innodb、Memory、MERGE
MYISAM:全表锁,拥有较高的执行速度,不支持事务,不支持外键,并发性能差,占用空间相对较小,对事务完整性没有要求,以select、insert为主的应用基本上可以使用这引擎
Innodb:行级锁,提供了具有提交、回滚和崩溃回复能力的事务安全,支持自动增 列,支持外键约束,并发能力强,占用空间是MYISAM的2.5倍,处理效率相对会差一些
Memory:全表锁,存储在内容中,速度快,但会占用和数据量成正比的内存空间且数据在mysql重启时会丢失,默认使用HASH索引,检索效率非常高,但不适用于精确查找,主要用于那些内容变化不频繁的代码表
MERGE:是一组MYISAM表的组合

注:
查看mysql提供的所有存储引擎
mysql> show engines;

Q3. InnoDB与MyISAM的区别

InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;
InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;

Q4. 简述你进行过的SQL优化

1、查询语句中不要使用select *
2、尽量减少子查询,使用关联查询(left join,right join,inner join)替代
3、减少使用IN或者NOT IN ,使用exists,not exists或者关联查询语句替代
4、or 的查询尽量用 union或者union all 代替(在确认没有重复数据或者不用剔除重复数据时,union all会更好)
5、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
6、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0

Q5. 简单说一说drop、delete与truncate的区别

SQL中的drop、delete、truncate都表示删除,但是三者有一些差别
delete和truncate只删除表的数据不删除表的结构速度,一般来说: drop> truncate >delete
delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;
如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.

Q6. 什么是内联接、左外联接、右外联接?

内联接(Inner Join):匹配2张表中相关联的记录。
左外联接(Left Outer Join):除了匹配2张表中相关联的记录外,还会匹配左表中剩余的记录,右表中未匹配到的字段用NULL表示。
右外联接(Right Outer Join):除了匹配2张表中相关联的记录外,还会匹配右表中剩余的记录,左表中未匹配到的字段用NULL表示。在判定左表和右表时,要根据表名出现在Outer Join的左右位置关系。

Q7. mysql有哪些数据类型

1、整数类型 ,包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分别表示1字节、2字节、3字节、4字节、8字节整数。任何整数类型都可以加上UNSIGNED属性,表示数据是无符号的,即非负整数。

2、实数类型,包括FLOAT、DOUBLE、DECIMAL。
DECIMAL可以用于存储比BIGINT还大的整型,能存储精确的小数。
而FLOAT和DOUBLE是有取值范围的,并支持使用标准的浮点进行近似计算。
计算时FLOAT和DOUBLE相比DECIMAL效率更高一些,DECIMAL你可以理解成是用字符串进行处理。

3、字符串类型,包括VARCHAR、CHAR、TEXT、BLOB
VARCHAR用于存储可变 字符串,它比定 类型更节省空间。
VARCHAR使用额外1或2个字节存储字符串 度。列 度小于255字节时,使用1字节表示,否则使用2字节表示。
VARCHAR存储的内容超出设置的 度时,内容会被截断。
CHAR是定长的,根据定义的字符串长度分配足够的空间。
CHAR会根据需要使用空格进行填充方便比较。
CHAR适合存储很短的字符串,或者所有值都接近同一个长度。
CHAR存储的内容超出设置的长度时,内容同样会被截断。

使用策略:
对于经常变更的数据来说,CHAR比VARCHAR更好,因为CHAR不容易产生碎片。
对于非常短的列,CHAR比VARCHAR在存储空间上更有效率。
使用时要注意只分配需要的空间,更 的列排序时会消耗更多内存。
尽量避免使用TEXT/BLOB类型,查询时会使用临时表,导致严重的性能开销。

4、枚举类型(ENUM),把不重复的数据存储为一个预定义的集合。
有时可以使用ENUM代替常用的字符串类型。
ENUM存储非常紧凑,会把列表值压缩到一个或两个字节。
ENUM在内部存储时,其实存的是整数。
尽量避免使用数字作为ENUM枚举的常量,因为容易混乱。
排序是按照内部存储的整数

5、日期和时间类型,尽量使用timestamp,空间效率高于datetime,
用整数保存时间戳通常不方便处理。
如果需要存储微妙,可以使用bigint存储。

Q8. 介绍几个MySQL存储引擎

MySQL将数据用各种不同的技术存储在文件中,这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。这些不同的技术以及配套的相关功能在 mysql中被称作存储引擎(也称作表类型)。

  1. MyISAM引擎:MyISAM引擎是MySQL默认的存储引擎,MyISAM不支持事务和行级锁,所以MyISAM引擎速度很快,性能优秀。MyISAM可以对整张表加锁,支持并发插入,支持全文索引。
    缺点:不支持事务和行级锁,也不支持外键
    优点:访问速度快,对事务的完整性没有要求或者以select、insert为主的应用基本上都可以使用这个引擎来创建MyISAM再磁盘上存储成三个文件,其文件名都和表名相同,但扩展名分别是:.frm(存储表定义),.MYD(存储数据),.MYI(存储索引)

  2. InnoDB引擎:InnoDB是专为事务设计的存储引擎,支持事务,支持外键,拥有高并发处理能力。但是,InnoDB在创建索引和加载数据时,比MyISAM慢。

  3. Memory引擎(采用哈希索引):内存表,Memory引擎将数据存储在内存中,表结构不是存储在内存中的,查询时不需要执行磁盘I/O操作,所以要比MyISAM和InnoDB快很多倍,但是数据库断电或是重启后,表中的数据将会丢失,表结构不会丢失.

Q9. 什么是sql注入,如何防止?

sql注入:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。简单说就是sql拼接。

如何防御:
a:删除用户输入内容中的所有连字符
b:对于用来执行查询的数据库帐户,限制其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作
c: 用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击
d:查用户输入的合法性,确信输入的内容只包含合法的数据

Q10. sql如何优化?

a:要显示什么字段, 就查询什么字段
b: 建立索引
c:减少对表的查询
d: 分表分库

Q11. NULL是什么意思?

NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。假设您的SQL Server数据库里有ANSI_NULLS,当然在默认情况下会有,对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个 UNKNOWN值进行比较,并在逻辑上希望获得一个答案。您必须使用IS NULL操作符。

Q12. 什么是主键?什么是外键?

主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。

Q13. 你可以用什么来确保表格里的字段只接受特定范围里的值?

Check限制,它在数据库表格里被定义,用来限制输入该列的值。
触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。

Q14. SQL语言包括哪些类型?

数据定义DDL:Create Table,Alter Table,Drop Table, Create/Drop Index等
数据操纵DML:Select ,insert,update,delete,
数据控制DCL:grant,revoke

Q15. 内联接,外联接区别?

内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然。
在外连接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行。分左连接、右连接、全连接(mysql不支持)三种。

Q16. 查询表A(id,name)中存在id重复三次以上的记录,查询语句请写出来?

SELECT * FROM A GROUP BY id HAVING COUNT(id)>3

Q17. 适用于MySql的分页查询语句?

limit函数,从数据库表中的m条记录开始,检索n条记录。
select * from 表名 limit m,n;

Q18. 谈谈数据库设计的三范式

第一范式的定义:所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,则这个表属于第一范式(常记成1NF)。简而言之:“每一字段只存储一个值”。例如:职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话 和一个家里电话号码)
第二范式的定义:如果一个表属于1NF,任何属性只依赖于关键字,则这个表属于第二范式(常记成2NF )。简而言之:必须先符合1NF的条件,且每一行都能被唯一的识别。将1NF转换成2NF的方法是添加主键。例如:学号,姓名,课程名,成绩
第三范式的定义:如果一个表属于2NF,且不包含传递依赖性,则这个表是第三范式(常记成 3NF)。简而言之,第三范式就是属性不依赖于其它非主属性。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。

Q19. 设计数据库应注意那些问题

首先应尽量满足三范式的要求,在一定程度上打破三范式的要求以提高数据库的性能。例如,我们创建某些表的时候,不仅会插入外键,还会插入相关的属性,这违反了第三范式,但这样做的好处,就是我们在业务查询的时候会减少很多关联查询,从而提高查询效率。

Q20. 表与表之间的关联关系

分为3种:一对一、一对多、多对多。

Q21. 数据库设计的必要性及设计步骤

好的数据库结构有利于:节省数据的存储空间,能够保证数据的完整性,方便进行数据库应用系统的开发
设计不好的数据库结构将导致:数据冗余、存储空间浪费和内存空间浪费
不管数据库的大小和复杂程度如何,可以用下列基本步骤来设计数据库:收集信息–标识对象–设计数据模型–标识每个对象–存储的信息类型–标识对象之间的关系

Q22. 什么是数据模型?什么是规范化?

数据模型是一种标识实体类型及其实体间联系的模型。典型的数据模型有网状模型、层次模型和关系模型。
从关系数据库的表中,除去冗余数据的过程称为规范化。包括:精简数据库的结构,从表中删除冗余的列,标识所有依赖于其它数据的数据

Q23. union和union all有什么不同?

Union和Union All的区别之一在于对重复结果的处理。
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL

Q24. 所有部门之间的比赛组合一个叫department的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合.

SELECT t1.name AS whiteName,t2.name AS blackName FROM department t1 INNER JOIN department t2

Q25. 简单说一说drop、delete与truncate的区别

SQL中的drop、delete、truncate都表示删除,但是三者有一些差别

  1. delete和truncate只删除表的数据不删除表的结构
  2. 速度,一般来说: drop> truncate >delete
  3. delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;
    如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.

Q26. char和vachar区别?

char是固定长度,处理速度比vachar快,费内存空间,当存储的值没有达到指定的范围时,会用空格替代。
vachar是不固定长度,节约存储空间,存储的是真实的值。
如:存储字符串’abc’
使用char(10),表示存储的字符将占10个字节(包括7个空字符)
使用varchar(10),则表示只占3个字节,10是最大值,当存储的字符小于10时,按照实际的长度存储。

Q27. 什么是E-R图?

E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。
ER图中有如下四个成分:

  1. 矩形框:表示实体,在框中记入实体名。
  2. 菱形框:表示联系,在框中记入联系名。
  3. 椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。
  4. 连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。

E-R图的3个基本要素:

  1. 实体
  2. 属性
  3. 联系

Q28. MySQL两种引擎InnoDB和MyISAM的区别?

1.MyISAM不支持事务,而InnoDB支持事务。
2.MyISAM锁的是表锁(表锁又分读锁和写锁),而InnoDB锁为行级锁。
3.MyISAM支持全文类型索引,而InnoDB不支持。
4.MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
5.MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
6.InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。

Q29. 如何解决MYSQL数据库中文乱码问题?

建表和建库的时候指定字符集。

Q30. mysql数据库存储引擎

一、InnoDB
这是MySQL 5.5或更高版本的默认存储引擎。它提供了事务安全(ACID兼容)表,支持外键引用完整性约束。
它支持提交、回滚和紧急恢复功能来保护数据。它还支持行级锁定。
当在多用户环境中使用时,它的“一致非锁定读取”提高了性能。它将数据存储在集群索引中,从而减少了基于主键的查询的I/O。
二、MyISAM
该存储引擎管理非事务性表,提供高速存储和检索,支持全文搜索。
三、MEMORY
提供内存中的表,以前称为堆。它在RAM中处理所有数据,以便比在磁盘上存储数据更快地访问。用于快速查找引用和其他相同的数据。
四、MERGE
将多个类似的MyISAM表分组为一个表,可以处理非事务性表,默认情况下包括这些表。
五、EXAMPLE
你可以使用此引擎创建表,但不能存储或获取数据。这样做的目的是教开发人员如何编写新的存储引擎。
六、ARCHIVE
用于存储大量数据,不支持索引。
七、CSV
在文本文件中以逗号分隔值格式存储数据。
八、BLACKHOLE
受要存储的数据,但始终返回空。
九、FEDERATED
将数据存储在远程数据库中。

Q31. order by与group by的区别

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

Q32. 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

Q33. truncate与 delete区别

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

Q34. 表与表之间的关联关系

分为3种:

  1. 一对一
  2. 一对多
  3. 多对多

Q35. 什么是数据模型?什么是规范化?

数据模型是一种标识实体类型及其实体间联系的模型。典型的数据模型有网状模型、层次模型和关系模型。
从关系数据库的表中,除去冗余数据的过程称为规范化。包括:精简数据库的结构,从表中删除冗余的列,标识所有依赖于其它数据的数据

Q36. 设计数据库应注意那些问题?

(1)原始单据与实体之间的关系
(2)主键与外键
(3)基本表的性质,注意ACID四大特性
(4)三大范式标准
(5)要善于识别与正确处理多对多的关系
(6)主键PK的取值方法
(7)正确认识数据冗余
(8) 合理应用视图技术
(9)合理利用中间表、报表和临时表

Q37. 怎样查看数据库引擎的报错

alert log.

Q38. 给出数据库正常启动所经历的几种状态?

STARTUP NOMOUNT – 数据库实例启动
STARTUP MOUNT - 数据库装载
STARTUP OPEN – 数据库打开

Q39. 用一条SQL 语句查询出每门课都大于80 分的学生姓名

name kecheng fenshu
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90

两种sql写法如下:

  1. select distinct name from table where name not in (select distinct name from table where fenshu<=80)
  2. select name from table group by name having min(fenshu)>80

Q40. 学生表 如下:

自动编号 学号 姓名 课程编号 课程名称 分数
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89
3 2005001 张三 0001 数学 69
删除除了自动编号不同, 其他都相同的学生冗余信息

delete tablename where 自动编号 not in(select min( 自动编号) from tablename group by学号, 姓名, 课程编号, 课程名称, 分数)

Q41. 一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.

select a.name, b.name from team a, team b where a.name < b.name

Q42. 请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。

AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。
数据库名:JcyAudit ,数据集:Select * from TestDB

select a.*
from TestDB a
,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID=‘101’ group by Occmonth) b
where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur

Q43. 面试题:怎么把这样一个表儿

year month amount
1991 1 1.1
1991 2 1.2
1991 3 1.3
1991 4 1.4
1992 1 2.1
1992 2 2.2
1992 3 2.3
1992 4 2.4
查成这样一个结果
year m1 m2 m3 m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4

select year,
(select amount from aaa m where month=1 and m.year=aaa.year) as m1,
(select amount from aaa m where month=2 and m.year=aaa.year) as m2,
(select amount from aaa m where month=3 and m.year=aaa.year) as m3,
(select amount from aaa m where month=4 and m.year=aaa.year) as m4
from aaa group by year

Q44. 有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value这道题的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);

Q45. 有表A,结构如下:

p_ID p_Num s_id
1 10 01
1 12 02
2 8 01
3 11 01
3 8 03
其中:p_ID为产品ID,p_Num为产品库存量,s_id为仓库ID。请用SQL语句实现将上表中的数据合并,合并后的数据为:
p_ID s1_id s2_id s3_id
1 10 12 0
2 8 0 0
3 11 0 8
其中:s1_id为仓库1的库存量,s2_id为仓库2的库存量,s3_id为仓库3的库存量。如果该产品在某仓库中无库存量,那么就是0代替。

select p_id ,
sum(case when s_id=1 then p_num else 0 end) as s1_id
,sum(case when s_id=2 then p_num else 0 end) as s2_id
,sum(case when s_id=3 then p_num else 0 end) as s3_id
from myPro group by p_id

Q46. 列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况?

它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。

Q47. 怎样才能找出最后一次插入时分配了哪个自动增量?

LAST INSERT_ID 将返回由 Auto_increment 分配的最后一个值,并且不需要指定表名称。

Q48. LIKE 声明中的%和_是什么意思?

%对应于 0 个或更多字符,_只是 LIKE 语句中的一个字符。

Q49. MySQL 如何优化 DISTINCT?

DISTINCT 在所有列上转换为 GROUP BY,并与 ORDER BY 子句结合使用。
SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;

Q50. NOW()和 CURRENT_DATE()有什么区别?

NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒。
CURRENT_DATE()仅显示当前年份,月份和日期。

Q51. 什么是非标准字符串类型?

1、 TINYTEXT
2、 TEXT
3、 MEDIUMTEXT
4、 LONGTEXT

Q52. MySQL 里记录货币用什么字段类型好

NUMERIC 和 DECIMAL 类型被 MySQL 实现为同样的类型,这在 SQL92 标准允许。他们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数据。当声明一个类是这些类型之一时,精度和规模的能被(并且通常是)指定。

Q53. 列的字符串类型可以是什么?

1、 SET
2、 BLOB
3、 ENUM
4、 CHAR
5、 TEXT

Q54. 实践中如何优化 MySQL

1、SQL 语句及索引的优化
2、数据库表结构的优化
3、系统配置的优化
4、硬件的优化

Q55. 优化数据库的方法

1、选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置 NOTNULL,例如’省份’、’性别’最好适用 ENUM
2、使用连接(JOIN)来代替子查询
3、适用联合(UNION)来代替手动创建的临时表
4、事务处理
5、锁定表、优化事务处理
6、适用外键,优化锁定表
7、建立索引
8、优化查询语句

Q56. SQL注入漏洞产生的原因?如何防止?

防止 SQL 注入的方式:

  1. 开启配置文件中的 magic_quotes_gpc 和 magic_quotes_runtime 设置
  2. 执行 sql 语句时使用 addslashes 进行 sql 语句转换
  3. Sql 语句书写尽量不要省略双引号和单引号 。
  4. 过滤掉 sql 语句中的一些关键词: update、 insert、 delete、 select、 * 。
  5. 提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。

Q57. 为表中得字段选择合适得数据类型

字段类型优先级 : 整形 >date,time>enum,char>varchar>blob,text
优先考虑数字类型,其次是日期或者二进制类型,最后是字符串类型,同级别得数据类型,应该优先选择占用空间小的数据类型

Q58. 完整性约束包括哪些?

数据完整性 (Data Integrity)是指数据的精确 (Accuracy)和可靠性 (Reliability)。
分为以下四类:
1、实体完整性:规定表的每一行在表中是惟一的实体。
2、域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。
3、参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。
4、用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。

与表有关的约束:包括列约束(NOT NULL(非空约束))和表约束(PRIMARY KEY、 foreign key、 check、 UNIQUE) 。


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/131153.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python中的封装和继承

目录 一.面向对象的三大特性 私有成员 使用私有成员 封装小结 二.继承 pass关键字 多继承 多继承注意事项 小结 三.复写和使用父类成员 复写父类成员的语法 调用父类同名成员 一.面向对象的三大特性 面向对象编程&#xff0c;是许多编程语言都支持的一种编程思想。 简…

【机器学习】基于Pytorch和GoogleNet的海面舰船图像分类

文章目录基于Pytorch和GoogleNet的海面舰船图像分类1. 问题概述2. 实验环境、依赖库与代码结构3. GoogleNet网络架构3.1 Inception结构3.2 辅助分类器4. GoogleNet网络特征提取说明4.1 低层特征提取4.2 Inception特征提取4.3 分类器特征提取5. 具体参数设计6. 实际代码说明7. 网…

关于ElasticSearch新建文档的姿势

定义如下mapping&#xff0c;并且创建索引&#xff0c;索引包括四个字段 有三个分片 (number_of_shards)&#xff0c;每个分片有一个副本分片(number_of_replicas) PUT books {"mappings": {"properties": {"book_id": {"type": &qu…

[SUCTF 2018]MultiSQL(预处理)

打开界面发现注册admin已经有了这个用户&#xff0c;就注册了一个admin 然后功能都看一下&#xff0c;发现有一个id的get传参&#xff0c;所以我们可以传参数&#xff0c;实验一下是不是sql注入点 id1的时候显示了admin的用户&#xff0c;想到了水平越权的问题。但还是没啥&am…

计数指针 std::shared_ptr

shared_ptr 共享指针 shared_ptr 计数指针称为共享指针&#xff0c;可以共享数据。shared_ptr 创建了一个计数器与类对象所指的内存相关联Copy 之后计数器加一&#xff0c;销毁之后计数器减一。计数器 API 接口为 &#xff1a;use_count() 测试代码&#xff1a; #include <…

Python + Django开发在线考试管理系统(附源码)

本文最终实现一个Web在线考试管理系统&#xff0c;可作为Python Web&#xff0c;Django的练手项目&#xff0c;也可以作为计算机毕业设计参考项目。 文章目录系统功能需求分析系统设计及实现思路源码分享&系统实现过程系统展示系统功能需求分析 在线考试管理系统&#xff…

机器学习中的数学原理——二分类问题

今天是2022年的最后一天&#xff0c;提前祝大家新年快乐&#xff01;这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟&#xff0c;也希望对你的学习有帮助哦&#xff01;感兴趣的小伙伴欢迎私信或者评论区留言&#xff01;这一篇就更新一下《白话机器学习中的数…

shell流程控制之条件判断练习

1、ping主机测试,查看主机是否存活&#xff1b; #!/bin/bash ######################### #File name:ping.sh #Version:v1.0 #Email:admintest.com #Created time:2022-12-28 05:06:21 #Description: ######################### var$( ifconfig ens33 | grep inet | grep -v…

【JavaSE成神之路】Java面向对象(下)

哈喽&#xff0c;我是兔哥呀&#xff0c;今天就让我们继续这个JavaSE成神之路&#xff01; 这一节啊&#xff0c;咱们要学习的内容还是Java的面向对象。 1. 构造方法 构造方法和new关键字是一对好拍档。 在之前GirlFriend的例子中&#xff0c;我们写了两个构造方法&#xff…

gl inet mt1300读写性能测试

为什么买这个路由器 1.最近需要一个路由器, 2.我需要在局域网存储一些东西方便手机电脑访问(微型nas), 3.另外还希望这个路由器是开源智能路由器(能装插件玩), 4.小,非常小,typec 供电(5v 1.5A),非常方便,支持tf卡 usb3.0 wifi 5GHz (1)不用nas的原因:我只是轻度使用nas,专…

Fedora 装系统后连接不上无线网络和蓝牙设备

Fedora 装系统后连接不上蓝牙鼠标0.升级系统&#xff0c;升级后仍然无法使用&#xff0c;执行步骤1-3的方法。1.查看本机是否有无线硬件模块——有2. 查看本机是否有蓝牙固件【驱动】——无3. 安装无线网络驱动3.1 打开终端3.2 安装dnf并配置3.3 使用dnf安装kmod-wl&#xff0c…

钉钉6亿用户的哲学:产业互联网的海洋里,没有人是一座孤岛

除了拥有大人口和大市场条件的中国&#xff0c;或许难有另一个国家再现数亿人共同投身产业互联网的场景。除了钉钉&#xff0c;或许也很难有别的软件能同时承载6亿人的数字化理想。 12月28日&#xff0c;钉钉总裁叶军在2022钉钉7.0产品发布会上&#xff0c;带来了钉钉的最新数…

知识变现海哥:如何将你的知识变成一套解决方案

知识变现海哥&#xff1a;如何将你的知识变成一套解决方案 之前我说过我们卖的不是自己能力&#xff0c;而是一套成体系的解决方案&#xff0c;因为没有人会单纯地为能力买单&#xff0c;我们越是能证明自己的能力有价值&#xff0c;就越能将自己的能力卖高价。而价值要怎么证…

Acwing---789.数的范围

数的范围1.题目2.基本思想3.代码实现4.总结1.题目 给定一个按照升序排列的长度为n的整数数组&#xff0c;以及 q 个查询。 对于每个查询&#xff0c;返回一个元素k的起始位置和终止位置&#xff08;位置从0开始计数&#xff09;。 如果数组中不存在该元素&#xff0c;则返回“…

使用递归和非递归方式实现二叉树先序、中序、后序遍历

题目&#xff1a; 用递归和非递归方式&#xff0c;分别按照二叉树先序、中序和后续打印所有的节点。先序为根左右&#xff0c;中序为左根右&#xff0c;后序为左右根。 递归方式&#xff1a; &#xff08;1&#xff09;先序&#xff1a; //先序 根左右public static void pr…

TypeScript入门

这两天终于抽空学习了typescript&#xff0c;把欠了四年的帐给补上了。 废话不多说&#xff0c;先上官网链接&#xff1a;TypeScript中文网 TypeScript——JavaScript的超集 一、下载安装&#xff1a;用npm > npm install -g typescript 验证是否安装成功&#xff1a; …

保存网页内容 自动过滤广告和网页头尾

网页可以非常方便的为我们展示各种信息&#xff0c;如果遇到重要的资料文献&#xff0c;希望在本地电脑上保存下来该怎么操作呢&#xff1f;把网址添加到收藏夹&#xff0c;下次直接打开网址查看&#xff0c;但如果资源被网站删除&#xff0c;就再也找不到了。还是保存在自己电…

msf联动cs

Cobalt Strike简称CS 用于团队作战使用&#xff0c;由一个服务端和多个客户端组成&#xff0c;能让多个攻击者这在一个团队服务器上共享目标资源和信息&#xff0c;我们在使用msf获得权限以后&#xff0c;可以将信息共享到cs上&#xff0c;使用cs来进行监听以及其他的操作。 1…

理解Kotlin泛型

文章目录Kotlin泛型声明处型变协变< out T>逆变< in T>使用处型变(类型投影)参考Kotlin泛型 声明处型变 协变< out T> interface GenericsP<T> {fun get(): T //读取并返回T&#xff0c;可以认为只能读取T的对象是生产者 }如上声明了GenericsP<…

【C++】STL —— 用哈希表同时封装出unordered_set和unordered_map

目录 一、底层结构 1. 哈希的概念 二、哈希冲突 三、哈希函数 四、解决哈希冲突 1. 闭散列&#xff08;开放定址法&#xff09; 1. 线性探测 2. 二次探测 2. 闭散列的实现 3. 开散列&#xff08;拉链法&#xff09; 4. 开散列和闭散列的比较 五、HashTable的…