专项练习-数据库SQL-177题(下)

※食用指南:文章内容为牛客网《专项练习-数据库SQL》177道选择题,重点笔记,用于重复思考错题,加深印象

练习传送门:专项练习-数据库SQL-177题

目录:

1、维护参照完整性约束的策略

2、数据库事务的特性(ACID)

3、DQL、DML、DDL、DCL,提交数据的类型

4、视图的概念

5、索引的描述

6、各类查询

7、对表进行修改

[8、SQL Server中使用存储过程的优缺点](#8、SQL Server中使用存储过程的优缺点)

9、数据库系统三级模式结构

10、截取、删除、提取字符

11、最可能会导致SQL注入的字符

12、游标

13、事务和并发控制

14、各类存储过程

15、锁

16、解决事务的脏读、幻读的方法

17、事务隔离级别

18、批处理的规则

19、授权依据

20、数据库备份类型

21、语句顺序

22、数据类型的函数

23、主键


1、维护参照完整性约束的策略

①对于任何违反了参照完整性约束的数据更新,系统一概拒绝执行

②当删除被参照表的一个元组造成了与参照表的不一致,则删除参照表中的所有造成不一致的元组

③当删除或修改被参照表的一个元组造成了不一致,则将参照表中的所有造成和不一致的元组的对应属性设置为空值

2、数据库事务的特性(ACID)

|---------|------------------------------------------|
| 原子性 | 事务是最小的执行单位,不允许分割 |
| 一致性 | 执行事务前后,数据保持一致,对同一数据读取的结果相同 |
| 隔离性 | 并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的 |
| 持久性 | 一个事务被提交后对数据库中数据的改变是持久的 |

3、DQL、DML、DDL、DCL,提交数据的类型

|---------------|-------------------|-----------------------|
| 类型 | 用途 | 涉及语句 |
| 数据查询语言DQL | | SELECT、FROM、WHERE |
| 数据操纵语言DML | 对数据库里的数据进行操作 | INSERT、UPDATE、DELETE |
| 数据定义语言DDL | 大多在建立表时使用 | CREATE、ALTER、DROP |
| 数据控制语言DCL | 用于对事务的提交、回收和设置保存点 | GRANT、ROLLBACK、COMMIT |

DDL操作对象:TABLE、VIEW、INDEX、SYN、CLUSTER*(隐性提交,无法ROLLBACK)*

提交数据的三种类型

|------|------------------------------------------------------------------------------------------|
| 显式提交 | COMMIT |
| 隐式提交 | ALTER、AUDIT、COMMENT、CONNECT、CREATE、DISCONNECT、DROP、EXIT、GRANT、NOAUDIT、QUIT、REVOKE、RENAME |
| 自动提交 | SET AUTOCOMMIT ON |

4、视图的概念

①可以解决检索数据时一个表中得不到一个实体所有信息的问题

②视图是虚拟表,视图所引用的表称为视图的基表

③若基表的数据发生变化,则变化也会自动反映到视图中

④数据库存储的是视图的定义,不存放视图对应的数据

5、索引的描述

①可通过索引快速查找数据,减少查询执行时间

②数据库索引采用B+树,因为B+树在提高了磁盘IO性能的同时解决了元素遍历效率低下的问题

③如果WHERE子句中使用了索引,那么ORDER BY子句中不会使用索引

④索引提高了查询速度,但索引滥用会降低更新表的速度

⑤为提高效率可建立组合索引,遵循"最左前缀"原则

6、各类查询

①单列单值嵌套查询:结果集为一个值,一般使用=、<、>等运算符

②单列多值嵌套查询:子查询中,父查询中一般使用IN运算符

③多列多值嵌套查询:结果类似于一张虚拟表,父查询中只能使用EXISTS或NOT EXISTS

④集合查询:通常是利用UNION、EXCEPT、INTERSECT集合运算符实现两个表之间的数据查询

7、对表进行修改

|--------------------|------------------|
| ADD COLUMN | 增加列 |
| CHANGE | 修改列名或类型 |
| ALTER/DROP DEFAULT | 修改/删除列的默认值 |
| MODIFY | 修改列类型 |
| DROP | 删除列 |
| RENAME TO | 修改表名 |
| CHARACTER SET | 修改字符集 |
| COLLATE | 修改校对规则(比较和排序时用到) |

8、SQL Server中使用存储过程的优缺点

|--------|-----------|---------------------------------------------------------------------------------------------------------|
| SQL Server中使用存储过程的优缺点 |||
| 优点 | 执行速度快 | 存储过程只在创造时进行编译,已经通过语法检查和性能优化,以后每次执行存储过程都不需再重新编译 |
| 优点 | 允许组件式编程 | 当对数据库进行复杂操作时(如对多个表进行UPDATE、INSERT、QUERY、DELETE),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用 可多次调用该过程,提高代码的优化率和可读性 |
| 优点 | 减少网络流量 | 当在客户机上调用该存储过程时,网络中传递的只是该调用语句,否则将会是多条SQL语句 减轻了网络流量,降低了网络负载 |
| 优点 | 提高系统安全性 | 可将存储过程作为用户存取数据的管道,限制用户对数据表的存取权限,建立特定的存储过程供用户使用 避免非授权用户对数据的访问,保证数据的安全 |
| 缺点 | 移植性差 | 依赖于数据库厂商,难以移植(当一个小系统发展到大系统时,对数据库的要求也会发生改变) |
| 缺点 | 难以调试、维护 | 业务逻辑大的时候,封装性不够,难调试难以维护 |
| 缺点 | 服务器不能负载均衡 | 复杂的应用用存储过程来实现,就把业务处理的负担压在数据库服务器上了 无法通过中间层来灵活分担负载和压力.均衡负载等 |

9、数据库系统三级模式结构

①外模式是面向数据库用户或应用程序的局部数据视图

②索引的组织方式是B+树索引,还是Hash索引与数据库的内模式有关

③模式并不涉及数据的物理存储细节

④模式/内模式映像保证了数据库具有较高的物理独立性

10、截取、删除、提取字符

|-----------|--------------------------|
| CHARINDEX | 返回指定字符串中指定子字符串出现的起始位置的函数 |
| SUBSTRING | 截取指定字符串的方法 |
| STUFF | 删除指定长度的字符,并在删除的位置插入新的字符 |
| SOUNDEX | 返回指定字符串的SOUNDEX值 |

11、最可能会导致SQL注入的字符

'单引号作为MySQL中的字段值封装方式,最容易被用作注入攻击,可以执行恶意SQL语句,数据库中的数据都会被盗取

防止SQL注入的方法:

①机密信息必须加密或者HASH掉密码和敏感的信息

②正则表达式对用户的输入进行校验,限制长度,对单双引号进行转换

③直使用存储过程进行数据查询存取、使用参数化的SQL

④减少应用的异常信息的提示,最好使用自定义的错误信息对原始错误信息进行包装

⑥使用辅助软件或网站平台来检测是否有SQL注入(常见的检测工具JSKY、MDCSOFT SCAN、MDCSOFT-IPS)

12、游标

游标:从包括多条数据记录的结果集中每次提取一条记录以便处理的机制,可以看做是查询结果的记录指针

①游标允许定位在结果集的特定行

②从结果集的当前位置检索一行或一部分行

③支持对结果集中当前位置的行进行数据修改

④为由其他用户对显示在结果集中的数据所做的更改提供不同级别的可见性支持

13、事务和并发控制

①并发控制机制的好坏是衡量一个数据库管理系统性能的重要标志之一

②可串行性是判断并发事务是否正确的准则

SQL Server中每一条SELECT、INSERT、UPDATE、DELETE语句都是隐形事务的一部分,显性事务用BEGIN TRANSACTION明确指定事务

④事务的隔离级别越高,并发能力也就越低

14、各类存储过程

|----------------|----------------------------------------|
| sp_helpindex | 查看表中的索引信息 |
| sp_help | 查看有关数据库对象的摘要信息 |
| sp_helpdb | 查看指定数据库或全部数据库信息 |
| sp_helptext | 查看存储过程、视图、触发器等文本信息,用于获取自定义视图创建的T_SQL文本 |
| sp_refreshview | 更新视图数据 |

15、锁

|----------|----------------------------------------------------------|
| 排它锁X | 用于数据修改操作,其他人不能读也不能写,确保不会同时对同一资源进行多重更新 |
| 共享锁S | 共享锁锁定的资源可以被其他用户读取,但是其他用户无法修改,用于不更改或不更新数据的读取操作,如SELECT语句; |
| 更新锁U | 用于可更新的资源中,防止当多个会话在读取、锁定以及随后可能进行的资源更换时发生常见形式的死锁; |
| 架构锁 | 在执行依赖于表架构的操作时使用*(类型为:架构修改 Sch-M)、架构稳定性 Sch-S)* |

16、解决事务的脏读、幻读的方法

脏读的解决方法:

①修改时加排他锁,直到事务提交后释放,读取时加共享锁

不可重复读或幻读的解决方法

②读取数据时加共享锁,写数据时加排他锁,都是事务提交才释放锁

17、事务隔离级别

|------------------|---------------------------------------------------|
| Read uncommitted | 读未提交是事务隔离级别的最低级别 |
| Read committed | 读已提交,可避免脏读情况发生 |
| Repeatable Read | 确保事务可以多次从一个字段中读取相同的值,在此事务持续期间,禁止其他事务对此字段的更新 |
| Serializable | 最严格的事务隔离级别,要求所有事物被串行执行,不能并发执行,可避免脏读、不可重复读,幻读情况的发生 |

(15、16、17的详细内容具体可看本人笔记:MySQL数据分析进阶(十)事务

18、批处理的规则

批处理:指包含一条或多条T-SQL语句的语句组

①修改一个表中的字段名后,不可以在同一个批处理中引用这个新字段

②不能定义一个check约束后,立即在同一个批处理中使用

③Create default,Create rule,Create trigger,Create procedure,Create view等语句同一个批处理中只能提交一个

④不能把规则和默认值绑定到表字段或自定义字段上之后,立即在同一个批处理中使用

19、授权依据

某IT公司人事管理采用专门的人事管理系统来实现,后台数据库名为LF。

新人事部经理在访问员工信息表EMPL里的工资和奖金字段的时被拒绝,只能查看该表其他字段

解决方法:仅授予对表EMPL里的工资列和奖金列的SELECT权限,只给相应字段查询权限即可

|----------------|---------------------|
| db_accessadmin | 可以添加、删除用户的用户 |
| db_datareader | 可以查看所有数据库中用户表内数据的用户 |

20、数据库备份类型

|--------------|------------------------------------------------------------------------------|-------------------|
| 类型 | 概述 | 频率 |
| 完整数据库备份 | 可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象 | 花费更多的时间和空间 一周做一次 |
| 事务日志备份 | 并不备份数据库本身,只记录事务日志内容,备份的时候只需要复制自上次备份以来对数据库所做的改变 | 只需要很少的时间 每小时甚至更频繁 |
| 差异数据库备份 | 只备份数据库一部分的另一种方法,它不使用事务日志,相反,它使用整个数据库的一种新映象。它比最初的完全备份小,因为它只包含自上次完全备份以来所改变的数据库 | 存储和恢复速度快 每天做一次 |
| 文件和文件组备份 | 如果在创建数据库时,为数据库创建了多个数据库文件或文件组,可以使用该备份方式,如果这个数据库非常大,可以使用文件备份数据库的一部分 | 不是很常用 |

21、语句顺序

写法顺序:SELECT--FROM--WHERE--GROUP BY--HAVING--ORDER BY

执行顺序:FROM--WHERE--GROUP BY--HAVING--SELECT--ORDER BY

22、数据类型的函数

|-----------|-------------------------|
| CAST | 将某种数据类型的表达式显式转换为另一种数据类型 |
| CONCAT | 将两个字符串连接起来,形成一个单一的字符串 |
| ISNUMERIC | 测试有效数字的数值函数 |
| CHANGE | 修改字段名 |

23、主键

①一个数据列只能有一个主键,且不能为空值(NULL)

②主键一定是唯一性索引,唯一性索引并不一定就是主键

③一个表中可以有多个唯一性索引,但只能有一个主键

------------END

相关推荐
小诸葛的博客28 分钟前
pg入门1——使用容器启动一个pg
数据库
sleP4o1 小时前
Python操作MySQL
开发语言·python·mysql
Kenneth風车1 小时前
【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版
人工智能·算法·低代码·机器学习·数据分析
大熊程序猿1 小时前
python 读取excel数据存储到mysql
数据库·python·mysql
落落落sss1 小时前
sharding-jdbc分库分表
android·java·开发语言·数据库·servlet·oracle
jnrjian1 小时前
Oracle 启动动态采样 自适应执行计划
数据库·oracle
知识分享小能手2 小时前
mysql学习教程,从入门到精通,SQL DISTINCT 子句 (16)
大数据·开发语言·sql·学习·mysql·数据分析·数据库开发
lamb张2 小时前
MySQL锁
数据库·mysql
ForRunner1232 小时前
使用 Python 高分解决 reCAPTCHA v3 的指南
数据库·python·microsoft