关于SQL常见的问题

关于SQL常见的问题
1.MySQL数据库中的char和varchar的主要区别是什么?哪个查询效率高?
char有固定的长度;varchar属于可变长的字符类型。
char是一种注重时间的存储方式;varchar则是重视空间的存储方式。
总之,char定长,存储效率不如varchar,对于短数据的查询优于varchar。
2.什么是SQL注入?如何防止SQL注入?
SQL注入:利用现有应用程序,将恶意的SQL命令注入到后台数据库执行一些恶意的操作。
防止策略:
	1.严格限制web应用的数据库的操作权限,给此用户提供仅仅能够满足其工作的最低权限,从而最大程度的减少注入攻击对数据库的危害
	2.检查输入的数据是否具有做期望的数据格式,严格限制变量的类型
	3.对进入数据库的特殊字符('  " 尖括号 & * ;等)进行转义处理,或编码处理
3.维护数据库的完整性、一致性,你喜欢用触发器还是自写业务逻辑?为什么?
尽可能用约束(包括check、逐渐、唯一键、外键、非空字段)实现,这种方法的效率最好;其次用触发器,这种方法可以保证无论何种业务系统访问数据库杜能维持数据库的完整性、一致性;最后在考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策。
4.什么是SQL server的确定性函数和不确定性函数?
只要是使用特定的输入值集并且数据库具有相同的状态,不管何时调用,始终能在范围相同结果的函数叫确定性函数。
即使访问的数据库的状态不变,每次输入特定的输入值都可能范围不同结果的函数叫做非确定性函数。
5.在为视图创建索引前,视图本身必须满足哪些条件?
1.视图及视图中引用的所有表都必须在同一数据库中,并具有用一个拥有者
2.索引视图无需包含要供优化器使用的查询中引用的所有表
3.必须先为视图创建唯一群集索引,然后才可以创建其他索引
4.创建基表、视图和索引以及修改基表和视图中的数据时,必须正确设置某些set选项,另外,如果这些set选项正确,查询优化器将不考虑索引视图
5.视图必须使用架构绑定创建,视图中引用的任何用户定义的函数必须使用schemabinding选项创建
6.另外,还要求有一定的磁盘空间来存放有索引视图定义的数据
6.哪类视图是可以更新的?哪类视图是不可更新的?各举一例说明。
基本表的行列子集视图一般是可更新的。
若视图的属性来自集函数、表达式,则该视图肯定是不可以更新的。
7.所有的视图是否都可以更新?为什么?
不是。
视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。
因为有些视图的更新不能唯一有意义地转换成相应基本表的更新,所以,并不是所有的视图都是可以更新的。
8.简述视图的优点
1.视图能够简化用户的操作
2.视图使用户能以多种角度看待同一数据
3.视图为数据库提供了一定程度的逻辑独立性
4.视图能够对机密数据提供安全保护
9.什么是基本表?什么是视图?
基本表是本身独立存在的表,在SQL中一个关系就对应一个表。
视图则是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。
10.什么是内存泄漏?
一般我们所说的内存泄漏指的是堆内存的泄露。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说给内存不能被使用,我们就说该内存被泄露了。
11.简述数据库的设计过程
数据库设计分为五个阶段:
1.需求分析:主要是准确收集用户信息需求和处理需求,并对收集的结果进行整理和分析,形成需求说明。
2.概念结构设计:对用户需求进行综合、归纳、抽象,形成一个与具体的DBMS无关概念模型(一般为ER模型)。
3.逻辑结构设计:将概念结构设计的概念模型转化为某个特定的DBMS所支持的数据模型,同时为各种用户和应用设计外模式。
4.物理结构设计:为设计好的逻辑模型选择物理结构,包括存储结构和存取方法等,建立数据库物理模式。
5.实施和维护:实施就是使用DLL语言建立数据库模式,将实际的数据载入数据库,建立真正的大数据库。维护阶段是对运行的数据库进行评价、调整和修改。
12.简述索引存取方法的作用和建立索引的原则
作用:加快查询速度
原则:
1.如果某属性或属性组经常出现在查询条件中,考虑为该属性或属性组建立索引
2.如果某个属性经常做微博最大值或者最小值等聚集函数的参数,考虑为该属性建立索引
3.如果某属性经常出现在连接操作的连接条件中,考虑为该属性或属性组建立索引
13.主键和唯一索引有什么区别?
相同点:他们都属于实体完整性约束。
不同点:
1.唯一性约束所在的列允许空值,但是主键所在的列不允许空值
2.可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的。但是,唯一性约束所在的列并不是表的主键列
3.唯一性约束强制在指定的列上创建一个唯一性索引。在默认情况下,创建唯一性的非聚簇索引,但是,也可以制定所创建的索引是聚簇索引
4.建立主键的目的是让外键来引用
5.一个表最多只有一个主键,但可以有很多唯一键
14.简述存储过程的优缺点
优点:
1.更快的执行速度:存储过程只能在创造时进行编译,以后每次执行存储过程都不需要重新编译,而一般SQL语句执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.与事务的结合,提供更好地解决方案:当对数据库进行复杂操作时(如对多个表进行update、insert、query和delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结果一起使用。
3.支持代码重用:存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高:可设定只有某此用户才具有对制定存储过程的使用权。
缺点:
1.如果更改范围大到需要对输入存储过程的参数进行修改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新GetValue()调用等等,这时候估计就比较繁琐了。
2.可移植性差:由于存储过程将应用程序绑定到SQL server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于RDBMS中间层中可能是一个更佳的选择。
15.通俗的理解三个范式
第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解
第二范式:2NF是对记录的唯一性约束,要求记录有唯一标识,即实体的唯一性
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行速率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。
16.解锁死锁的方法有哪些?
1.SQL server自动检测和消除死锁
2.设置死锁优先级
3.设置锁定超时
4.使用更新锁避免死锁
17.触发器分为事前触发器和时候触发器,这两种触发有何区别?语句级触发和行级触发有何区别?
事前触发器运行于触发事件发生之前,而时候触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。
语句触发器可以再语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值