收藏 分销(赏)

2025春招SQLServer面试题.pdf

上传人:唯嘉 文档编号:10287861 上传时间:2025-05-16 格式:PDF 页数:49 大小:1.43MB
下载 相关 举报
2025春招SQLServer面试题.pdf_第1页
第1页 / 共49页
2025春招SQLServer面试题.pdf_第2页
第2页 / 共49页
点击查看更多>>
资源描述
一、数据库基础知识(通用)篇1.什么是视图(View)?2.什么是T-SQL?3.SQL Server中的主要组件是什么?4.视图的优缺点有哪些?5.什么是SQL Server Agent?6.什么是主键(Primary Key)?7.游标是什么?8.什么是存储过程(Stored Procedure)?9.什么是触发器(Trigger)?10.什么是事务(Transaction)?11.如何在SQL Server中进行数据备份和恢复?12.如何使用SQL Server进行数据导入和导出?13.如何优化SQL查询性能?14.SQL Server中如何管理用户和权限?15.如何在SQL Server中处理异常和错误?16.什么是临时表,临时表什么时候删除?17.说说非关系型数据库和关系型数据库区别,优势比较?18.说说SqlServer数据库中drop、truncate、delete区别19.触发器的作用是什么?20.说说主键、外键、超键、候选键21.为什么用自增列作为主键?22.什么是存储过程?用什么来调用?23.说说存储过程的优缺点?24.说说存储过程与函数的区别25.什么是数据库范式,根据某个场景设计数据表?26.说说你了解或使用过的数据库设计工具27.varchar和char的使用场景?28.说说like%和-的区别29.说说count(*)、count(1)、count(column)的区别30.什么是最左前缀原则?31.什么是 内连接、外连接、交叉连接、笛卡尔积等?32.SQL语言分类33.什么是索引?34.索引的作用?它的优点缺点是什么?35.索引的优缺点有哪些?36.什么样的字段适合建索引?37.说说聚集索引和非聚集索引区别?38.说说什么是脏读,幻读,不可重复读39.如何避免脏读、避免幻读,避免不可重复读取?40.什么是事务(Transaction)?二、SqlServer笔试基础篇1求年龄大于所有女同学年龄的男学生姓名和年龄。2.求年龄大于女同学平均年龄的男学生姓名和年龄。3.在 SC 中检索成绩为空值的学生学号和课程号。4.检索姓名以 WANG 打头的所有学生的姓名和年龄。5.检索学号比 WANG 同学大,而年龄比他小的学生姓名。6.统计每门课程的学生选修人数(超过 2 人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。7.求 LIU 老师所授课程的每门课程的学生平均成绩。8.求选修 C4 课程的学生的平均年龄。9统计有学生选修的课程门数。10.在基本表 SC 中修改 4 号课程的成绩,若成绩小于等于 75 分时提高 5%,若成绩大于 75 分时提高 4%(用两个 UPDATE 语句实现)。11.把低于总平均成绩的女同学成绩提高 5%。12.把选修数据库原理课不及格的成绩全改为空值。13把WANG 同学的学习选课和成绩全部删去。14 在基本表 SC 中删除尚无成绩的选课元组。15 往基本表 S 中插入一个学生元组(S9,WU,18)。16.什么是SQL注入式攻击?三、SqlServer笔试高级篇1.什么是内存泄漏?2.维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?3.什么是事务?什么是锁?4.什么是SQL注入式攻击?5.如何防范SQL注入式攻击?6.对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?7.什么是相关子查询?如何使用这些查询?8.你可以用什么来确保表格里的字段只接受特定范围里的值?9.有哪些操作会使用到TempDB;如果TempDB异常变大,可能的原因是什么,该如何处理;10.Index有哪些类型,它们的区别和实现原理是什么,索引有啥优点和缺点;如何为SQL语句创建合适的索引,索引创建时有哪些需要,注意的项,如何查看你创建的索引是否被使用;如何维护索引;索引损坏如何检查,怎么修复;T-SQL有更好的索引存在,但是运行,时并没有使用该索引,原因可能是什么;11.Job信息我们可以通过哪些表获取;系统正在运行的语句可以通过哪些视图获取;如何获取某个T-SQL语句的IO、Time等信息;12、SqlServer数据库读写分离配置过吗?有几种模式?各有什么特点?13.在事务发布中,如何解决数据延迟问题,例如:主库插入一条数据,需要马上查询,默认查询从库,而主库中的数据可能有延迟,没有及时复制到从库中。如何解决?一、数据库基础知识(通用)篇 1.什么是视图(View)?视图是虚拟表,由一个查询定义,可简化复杂查询操作。2.什么是T-SQL?T-SQL(Transact-SQL)是SQL Server中的一种SQL语言扩展,用于编写存储过程、触发器等。3.SQL Server中的主要组件是什么?SQL Server中的主要组件包括数据库引擎、分析服务、报告服务和集成服务。4.视图的优缺点有哪些?优点:1对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。2)用户通过简单的查询可以从复杂查询中得到结果。3)维护数据的独立性,试图可从多个表检索数据。4)对于相同的数据可产生不同的视图。缺点:性能:查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,那么就无法更改数据5.什么是SQL Server Agent?SQL Server Agent是SQL Server中的作业调度器,用于执行定时作业、备份计划等任务。6.什么是主键(Primary Key)?主键是表中的一列或一组列,其值能唯一标识表中的每一行数据。7.游标是什么?游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。8.什么是存储过程(StoredProcedure)?存储过程是一组预编译的SQL语句集合,可被多次调用执行。9.什么是触发器(Trigger)?触发器是与表相关联的特殊类型的存储过程,当表上发生特定事件时自动执行。10.什么是事务(Transaction)?事务是由一个或多个SQL语句组成的逻辑操作单元,要么全部执行成功,要么全部回滚。11.如何在SQL Server中进行数据备份和恢复?1.打开 SQL Server Management Studio 并连接到目标数据库服务器。2.在对象资源管理器中,展开 数据库 节点,选择要备份的数据库。3.右键单击选定的数据库,选择 任务,然后选择 备份。4.在 备份数据库 对话框中,选择 备份类型,如完整备份、差异备份或事务日志备份。5.指定备份的目标位置,可以是磁盘文件或磁带设备。6.根据需要,设置其他备份选项,如备份名称、描述等。7.单击 确定 开始备份过程。数据恢复:1.打开 SQL Server Management Studio 并连接到目标数据库服务器。2.在对象资源管理器中,展开 数据库 节点,右键单击目标数据库,选择 任务,然后选择 还原。3.在 设备 选项卡中,选择要恢复的备份文件。4.如果需要,可以选择恢复到新的数据库或覆盖现有的数据库。5.在 选项 选项卡中,根据需要设置恢复选项,如文件位置、日志恢复方式等。6.单击 确定 开始恢复过程。当然,您也可以使用 Transact-SQL(T-SQL)语句来完成备份和恢复操作。例如,使用 BACKUP DATABASE 和 RESTORE DATABASE 命令来执行相应的操作,具体语法和选项的使用可以参考 SQL Server 的文档或者官方网站。请注意,在进行数据备份和恢复操作时,请确保您具有足够的权限并小心谨慎,以避免意外数据丢失或覆盖。此外,定期进行数据备份是保护数据安全和灾难恢复的重要步骤。12.如何使用SQL Server进行数据导入和导出?使用 SQL Server 进行数据导入和导出,可以通过 SQL Server Management Studio(SSMS)或者使用 Transact-SQL(T-SQL)语句来完成。下面是两种常见的方法:方法一:使用 SQL Server Management Studio(SSMS)1.打开 SQL Server Management Studio 并连接到目标数据库服务器。2.在对象资源管理器中,展开 数据库 节点,选择要进行数据导入或导出的数据库。3.右键单击选定的数据库,选择 任务,然后选择 导入数据 或 导出数据。4.在 选择数据源 对话框中,根据需要选择数据的来源,可以是 SQL Server、Excel 文件、CSV 文件等。5.根据选定的数据源,按照向导提供更详细的信息(如连接字符串、文件路径等)并设置其他导入或导出选项。6.单击 下一步 并按照向导的指示进行配置,最后单击 完成 开始导入或导出过程。方法二:使用 Transact-SQL(T-SQL)语句1.打开 SQL Server Management Studio 并连接到目标数据库服务器。2.打开新查询窗口,并使用以下 T-SQL 命令进行数据导入或导出操作:数据导入:示例:数据导出:Copy CodeBULK INSERT 目标表名FROM 数据源文件路径WITH(FIELDTERMINATOR=字段分隔符,ROWTERMINATOR=行结束符,-其他可选参数);Copy CodeBULK INSERT dbo.CustomersFROM C:datacustomers.csvWITH(FIELDTERMINATOR=,ROWTERMINATOR=n,FIRSTROW=2-可选,指定从第几行开始导入);Copy CodeBULK INSERT 数据源表名FROM 目标文件路径WITH(DATAFILETYPE=widechar,FIELDTERMINATOR=字段分隔符,ROWTERMINATOR=行结束符,-其他可选参数);示例:13.如何优化SQL查询性能?优化 SQL 查询性能是提升数据库系统整体性能的重要方面。下面是一些常见的方法和技巧来优化 SQL 查询性能:1.索引优化:创建适当的索引,可以加速查询操作。在经常被查询的列上创建索引,并根据查询条件选择合适的索引类型(如聚簇索引、非聚簇索引等)。避免过多的索引,因为过多的索引可能会导致查询性能下降和额外的维护开销。定期重新组织或重建索引,以保持索引的有效性和性能。2.查询优化:编写高效的查询语句,避免不必要的查询和复杂的连接操作。尽量使用简洁的查询条件,并使用合适的 JOIN 类型。使用合适的表设计,避免过度规范化和冗余数据。使用合适的数据类型和长度,以减少存储和处理的资源消耗。Copy CodeBULK INSERT dbo.CustomersFROM C:datacustomers_export.csvWITH(DATAFILETYPE=widechar,FIELDTERMINATOR=,ROWTERMINATOR=n);3.查询计划优化:使用 SQL Server 提供的查询分析器或计划缓存来分析和优化查询计划。根据查询执行计划的反馈,考虑添加或修改索引、重构查询语句或者更改数据库配置参数。4.分区表:对于大型表,可以考虑使用分区表来分割数据并提高查询性能。根据查询的频率和范围,将表分成多个分区,并在查询时只扫描必要的分区。5.批量操作和事务优化:对于大批量数据的插入、更新或删除操作,使用批量操作(如 BULK INSERT、BULK UPDATE、BULK DELETE)可以显著提高性能。合理控制事务的粒度,避免事务范围过大,减少锁竞争和资源消耗。6.监控和调整:定期监控数据库的性能指标,如查询执行时间、磁盘 I/O、内存利用率等,及时发现潜在的性能问题。根据实际情况,调整数据库配置参数、硬件资源或者相关的应用程序代码。需要根据具体的数据库系统和业务需求来选择适合的优化策略,并进行综合考虑。同时,在进行任何性能优化操作前,请务必备份数据库以防意外数据丢失。14.SQL Server中如何管理用户和权限?在 SQL Server 中,可以使用以下方法来管理用户和权限:1.创建用户:使用 CREATE LOGIN 语句创建登录名(登录名用于连接到 SQL Server 实例)。使用 CREATE USER 语句将登录名与数据库用户相关联。2.授予权限:使用 GRANT 语句为用户授予数据库级别的权限,如 SELECT、INSERT、UPDATE、DELETE 等。使用 GRANT 语句为用户授予表级别的权限,如授予对特定表的 SELECT、INSERT、UPDATE、DELETE 权限。使用 GRANT 语句为用户授予存储过程、视图或函数的执行权限。3.撤销权限:使用 REVOKE 语句撤销已授予的权限。4.角色管理:创建角色:使用 CREATE ROLE 语句创建角色。授予角色权限:使用 GRANT 语句将权限授予给角色。将用户添加到角色:使用 sp_addrolemember 存储过程将用户添加到角色中。从角色中删除用户:使用 sp_droprolemember 存储过程将用户从角色中删除。5.系统权限:使用 GRANT 语句为用户或角色授予服务器级别的权限,如 sysadmin、dbcreator、bulkadmin 等。6.查看权限:使用系统函数和视图,如 sys.database_permissions、sys.server_permissions、fn_my_permissions 等,可以查看用户和角色的权限信息。7.修改密码:使用 ALTER LOGIN 语句来更改登录名的密码。需要注意的是,在进行用户和权限管理时,请使用足够的权限账户,并且小心谨慎操作,以确保安全性并避免意外数据泄漏或损坏。15.如何在SQL Server中处理异常和错误?在 SQL Server 中,可以使用以下方法来处理异常和错误:1.TRY.CATCH 块:使用 TRY.CATCH 块来捕获和处理异常。在 TRY 块中编写可能抛出异常的代码。在 CATCH 块中指定异常处理逻辑,如记录错误信息、回滚事务等。示例代码:1.错误处理函数和视图:使用系统函数和视图来获取有关错误的详细信息,如 ERROR_MESSAGE()、ERROR_NUMBER()、ERROR_SEVERITY()、ERROR_STATE()等。这些函数和视图可以在 CATCH 块中使用,以便动态地记录或处理错误信息。2.抛出自定义错误:使用 THROW 语句在代码中主动抛出自定义错误。可以指定一个错误号、错误消息和错误状态。示例代码:sqlCopy CodeBEGIN TRY -可能抛出异常的代码 -例如执行一条可能会引发异常的 SQL 语句END TRYBEGIN CATCH -异常处理逻辑 -记录错误信息或执行相应的补救措施END CATCH;sqlCopy CodeBEGIN TRY IF THROW 50001,自定义错误消息,1;END TRYBEGIN CATCH -异常处理逻辑 -记录错误信息或执行相应的补救措施 SELECT ERROR_NUMBER()AS ErrorNumber,ERROR_MESSAGE()AS ErrorMessage;END CATCH;1.错误日志和事件查看器:SQL Server 会将错误信息记录到错误日志中,可以使用系统存储过程 sp_readerrorlog 或查看 SQL Server 错误日志文件来检查错误信息。使用 SQL Server Management Studio(SSMS)中的事件查看器可以实时监视和分析数据库中的事件和错误。需要根据具体的业务需求和情况来确定如何处理异常和错误,并进行适当的异常处理和错误记录。16.什么是临时表,临时表什么时候删除?临时表可以手动删除:DROP TEMPORARY TABLE IF EXISTS temp_tb;临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间。因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表。创建临时表的语法与创建表语法类似,不同之处是增加关键字TEMPORARY,如:CREATE TEMPORARY TABLE tmp_table(NAME VARCHAR(10)NOT NULL,time date NOT NULL);select*from tmp_table;17.说说非关系型数据库和关系型数据库区别,优势比较?非关系型数据库的优势:性能:NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。可扩展性:同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。关系型数据库的优势:复杂查询:可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。事务支持:使得对于安全性能很高的数据访问要求得以实现。其他:1.对于这两类数据库,对方的优势就是自己的弱势,反之亦然。2.NOSQL数据库慢慢开始具备SQL数据库的一些复杂查询功能,比如MongoDB。3.对于事务的支持也可以用一些系统级的原子操作来实现例如乐观锁之类的方法来曲线救国,比如Redis set nx。18.说说SqlServer数据库中drop、truncate、delete区别 最基本:1)drop直接删掉表。2)truncate删除表中数据,再插入时自增长id又从1开始。3)delete删除表中数据,可以加where字句。(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。(2)表和索引所占空间。当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,而DELETE操作不会减少表或索引所占用的空间。drop语句将表所占用的空间全释放掉。(3)一般而言,drop truncate delete(4)应用范围。TRUNCATE 只能对TABLE;DELETE可以是table和view(5)TRUNCATE 和DELETE只删除数据,而DROP则删除整个表(结构和数据)。(6)truncate与不带where的delete:只删除数据,而不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。(7)delete语句为DML(data maintain Language),这个操作会被放到 rollback segment中,事务提交后才生效。如果有相应的 tigger,执行的时候将被触发。(8)truncate、drop是DLL(data define language),操作立即生效,原数据不放到 rollback segment中,不能回滚。(9)在没有备份情况下,谨慎使用 drop 与 truncate。要删除部分数据行采用delete且注意结合where来约束影响范围。回滚段要足够大。要删除表用drop;若想保留表而将表中数据删除,如果与事务无关,用truncate即可实现。如果和事务有关,或老师想触发trigger,还是用delete。(10)Truncate table 表名 速度快,而且效率高,因为:?truncate table 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。(11)TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。(12)对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。19.触发器的作用是什么?触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。20.说说主键、外键、超键、候选键 超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。候选键:是最小超键,即没有冗余元素的超键。主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。外键:在一个表中存在的另一个表的主键称此表的外键。21.为什么用自增列作为主键?如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引、如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。数据记录本身被存于主索引(一颗B+Tree)的叶子节点上。这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页(节点)如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新记录都要被插到现有索引页的中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建表并优化填充页面。22.什么是存储过程?用什么来调用?存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。调用:1)可以用一个命令对象来调用存储过程。2)可以供外部程序调用,比如:C#程序。23.说说存储过程的优缺点?优点:1)存储过程是预编译过的,执行效率高。2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。3)安全性高,执行存储过程需要有一定权限的用户。4)存储过程可以重复使用,可减少数据库开发人员的工作量。缺点:移植性差24.说说存储过程与函数的区别(1)存储过程用户在数据库中完成特定操作或者任务(如插入,删除等),函数用于返回特定的数据。(2)存储过程声明用procedure,函数用function。(3)存储过程不需要返回类型,函数必须要返回类型。(4)存储过程可作为独立的pl-sql执行,函数不能作为独立的plsql执行,必须作为表达式的一部分。(5)存储过程只能通过out和in/out来返回值,函数除了可以使用out,in/out以外,还可以使用return返回值。(6)sql语句(DML或SELECT)中不可用调用存储过程,而函数可以。25.什么是数据库范式,根据某个场景设计数据表?第一范式:(确保每列保持原子性)所有字段值都是不可分解的原子值。第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。上表所示的用户信息遵循了第一范式的要求,这样在对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。第二范式:(确保表中的每列都和主键相关)在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键。第三范式:(确保每列都和主键列直接相关,而不是间接相关)数据表中的每一列数据都和主键直接相关,而不能间接相关。第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。BCNF:符合3NF,并且,主属性不依赖于主属性。若关系模式属于第二范式,且每个属性都不传递依赖于键码,则R属于BC范式。通常BC范式的条件有多种等价的表述:每个非平凡依赖的左边必须包含键码;每个决定因素必须包含键码。BC范式既检查非主属性,又检查主属性。当只检查非主属性时,就成了第三范式。满足BC范式的关系都必然满足第三范式。还可以这么说:若一个关系达到了第三范式,并且它只有一个候选码,或者它的每个候选码都是单属性,则该关系自然达到BC范式。一般,一个数据库设计符合3NF或BCNF就可以了。第四范式:要求把同一表内的多对多关系删除。第五范式:从最终结构重新建立原始结构。26.说说你了解或使用过的数据库设计工具 数据库设计工具DbVisualizer数据库设计工具Vertabelo数据库设计工具DbSchema数据库设计工具Toad Data Modeler数据库设计工具PowerDesigner27.varchar和char的使用场景?1.char的长度是不可变的,而varchar的长度是可变的。定义一个char10和varchar10。如果存进去的是csdn,那么char所占的长度依然为10,除了字符csdn外,后面跟六个空格,varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的。2.char的存取速度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找。char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率。varchar是以空间效率为首位。3.char的存储方式是:对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节。varchar的存储方式是:对每个英文字符占用2个字节,汉字也占用2个字节。4.两者的存储数据都非unicode的字符数据。28.说说like%和-的区别 通配符的分类%百分号通配符:表示任何字符出现任意次数(可以是0次).下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符.like操作符:LIKE作用是指示mysql后面的搜索模式是利用通配符而不是直接相等匹配进行比较.注意:如果在使用like操作符时,后面的没有使用通用匹配符效果是和=一致的,SELECT*FROM products WHERE products.prod_name like 1000;只能匹配的结果为1000,而不能匹配像JetPack 1000这样的结果.%通配符使用:匹配以yves开头的记录:(包括记录yves)SELECT FROM products WHERE products.prod_name like yves%;匹配包含yves的记录(包括记录yves)SELECT FROM products WHERE products.prod_name like%yves%;匹配以yves结尾的记录(包括记录yves,不包括记录yves,也就是yves后面有空格的记录,这里需要注意)SELECT*FROM products WHERE products.prod_name like%yves;通配符使用:SELECT FROM products WHERE products.prod_name like yves;匹配结果为:像yyves这样记录.SELECT FROM products WHERE products.prodname like yves;匹配结果为:像yvesHe这样的记录.(一个下划线只能匹配一个字符,不能多也不能少)注意事项:注意大小写,在使用模糊匹配时,也就是匹配文本时,mysql是可能区分大小的,也可能是不区分大小写的,这个结果是取决于用户对MySQL的配置方式.如果是区分大小写,那么像YvesHe这样记录是不能被yves_这样的匹配条件匹配的.注意尾部空格,%yves是不能匹配heyves 这样的记录的.注意NULL,%通配符可以匹配任意字符,但是不能匹配NULL,也就是说SELECT*FROM products WHERE products.prod_name like%;是匹配不到products.prod_name为NULL的的记录.技巧与建议:正如所见,MySQL的通配符很有用。但这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长。这里给出一些使用通配符要记住的技巧。不要过度使用通配符。如果其他操作符能达到相同的目的,应该 使用其他操作符。在确实需要使用通配符时,除非绝对有必要,否则不要把它们用 在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起 来是最慢的。仔细注意通配符的位置。如果放错地方,可能不会返回想要的数.29.说说count(*)、count(1)、count(column)的区别 count()对行的数目进行计算,包含NULLcount(column)对特定的列的值具有的行数进行计算,不包含NULL值。count()还有一种使用方式,count(1)这个用法和count()的结果是一样的。性能问题:1.任何情况下SELECT COUNT()FROM tablename是最优选择;2.尽量减少SELECT COUNT()FROM tablename WHERE COL=value 这种查询;3.杜绝SELECT COUNT(COL)FROM tablename WHERE COL2=value 的出现。如果表没有主键,那么count(1)比count()快。如果有主键,那么count(主键,联合主键)比count()快。如果表只有一个字段,count()最快。count(1)跟count(主键)一样,只扫描主键。count()跟count(非主键)一样,扫描整个表。明显前者更快一些。30.什么是最左前缀原则?多列索引:ALTER TABLE people ADD INDEX lname_fname_age(lame,fname,age);为了提高搜索效率,我们需要考虑运用多列索引,由于索引文件以BTree格式保存,所以我们不用扫描任何记录,即可得到最终结果。注:在mysql中执行查询时,只能使用一个索引,如果我们在lname,fname,age上分别建索引,执行查询时,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引。最左前缀原则:顾名思义,就是最左优先,上例中我们创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,fname,age)组合索引。31.什么是 内连接、外连接、交叉连接、笛卡尔积等?内连接:只连接匹配的行左外连接:包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行右外连接:包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行例如1:例如2:SELECT a.,b.FROM luntan LEFT JOIN usertable as b ON a.username=b.usernameSELECT a.,b.FROM city as a FULL OUTER JOIN user as b ON a.username=b.username全外连接:包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。交叉连接:生成笛卡尔积它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配例如:32.SQL语言分类 SQL语言共分为四大类:一、数据查询语言DQL二、数据操纵语言DML三、数据定义语言DDL四、数据控制语言DCL。1.数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:SELECTFROMWHERE2.数据操纵语言DML数据操纵语言DML主要有三种形式:SELECT type,pub_name FROM titles CROSS JOIN publishers ORDER BY type1)插入:INSERT2)更新:UPDATE3)删除:DELETE3.数据定义语言DDL数据定义语言DDL用来创建数据库中的各种对象-表、视图、索引、同义词、聚簇等如:CREATE TABLE/VIEW/INDEX/SYN/CLUSTER表 视图 索引 同义词 簇DDL操作是隐性提交的!不能rollback4.数据控制语言DCL数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。如:1)GRANT:授权。2)ROLLBACK WORK TO SAVEPOINT:回退到某一点。回滚-ROLLBACK;回滚命令使数据库状态回到上次最后提交的状态。其格式为:SQLROLLBACK;3)COMMIT WORK:提交。在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看到所做的事情,别人只有在最后提交完成后才可以看到。提交数据有三种类型:显式提交、隐式提交及自动提交。下面分别说明这三种类型。(1)显式提交用COMMIT命令直接完成的提交为显式提交。其格式为:SQLCOMMIT;(2)隐式提交用SQL命令间接完成的提交为隐式提交。这些命令是:ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。(3)自动提交若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。其格式为:SQLSET AUTOCOMMIT ON;33.什么是索引?何为索引:数据库索引,是数据库管理系统中一个
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 通信科技 > 计算机应用

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服