MySql
关系型数据库:Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。
非关系型数据库:NoSql、Cloudant、MongoDb、redis、HBase等
区别:
1、关系型数据库是采用了二维表格模型来组建数据库。优点是:容易理解,便于使用和维护,支持复杂sql的查询。 缺点是:海量数据读写效率慢,难以横向拓展。
2、非关系型数据库采用了键值对的形式组建数据库。 优点:效率高,有极高的并发读写性能。 缺点:只能查询存储简单的数据。不能用where字段来查询sql。
Mysql 的存储引擎,myisam和innodb的区别?
1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用。表锁,不会出现死锁,适合小数据,小并发。
2.innodb是支持事务的存储引擎,合于插入和更新操作比较多的应用,设计合理的话是行锁(最大区别就在锁的级别上),适合大数据,大并发。
3、memory的数据是存储在内存,速度非常快,但是服务器一关机,数据就没了,对于一些不用长时间保存的数据可以用memory。
Mysql支持的字符集简介:
mysql服务器可以支持多种字符集(可以用show character set命令查看所有mysql支持的字符集),在同一台服务器、同一个数据库、甚至同一个表的不同字段都可以指定使用不同的字符集,相比oracle等其他数据库管理系统,在同一个数据库只能使用相同的字符集,mysql明显存在更大的灵活性。
mysql数据库怎么存入emoji表情,更改字符集= utf8mb4
mysql中如何操作varchar类型的日期进行比较、排序等操作: 使用函数:STR_TO_DATE(str, format) 将string类型转成date类型。
mybatis中#{}和${}的区别是什么?
1、#{}是占位符,可以防止SQL注入的风险(语句的拼接)。
2、${}是sql拼接符号,$无法防止Sql注入,一般用于传入数据库对象,例如传入表名。
3、一般能用#的就别用$。MyBatis排序时使用order by 动态参数时需要注意,用$而不是#。
如何进行SQL优化?
举例:https://www.cnblogs.com/duft/p/9336747.html
1.为搜索字段添加索引。
2.优化字段的数据类型。不使用 INT 来做主键,使用 小的 tinyint 会更经济一些。越小的列会越快。
3.避免使用Select * 导致全表扫描。
4.避免在索引列上和where查询使用IS NULL和IS NOT NULL。
5.读写分离,分库分表(用MyCat)。
MyCat技术原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
实践中如何优化MySQL?
1. 建立索引。
2.优化查询语句。
3.选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOT NULL。
4. 数据库表结构的优化。
5 系统配置的优化。
什么情况下设置了索引但无法使用 ?
① 以“%”开头的LIKE语句,模糊匹配。
② OR语句前后没有同时使用索引。
③ 字段类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型)。
sql注入的主要特点和危害?
变种极多,攻击简单,危害极大
sql注入的主要危害:
1.未经授权操作数据库的数据。
2.恶意纂改网页。
3.私自添加系统账号或者是数据库使用者账号。
简单描述mysql中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)?
1.索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
2.普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。
3.普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。
4.主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。
5.索引可以覆盖多个数据列,如像INDEX(columnA, columnB)索引,这就是联合索引。
6.索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。
数据库中的事务是什么?
事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。
如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
事务特性:原子性,一致性,隔离性,持久性。
原子性:要么全部完成,要么全部不完成。一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
隔离性:如果有两个事务,运行在相同的时间内,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请 求,使得在同一时间仅有一个请求用于同一数据。
持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
SQL注入漏洞产生的原因?如何防止?
SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。
1.采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可。
2.采用正则表达式将包含有 单引号('),分号(;) 和 注释符号(--)的语句给替换掉来防止SQL注入。
sql注入的主要特点和危害?
变种极多,攻击简单,危害极大
sql注入的主要危害:
1.未经授权操作数据库的数据。
2.恶意纂改网页。
3.私自添加系统账号或者是数据库使用者账号。
对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题:
a)、索引的目的是什么?
1.快速访问数据表中的特定信息,提高检索速度
2.创建唯一性索引,保证数据库表中每一行数据的唯一性。
3.加速表和表之间的连接
b)、索引对数据库系统的负面影响是什么?
负面影响:
1.创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;
2.索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;
3.当对表进行增、删、改、的时候索引也要动态维护,这样就降低了数据的维护速度。
c)、为数据表建立索引的原则有哪些?
1.在最频繁使用的、用以缩小查询范围的字段上建立索引。
2.在频繁使用的、需要排序的字段上建立索引。
d)、 什么情况下不宜建立索引?
1.对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引。
2.对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。
什么是锁?
答:数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。
加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。
基本锁类型:锁包括行级锁和表级锁
什么叫视图?游标是什么?
视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,视图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。
游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。
如何通俗地理解三个范式?
第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。
第二范式:确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。
第三范式:确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
主键、外键和索引的区别?
主键–用来保证数据完整性,只有1个。
外键–用来和其他表建立联系用的,有多个。
索引–是提高查询排序的速度,可以有多个。
union 与union all的区别?
union 在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排 序运算,删除重复的记录再返回结果。
union all 则会显示重复结果,只是简单的两个结果合并并返回.所以效率比union高,在保证没有重复数据的情况下用union all。
varchar与char的区别?
char是一种固定长度的类型,varchar则是一种可变长度的类型。
varchar(50)中50的涵义?
最多存放50个字符,varchar(50)和(200)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为order by col采用fixed_length计算col长度(memory引擎也一样)
数据库中的乐观锁和悲观锁?
根据不同类型可以对数据设置不同的锁权限
--- 乐观 ,悲观锁 主要是作用在并发访问控制。
悲观锁 :假定会发生并发冲突,屏蔽任何违反数据完整的操作。
乐观锁 :假定不会发生冲突,只有在提交操作时检查是否违反数据的完整性