共享锁

mysql知识点

限于喜欢 提交于 2019-11-26 10:29:13
sql注入问题 sql语句应该考虑哪些安全性问题 防止sql注入,对特殊字符进行过滤、转义或者使用预编译的sql语句绑定变量 当sql语句运行报错时,不要把数据库返回的错误信息全部显示给用户,以防止泄露服务器和数据库相关信息 sql注入 如果sql语句在拼接的情况下,使得查询永远成立,如拼接上 or '1'='1',会发生不安全问题 解决办法: 参数绑定:不拼接字符串,使用preparedStatement,参数使用set方法进行填装 检查变量的数据类型:如sql语句类似where id={$id},数据库中所有的id都是数字,那么在执行sql语句前,要保证ID是int类型 所有的sql语句都封装在存储过程中 存储过程 一些编译好的sql语句,这些sql语句代码向一个方法一样实现一些功能,然后再给这些代码块取一个名字,在用到这个功能的时候调用它即可。 优点 存储过程因为SQL 语句已经预编译过了,因此运行的速度比较快。 存储过程在服务器端运行,减少客户端的压力。 允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次,类似方法的复用。 减少网络流量,客户端调用存储过程只需要传存储过程名和相关参数即可,与传输SQL 语句相比自然数据量少了很多。 增强了使用的安全性,充分利用系统管理员可以对执行的某一个存储过程进行权限限制,从而能够实现对某些数据访问的限制

it专业测试-解析

人走茶凉 提交于 2019-11-26 01:34:41
目录 1.继承thread类必须实现哪个方法 2.关于ArrayList 和LinkedList的说法错误的是 3.MySQL中语句的%和 _ 表达正确的是 4.下面那个关于接口的表述是错误的 5.下面哪项不是数据库的四大特征之一 6.以下对封装的描述正确的是 7.以下代码输出运行输出的是 8.下面那个HTTP的状态码表示数据永久重定向 9.下面哪项不是合法的bean的scope属性值 10.下面那个是线程安全的 11.关于变量的命名规范,说法正确的是 12.下面哪个命令用于测试网络连通性的 13.可以是用哪个工具查看java线程状态 14.java如何创建多线程 15.下面哪个关键词与AOP无关 16.在Java语言中,下列关于类的继承的描述哪个是正确的 17.Java类中静态integer变量的默认值是什么 18.下面哪种情况,不会影响普通索引生效 19.欲构造ArrayList类得出一个实例,继承List接口,下列哪个方法是正确的 20.OutOfMemory错误的常见原因不是下面哪个 21.类的构造函数是否可以被override?是否可以被overload? 22.下面哪个关键词可以防止类被override? 23.在Java中,下面对于构造函数的描述正确的是 24.Java接口修饰符可以为 25.下面哪项不是spring注入bean的方式 26

数据库中的共享锁与排他锁

╄→尐↘猪︶ㄣ 提交于 2019-11-25 22:52:14
共享锁, 又称为读锁,获得共享锁之后,可以查看但无法修改和删除数据。 排他锁, 又称为写锁、独占锁,获得排他锁之后,既能读数据,又能修改数据。 为什么要加锁 很多人都知道,锁是用来解决并发问题的,那么什么是并发问题呢?并发情况下,不加锁会有什么问题呢? 拿生活中的洗手间举例子,每个洗手间都会有一个门,并且是可以上锁的,当我们进入洗手间之后会把门反锁,当我们出来之后再把锁打开。 当门被锁上之后,其他人只能在门外等待。洗手间之所以要有门锁,就是为了保护隐私的,避免出现多个人同时进入洗手间的情况。 这和数据库中的锁其实是一样的,为了避免多个事务同时操作数据库导致数据异常,一般会通过锁机制解决。 在介绍共享锁和排他锁之前,我们先来大个比方,前面已经用了一个洗手间的例子,那么就继续这个例子。一般情况下,我们进入洗手间有可能做一下几件事:洗手、化妆、上厕所等,其实只要上厕所这件事是极度隐私的,而其他事没有那么隐私。 我们可以认为洗手间就是一个数据库表,而洗手间内部的设施就是数据库表中的数据。我们每个想要进入洗手间的人都是一个事务,简单的洗手、化妆等操作可以认为是读操作,而上厕所操作可以认为是写操作。 共享锁 前面简单介绍了数据库与洗手间之间的类比关系,那么接下来继续分析什么是共享锁。 有些时候,如果我们进入洗手间只是想洗手的话,我们一般不会锁门。而其他人也可以进来洗手、化妆等。但是

二、锁的分类及特性

限于喜欢 提交于 2019-11-25 20:48:31
【转】锁的分类及特性 数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问时变得有序所设计的一种规则。 对于任何一种数据库来说都需要有相应的锁定机制,所以 MySQL 自然也不能例外。 MySQL 数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应用场景特点都不太一样。 为了满足各自特定应用场景的需求,每种存储引擎的锁定机制都是为各自所面对的特定场景而优化设计,所以各存储引擎的锁定机制也有较大区别。 MySQL 各存储引擎使用了三种类型(级别)的锁定机制: 表级锁定 行级锁定 页级锁定 表级锁定(table-level) 表级别的锁定是 MySQL 各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。 所以获取锁和释放锁的速度很快。由于表级锁定一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。 当然,锁定颗粒度大所带来最大的负面影响就是出现锁定资源争用的概率也会最高,致使并大度大打折扣。 使用表级锁定的主要是 MyISAM,MEMORY,CSV 等一些非事务性存储引擎。   行级锁定(row-level) 行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。 由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小

MySQL锁会不会,你就差看一看

冷暖自知 提交于 2019-11-25 16:47:50
数据库锁知识 不少人在开发的时候,应该很少会注意到这些锁的问题,也很少会给程序加锁(除了库存这些对数量准确性要求极高的情况下),即使我们不会这些锁知识,我们的程序在一般情况下还是可以跑得好好的。因为这些锁数据库隐式帮我们加了,只会在某些特定的场景下才需要手动加锁。 对于UPDATE、DELETE、INSERT语句,InnoDB会自动给涉及数据集加排他锁(X) MyISAM在执行查询语句SELECT前,会自动给涉及的所有表加读锁,在执行增、删、改操作前,会自动给涉及的表加写锁,这个过程并不需要用户干预 表锁 首先,从锁的粒度,我们可以分成两大类: 表锁 :开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低 行锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高 不同的存储引擎支持的锁粒度是不一样的==:InnoDB行锁和表锁都支持、MyISAM只支持表锁!InnoDB只有通过索引条件检索数据才使用行级锁==,否则,InnoDB使用表锁也就是说,InnoDB的行锁是基于索引的! 表锁下又分为两种模式: 表读锁(Table Read Lock)&& 表写锁(Table Write Lock) 从下图可以清晰看到,在表读锁和表写锁的环境下:读读不阻塞,读写阻塞,写写阻塞!读读不阻塞:当前用户在读数据,其他的用户也在读数据,不会加锁 读写阻塞