码迷,mamicode.com
首页 > 数据库 > 详细

mysql知识点

时间:2019-08-07 22:48:30      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:表结构   不可重复读   mys   过程   绑定   sql语句   悲观锁   系统管   读数   

sql注入问题

sql语句应该考虑哪些安全性问题
  1. 防止sql注入,对特殊字符进行过滤、转义或者使用预编译的sql语句绑定变量

  2. 当sql语句运行报错时,不要把数据库返回的错误信息全部显示给用户,以防止泄露服务器和数据库相关信息

sql注入

如果sql语句在拼接的情况下,使得查询永远成立,如拼接上 or ‘1‘=‘1‘,会发生不安全问题

解决办法:

  1. 参数绑定:不拼接字符串,使用preparedStatement,参数使用set方法进行填装

  2. 检查变量的数据类型:如sql语句类似where id={$id},数据库中所有的id都是数字,那么在执行sql语句前,要保证ID是int类型

  3. 所有的sql语句都封装在存储过程中

存储过程

一些编译好的sql语句,这些sql语句代码向一个方法一样实现一些功能,然后再给这些代码块取一个名字,在用到这个功能的时候调用它即可。

优点

  1. 存储过程因为SQL 语句已经预编译过了,因此运行的速度比较快。

  2. 存储过程在服务器端运行,减少客户端的压力。

  3. 允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次,类似方法的复用。

  4. 减少网络流量,客户端调用存储过程只需要传存储过程名和相关参数即可,与传输SQL 语句相比自然数据量少了很多。

  5. 增强了使用的安全性,充分利用系统管理员可以对执行的某一个存储过程进行权限限制,从而能够实现对某些数据访问的限制,避免非授权用户对数据的访问,保证数据的安全。程序员直接调用存储过程,根本不知道表结构是什么,有什么字段,没有直接暴露表名以及字段名给程序员。

数据库表连接方式

内连接,外连接(左外连接(是内连接的下一阶段)、有外连接、全外连接)

事务

事务是由一组sql语句组成的逻辑处理单元。用户定义的一个数据库操作序列,是数据恢复和并发控制的基本单位。

事务的特性
  1. 原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态。

  2. 一致性:在事务开始和完成时,数据库中的数据都保持一致的状态,数据的完整性约束没有被破坏。(事务的执行使得数据库从一种正确状态转换成另一种正确状态)

  3. 隔离性:一个事务的执行不能被其他事务干扰。为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。隔离性通过锁就可以实现。

  4. 持久性:一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,并不会被回滚。

并发事务带来的问题:
  1. 更新丢失:两个事务Tl 和T2 对同一数据读写,T2 提交的结果覆盖了Tl 提交的结果,导致Tl 的修改被丢失。

  2. 脏读:事务1读取到事务2未提交的数据

  3. 不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的----------------------修改

  4. 虚读、幻读:多次读出来的记录数不一样------------增加/删除

并发控制的方式

加锁

数据库事务的隔离级别:
  1. read uncommited:允许事务读取未被其他事务提交的变更

  2. read commited:允许事务读取已经被其他事务提交的变更,可以避免脏读,可能有不可重复读和幻读的问题。

  3. repeatable read:确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新,可以避免脏读和不可重复读,可能会有幻读。

  4. 可串行化

数据库保证数据的一致性的方法:事务、悲观锁、乐观锁

锁是一种并发控制技术,锁用来在多用户同时访问同一个数据的时候保护数据的

锁类型
  1. 共享(S)锁多个事务可封锁一个共享页,任何事务都不能修改该页.通常是该页被读取完毕,S 锁立即被释放。在执行select 语句的时候需要给操作对象加上共享锁,但加锁之前需要检查是否有排他锁,如果没有,则可以加共享锁(一个对象上可以加n 个共享锁),否则不能加。共享锁通常在执行完select 语句之后被释放,也有可能是在事务结束(包括正常结束和异常结束)的时候被释放,主要取决与数据库所设置的事务隔离级别。

  2. 排它(X)锁:仅允许一个事务封锁此页;其他任何事务必须等到X 锁被释放才能对该页进行访问;X 锁一直到事务结束才能被释放。执行insert、update、delete 语句的时候需要给操作的对象加排他锁,在加排他锁之前必须确认该对象上没有其他任何锁,一旦加上排他锁之后,就不能再给这个对象加其他任何锁。排他锁的释放通常是在事务结束的时候,但是数据库事务隔离级别被设置成Read Uncommitted的时候,这种情况下排他锁会在执行完更新操作之后就释放

产生死锁的必要条件(缺一都不会发生死锁)
  1. 互斥条件:一个资源每次只能被一个进程使用。

  2. 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

  3. 不可剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

  4. 环路等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

  5.  

 

mysql知识点

标签:表结构   不可重复读   mys   过程   绑定   sql语句   悲观锁   系统管   读数   

原文地址:https://www.cnblogs.com/q-1993/p/11318028.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!