SQL 的三十而已—SQL30 问

用户头像
大唐小生
关注
发布于: 2020 年 08 月 07 日
SQL的三十而已—SQL30问

第一问:SQL是什么?



SQL (Structured Query Language)是一门结构化查询语言,它遵循美国的ANSI的标准,多用于对数据库包括数据库中的数据进行操纵,如SELECT,UPDATE,DELETE,DROP等。



第二问:数据库是什么?

数据库是用来存储数据信息的地方,并提供数据排序、检索的能力。



第三问:数据库和数据仓库的区别是什么?

数据库(OLTP):主要是指传统的关系型数据库的应用,包括基本的、日常的事务的处理,更关注的是业务交易数据的处理。

数据仓库(OLAP):用来支持负责的数据分析工作,通常是分析某一阶段的业务发展状况,侧重于与决策支持。



第四问:数据库的类型有哪些?

关系型数据库,层级关系数据库,面向对象数据库,网络数据库。



第五问:SQL的操作有哪几类?

  • DDL (Data Definition Language) ,数据定义语言,如create ,drop 等。

  • DCL(Data Control Language),数据控制语言,如grant,revoke等。

  • DML(Data Manipulation Language),数据操作语言,如 insert,update等。

  • DQL(Data Query Language),数据查询语言,如select,join等。



第六问:视图是什么?

视图是作用在表上的预先定义好的一组并未真实执行的SQL语句,在查询的时候触发底层SQL执行的与真实表功能相近的“虚拟表”。视图的好处是可以屏蔽复杂SQL,保护数据安全。



第七问:SQL里面的JOIN有哪些?

JOIN的作用是当需要提取的数据分布在不同的表中的时候把两个或者多个表通过“键”关联起来,然后分别从不同的表中提取需要的数据。JOIN分为,LEFT JOIN,RIGHT JOIN,JOIN,FULL JOIN,SELF JOIN。



第八问:SQL中的子查询是什么?

子查询是相对于主查询而言的,在SQL执行过程中,通常是先执行子查询然后把子查询的结果传递给主查询供主查询使用。



第九问:数据库中的自增列是什么意思?

自增列是数据库在有新的记录增加时自动在该记录中对应的设定的列上自动填充递增数字的机制。



第十问:数据库约束是什么意思?

数据库中的约束指的是通过事先定义的规则或者取值范围等手段来确保字段的值在我们控制的范围之内。

常用的约束限制有:NOT NULL(非空约束),PRIMARY KEY(主键约束),FOREIGN KEY(外键约束),UNIQUE(唯一键约束),CHECK(检查约束),DEFAULT(默认值)。



第十一问:数据库中的键的分类和他们的作用是什么?

  • Super Key,超键,一个或者多个字段组成的用来唯一标识一条记录的字段的集合。

  • Primary Key ,主键,与超键的定义一致,但是要满足标识主键的字段必须非空的条件,另外一张表中只能有一个主键。

  • Foreign Key,外键,如果一张表中的一个字段是另外一张表中的主键,那么在该表中该字段就别成为外键。

  • Unique Key,唯一键,与主键的定义基本一致,不过唯一键字段的值可以为空。

  • Candidate Key,候选建,除主键意外的其他可以用来标识唯一记录的字段的集合。

  • Compound Key ,复合键,候选键和主键的组合。



第十二问:数据库的三范式是什么意思?

三范式是三种不同等级的数据表设计的规范。具体来说

  • 1NF是对属性的原子性约束,要求属性具有原子性,不可再分解。

  • 2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性。

  • 3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

等级越高冗余性越小,目前最高的等级是5NF。



第十三问:规范化和非规范化是什么

这是关于数据库设计方面的内容,规划化主要是指数据库在设计上满足范式的要求,尽量减少字段之间的依赖关系以及表中字段的冗余。而非规范化则与规范化相反,是指把内容尽可能的放在一张表中。



那么到底孰优孰劣呢?其实二者各自有自己不同的应用场景,规划化主要用在业务数据库的设计中,减少数据的容易保证数据的一致性。二非规范化主要用在数据仓库建模中,允许一定的冗余可以提高查询效率,本质上是用空间来换取时间。



第十四问:存储过程是什么?

存储过程是一组SQL语句的集合,用来定义一组执行语句或者一个函数功能。使用存储过程可以降低网络的抖动以及提高SQL的执行效率。



第十五问:索引是什么?

索引是定义在列上的对一列或者多列数据进行排列的一种存储结构,使用索引来提高查询的速度。索引可分为普通索引,唯一索引,聚集索引,非聚集索引等。



第十六问:触发器是什么?

触发器是应用表上的一类特有的操作,比如delete,update等。触发器类似于存储过程,不过需要事件来出发存储触发器动作的执行。当触发器设定的触发条件被触发时,触发器就会自动执行预先定义的动作。



第十七问:数据库事务的四大特性是什么?

四大特性分别是

  • A(Atomicity):原子性,是指事务是一个不可分割的执行单元,要不全部执行要么全部不执行,不存在一半执行,一半未执行的情况。

  • C(Consistency) :一致性,是指事务执行之前和执行之后数据库的完整性没有被破坏。

  • I(Isolation):隔离性,是指多个事务并发操作时,每个事务都是独立运行的,不会互相影响。

  • D(Durability):持久性,是指事务执行完成后对数据库所做的操作永久的保留在了数据库中,不可被回滚。



第十八问:SQL的中条件过滤是什么意思?

过滤主要用来减少查询结果的数据量,常用的有where,having。



第十九问:SQL中常用的聚合函数有哪些?

聚合函数用来对数据库中数据做数学运算然后返回唯一的结果,常用的有sum(求和),count(计数),avg(求平均值),max(最大值),min(最小值)。



第二十问:SQL中常用的字符串函数有哪些?

  • SQL中的字符串函数主要用来对字符型字段进行操作,常用的有

  • LEN(字符串的长度)

  • LOWER(字符串中的所有字母大写 )

  • UPPER(字符串中的所有字母小写)

  • SUBSTRING(截取字符串)

  • LTRIM(去除左边的空格)

  • RTRIM(去除右边的空格)

  • CONCAT(把多个字符串拼接在一起)

  • REPLACE(替换字符串中的内容)。



第二十一问:游标是什么?

当SQL语句在内存中执行时,会在内存中生成一个临时数据集,游标就是这一堆数据集的一个指针。游标可以指向一条或者多条数据,但是处理的时候只能一条一条的执行。游标分为两类:显式游标和隐式游标。前者是内置的不需要特殊说明,后者一般是自定义的,使用DECLEAR关键字来定义。



第二十二问:常用的关系型数据库有哪些?

常用的关系型数据库有mysql,oracle,SQL Server,DB2等。



第二十三问:数据库中的NULL值,空值,和零值区别是什么?

NULL值是表示这个字段的值不存在,而空值和0表示字段的值存在,但是分别是空和0.



第二十四问:数据库中的字段是什么意思?

数据库中的数据按照二维表格的形式存在的,字段就是对应表格中的一列。通常和“列”、“属性”可以互换使用。如果一张表是一个实体,那么字段就代表该实体的一种属性。



第二十五问:SQL和NOSQL有什么区别

SQL主要是针对关系型数据库而言的,核心数据事务的ACID特性。NOSQL是最近新出的概念,主要是针对非关系型数据库,大数据环境下非结构化数据存储而设计的数据库,对标准的SQL语法支持不够友好。



第二十六问:SQL查询分页是什么意思?

分页就是把SQL查询的结果(数据量过大时)在有限的页面上分为多次展示,目的是提高页面的可读性。分页又分为逻辑分页和物理分页。逻辑分页是一次把所有的结果查询出来,只是在展示的时候分为多页来展示。物理分页是是使用数据库自带的分页机制来完成分页操作,每次只查出当前页面可展示条数的结果。通常Mysql使用limit 和offset来分页,oracle使用rownum来控制分页。



第二十七问:锁是什么意思?

数据库中的锁是为了避免多个用户或者程序对同一条记录或者表操作时互相影响最终造成数据库中数据的不正确性。常见的锁有,表级锁、行级锁、页级锁;共享锁、排它锁、意向锁;乐观锁、悲观锁。



第二十八问:静态SQL和动态SQL是什么意思?

静态SQL是在编译阶段就可以确定数据库需要对哪些记录做哪些操作,如 select * from table1 where id=123。

动态SQL是指在编译阶段并未给出完整的SQL语句,只是确定了操作的种类但是并未指定操作的数据范围。直白一点就是在SQL中使用了一些变量,而这些变量的值在执行的时候才从外部传入。如set @date='2020-08-01' exec ('select * from table1 where date<=@date)。



第二十九问:Mysql数据库执行引擎有哪些?

  • InnoDB,支持事务,有行级锁和外键约束,但是不支持全文索引,适用于更新操作多,多并发的操作。

  • MyISAM,不支持事务,支持表级锁,适用于经常读取数据的场景。

  • 其他还有HEAP,ISAM等,不常用,不做具体介绍了。



第三十问:读写分离是什么意思?

数据库读写分离是指把对数据库操作的动作分为两类,一类是对数据库中的数据做更改如insert,update,delete等,一类是只查询的操作,如select。针对这两类操作分别使用不同的两台或者多台服务器来承载对应的操作以减轻所有操作都在一台机器上执行的服务压力。








发布于: 2020 年 08 月 07 日 阅读数: 34
用户头像

大唐小生

关注

大唐小生 2020.07.23 加入

公众号【SQL_BOY】作者 ”A SQL_BOY,BUT NOT ONLY 'CRUD' “

评论

发布
暂无评论
SQL的三十而已—SQL30问