数据库理论

1.mysql如何做分页

mysql数据库做分页用limit关键字,然后后面跟两个参数startindex和pageSize
limit分页查询:

select * from table_name limit 0,5 #:前五条数据

2.mysql存储引擎有哪些,各自特点是什么?

最主流用的比较多的是Innodb和myisam,memory安全没有保障所以用的比较少
innodb和myisam两个存储引擎的区别?
innodb实现了sql标准的四种隔离制度
innodb支持事物,myisam不支持
innodb支持外键,myisme不支持
innodb不支持全文索引,myisam支持全文索引
innodb提供提交,回滚,和崩溃恢复能力的事物安全能力,实现并发控制
myisam提供较高级的插入和查询记录的效率,主要用于插入和查询

innodb引擎的适用场景

需要事物的处理操作,更新数据需要使用,行级锁大数据量的写入大型互联网

myisme引擎的适用场景

不需要事物操作插入,更新少,读取频繁, 频繁统计技数

3.数据库如何建立索引

create index account_index on table name('字段名‘)

4.如何对应对数据的高并发,大量的数据计算

创建索引
数据库读写分离,两个数据库一个读一个写
外键去掉

5.数据库内连表,右连表,左连表

内连接是根据某一条件连接两个表共有的数据
右连接是根据某一条件及右边的表格连接数据,左边的表没有数据的话则为null
左连接是根据某一条件及左边的表格连接数据,右边的表没有数据的话诶null

6.视图和表的区别

视图是已经编译好的sql语句,是基于sql语句集的可视化表,而表不是视图是窗口表示内容
视图没有实际的物理记录,而表有
视图的建立和删除只是影响视图的本身对表没有什么影响

7.关系型数据库的特点

数据集中控制
数据的独立性好
数据的共享性好
数据结构化
统一的数据保护能力

8.数据库都有哪些索引

普通索引:普通索引就有一个功能:加速查找
唯一索引:唯一索引有两个功能:加速查找和唯一约束(可含null)
外键索引:有两个功能;加速查找和唯一约束(不可含null)
联合索引:联合索引将n个列组合成一个索引,应用场景:同时使用n列进行查询

9.数据库的存储过程

存储过程一般是作为独立的部分来执行,存储过程是一个预编译的sql语句,存储过程不允许执行return语句,但是可以通过out返回多个值
程序与数据库结合的三种方式
方式一:mysql存储过程:调用存储过程
方式二:mysql程序:纯sql语句
方式三:mysql:程序类和对象,即orm(本质)

10.数据库之sql优化

select句中避免使用‘*’
减少访问数据库的次数
删除重复的记录
用where子句代替having子句
用where替代order by;
减少对表的查询

11.char和vacher区别

char是固定长度,存储需要12个字节,处理速度比vachar快,费内存空间
vachar是不固定长度,需要存储13字节,节约存储空间

12.Mechached与redis

mechached:只是支持字符串,不能持久化,数据仅存在内存中宕机或重启数据将全部失效 不能进行异步分布,文件无法异步法
优点:mechached进程运行后,会预先申请一块比较大的内存自己管理
redis:支持服务端的数据类型,redis与mechached相比较来说拥有更多的数据结构并发支持更丰富的数据化操作可持久化
五大数据类型:string,hash,list,set和有序集合,redis是单进程的线程
缺点:数据库的容量受到物理限制。

13.sql注入

sql注入是比较常见的攻击方式之一,针对编程人员的疏忽,通过sql语句,实现账号无法登陆,甚至篡改数据库数据
防止:凡涉及到执行sql中变量的时候,切记不要用字符串的拼接

14.什么是触发器

触发器是一种特殊的存储过程,主要通过事件来触发而被执行的,他可以强化约束,来维护数据的完整性和一致性,可以跟踪数据内的操作从而不允许未经许可的更新和变化可以连级运算
只有表支持触发器,视图不支持触发器

15,游标是什么

是对查询出来的结果作为单元有效处理,游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行,可以对结果集当前行做修改,一般不使用游标,但是需要逐条处理数据的时候,游标显得很重要

16.数据库支持多有标准的sql数据类型,重要分为三类

数值类型(tinyint,int,bigint,浮点数,bit)
字符串类型(char和vachar,enum,text,set)
日期类型(data,datetime,timestamp)

17.mysql慢查询

慢查询对于跟踪有问题的查询很有用,可以分析出当前程序里那些sql语句比较消耗资源
慢查询定义:指mysql记录所有执行超过long_query_time参数设定时间值的sql语句慢查询日志就是记录这些sql的日志
mysql在windows系统中的配置文件一般是my.ini找到mysqld
log-slow-queries = F:\MySQL\log\mysqlslowquery.log 为慢查询日志存放的位置,一般要有可写权限 long_query_time = 2 2表示查询超过两秒才记录

18.memcached命中率

命中:可以直接通过缓存获取到需要的数据
不命中:无法直接通过缓存获取到想要的数据,需要再次查询数据库或者执行其他的操作,原因可能是由于缓存中根本不存在,或者缓存已经过期
缓存的命中率越高则表示使用缓存的收益越高,应额用的性能越好,抗病发能力越强
运行state命令可以查看memcached服务的状态信息,其中cmd—get表示总的get次数,get—hits表示命中次数,命中率=get—hits / cmd—get

19.Oracle和mysql该如何选择,为什么?

他们都有各自的优点和缺点,考虑到时间因素,我倾向于mysql
mysql开源
mysql轻便快捷
mysql对命令行和图形界面支持都很好
mysql支持通过query browser进行管理

20.什么时候建立索引?

经常出现关键字order by group by ,distinct后面的字段,建立索引
在union等集合操作的结果集字段上,建立索引,其建立索引的目的同上
为经常用作表查询选择字段,建立索引
在经常用作表连接的属性上,建立索引

21.sql语句应该考虑哪些安全

防止sql注入,对特殊字符进行转义,过滤或者使用预编译的sql语句绑定变量
最小权限原则,特别是不要用root账户,为不同的类型动作或者组建使用不同账户
当sql运行出错时,不要把数据库返回的报错信息全部显示给用户,以防止信息泄露服务器相关信息

22.数据库事物有哪几种

隔离性 持续性,一致性,原子性

23.mysql数据表什么时候容易损坏?

服务器突然断电导致数据文件损坏
强制关机,没有先关闭mysql服务器等

24.drop,delete,与truncate的区别

drop直接删除表
truncate删除表中的数据,在插入时自增长id又从1开始
delete删除表中数据,可以加where子句

25.数据库范例

第一种范式:无重复的列
第二种范式:就是非主属性非部分依赖关键字
第三种范式:就是属性不依赖于其他非主属性(消除沉余)

26.mysql锁的类型

根据锁的类型分:可以分为共享锁、排他锁、意向共享锁和意向排他锁
根据锁的粒度分:可以分为行锁、表锁
对于mysql而言事务机制更多是靠底层的存储引擎来实现的,因此,mysql层面只有表锁,
而支持事物的innodb存储引起则实现了行锁(在行相应的索引记录上的锁)
说明:对于更新操作(读不上锁),只有走索引才可能上行锁
MVCC(多版本并发控制)并发控制机制下,任何操作都不会阻塞读取操作,
读取操作也不会阻塞任何操作,只因为读不上锁
共享锁:由读表操作加上的锁,加锁后其他用户只能获取该表或行的共享锁,不能获取排他锁,
也就是说只能读不能写
排他锁:由写表操作加上的锁,加锁后其他用户不能获取该表或该行的任何锁,典型mysql事物中的更新操作
意向共享锁(IS):事物打算给数据行加行共享锁,事物在给一个数据行加共享锁前必须先取得该表的IS锁
意向排他锁(IX):事物打算给数据行加行排他锁,事物在给一个数据行家排他锁前必须先取得该表的IX锁

27.如何解决mysql数据库上的中文乱码问题?

在数据库安装的时候指定字符集
如果在按完了以后可以更改配置文件
建立数据库的时候指定字符集的类型
建立表的时候也指定字符集

28.数据库应用系统设计

规划
需求分析
概念模型设计
逻辑设计
物理设计
程序编制和调试
运行和维护

29.索引概念

mysql索引也叫键,是存储引擎用于快速查找到记录的一种数据结构索引对于良好的性能非常的关键,尤其是信息量比较大的时候
注意点:不要对重复的值的字段建立索引,避免查询mysql进行自动类型转换,因为转换会让索引不起作用
功能:
索引优化是对查询性能优化的有效手段
索引能够轻易将查询性能提高好几个数量级
索引相当于字典的音序表,如果要查那个就用音序表
特点:创建和维护会消耗很多时间和磁盘空间,但查询速度大大提高

30.Sqlalchemy

SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上 ,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect
用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实 现对数据库的操作

31.请描述数据库如何进行多表查询?

使用原生的sql语句
使用orm进行查询
嵌套查询
使用子查询
多表联合查询
联合语句查询
内连接查询
外连接查询
利用IN或NOTIN关键字限定范围
由In引入关联子查询
利用HAVING语句过滤分组数据


图片发自App

你可能感兴趣的:(数据库理论)