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引擎也一样)

数据库中的乐观锁和悲观锁?

根据不同类型可以对数据设置不同的锁权限

--- 乐观 ,悲观锁 主要是作用在并发访问控制。

悲观锁 :假定会发生并发冲突,屏蔽任何违反数据完整的操作。

乐观锁 :假定不会发生冲突,只有在提交操作时检查是否违反数据的完整性

posted @ 2019-12-16 15:10  威兰达  阅读(151)  评论(0编辑  收藏  举报