Mysql
-
mysql where子句
Mysqlwhere 是针对元素进行操作,所有where之后的语句,都是针对数据结果进行操作,而不是是针对数据表 --where子句 ---查询学生id为1,3,5,6, select * from student where id = 1 or id = 3 or id = 5 or id = 6; ----简化 select * from student where id in (1,3,5,6); --between and between A and B(A 必须小于等于B) --查询2-5id的学生 select * from student where id 2 and 5; --null运算 ---select 1+null; ---select 2*null; ---select 3 and null ---结果 --查询id为null的学生 --错误 select * from student where class_id = null; --正确 select * from student where class_id is null;
阅读更多admin2020-04-27 18:53:38【Mysql】
-
mysql的数据类型
Mysqlmysql中也分为三大数据类型:数值型,字符型,时间日期型
阅读更多admin2020-04-27 18:49:05【Mysql】
-
mysql 编码
Mysqlcharacter_set_database表示的是当前数据库的字符集。 乱码的原因:某一端不能正常的解析另一端提供的数据(理解的目标数据的字符集有误) web包含三个部分:浏览器显示,数据库存储,PHP文件 浏览器显示:默认是gbk 数据库存储:默认是utf8 PHP文件:utf-8
阅读更多admin2020-04-27 18:47:10【Mysql】
-
乐观锁和悲观锁的区别
Mysql悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。 乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。
阅读更多admin2019-03-20 15:49:38【Mysql】
-
explain sql语句的优化 详解
Mysqlid select查询的序列号,查询序号即为sql语句执行的顺序 select_type select查询的类型,主要是区别普通查询和联合查询、子查询之类的复杂查询。 simple 它表示简单的select,没有union和子查询 primary 最外面的select,在有子查询的语句中,最外面的select查询就是(EXPLAINSELECT *FROM (SELECT* FROMuchome_space LIMIT 10)AS s) union union 语句的第二个或者说是后面那一个(select * from uchome_space limit 10 union select * from uchome_space limit 10,10) table 输出的行所用的表 type 连接类型(很重要,判断语句的优劣程度) 结果值从好到坏依次是: system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL 一般来说,得保证查询至少达到range级别,最好能达到ref。 possible_keys 指出MySQL能使用哪个索引在该表中找到行。如果是空的,没有相关的索引。这时要提高性能,可通过检验WHERE子句,看是否引用某些字段,或者检查字段不是适合索引。 key 显示MySQL实际决定使用的键。如果没有索引被选择,键是NULL。 key_len 显示MySQL决定使用的键长度。如果键是NULL,长度就是NULL。文档提示特别注意这个值可以得出一个多重主键里mysql实际使用了哪一部分。 ref 显示哪个字段或常数与key一起被使用。 rows 这个数表示mysql要遍历多少数据才能找到,在innodb上是不准确的。 Extra Only index:信息只用索引树中的信息检索出的,这比扫描整个表要快 where used:使用上了where限制 impossible where:表示用不着where,一般就是没查出来啥 Using filesort或者Using temporary:吃力 WHERE和ORDER BY的索引经常无法兼顾,如果按照WHERE来确定索引,那么在ORDER BY时,就必然会引起Using filesort,这就要看是先过滤再排序划算,还是先排序再过滤划算
阅读更多admin2019-03-20 15:39:56【Mysql】
-
专题:MyISAM与InnoDB区别
MysqlMyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能 数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是首选 两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁 平台上承载的大部分项目是读多写少的项目,而MyISAM的读性能是比Innodb强不少的。 MySQL默认采用的是MyISAM。 MyISAM不支持事务,而InnoDB支持 InnoDB支持数据行锁定,MyISAM不支持行锁定 InnoDB支持外键,MyISAM不支持
阅读更多admin2019-03-20 15:39:36【Mysql】
-
锁机制
Mysql行级锁定,页级锁定和表级锁定 行级锁 行级锁定是目前各大数据库管理软件所实现的锁定颗粒度最小的,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能。 但是由于锁定资源的颗粒度很小,所以每次获取锁和释放锁消耗的资源也更多,带来的消耗自然也就更大了。此外,行级锁定也最容易发生死锁。 行级锁定的优点: · 当在许多线程中访问不同的行时只存在少量锁定冲突。 · 回滚时只有少量的更改。 · 可以长时间锁定单一的行。 行级锁定的缺点: · 比页级或表级锁定占用更多的内存。 · 当在表的大部分中使用时,比页级或表级锁定速度慢,因为你必须获取更多的锁。 · 如果你在大部分数据上经常进行GROUP BY操作或者必须经常扫描整个表,比其它锁定明显慢很多。 · 用高级别锁定,通过支持不同的类型锁定,你也可以很容易地调节应用程序,因为其锁成本小于行级锁定。 表级锁 表级别的锁定是MySQL各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免死锁问题。 当然,锁定颗粒度大所带来最大的负面影响就是出现锁定资源争用的概率也会最高,致使并大度较低。 MySQL的表级锁定主要分为两种类型,一种是读锁定,另一种是写锁定 //执行SQL语句 锁掉userinfo表 $sql = "LOCK TABLES userinfo WRITE"; //表的WRITE锁定,阻塞其他所有mysql查询进程 $Database->execute($sql); //执行更新或写入操作 $sql = "UPDATE userinfo SET `correct_num`=`correct_num`+1 WHERE stat_date='{$current_date}'"; $Databaser->execute($sql); //当前请求的所有写操作做完后,执行解锁sql语句 $sql = "UNLOCK TABLES"; $Database->execute($sql); 例如 mysql> LOCK TABLES real_table WRITE, insert_table WRITE; mysql> INSERT INTO real_table SELECT * FROM insert_table; mysql> TRUNCATE TABLE insert_table; mysql> UNLOCK TABLES; 页级锁 页级锁定的特点是锁定颗粒度介于行级锁定与表级锁之间,所以获取锁定所需要的资源开销,以及所能提供的并发处理能力也同样是介于上面二者之间。另外,页级锁定和行级锁定一样,会发生死锁。 在MySQL数据库中,使用表级锁定的主要是MyISAM,Memory,CSV等一些非事务性存储引擎,而使用行级锁定的主要是Innodb存储引擎和NDBCluster存储引擎,页级锁定主要是BerkeleyDB存储引擎的锁定方式。 上述三种锁的特性可大致归纳如下: 1) 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 2) 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 3) 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
阅读更多admin2019-03-20 15:39:12【Mysql】
-
INNODB的两种行锁
Mysql1)共享锁:允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。 ( Select * from table_name where ......lock in share mode) 2)排他锁:允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和 排他写锁。(select * from table_name where.....for update) 为了允许行锁和表锁共存,实现多粒度锁机制;同时还有两种内部使用的意向锁(都是表锁),分别为意向共享锁和意向排他锁。 InnoDB行锁是通过给索引项加锁来实现的,即只有通过索引条件检索数据,InnoDB才使用行级锁,否则将使用表锁! 例1: (明确指定主键,并且有此笔资料,row lock) 复制代码代码如下: SELECT * FROM products WHERE id='3' FOR UPDATE; SELECT * FROM products WHERE id='3' and type=1 FOR UPDATE; 例2: (明确指定主键,若查无此笔资料,无lock) 复制代码代码如下: SELECT * FROM products WHERE id='-1' FOR UPDATE; 例3: (无主键,table lock) 复制代码代码如下: SELECT * FROM products WHERE name='Mouse' FOR UPDATE; 例4: (主键不明确,table lock) 复制代码代码如下: SELECT * FROM products WHERE id<>'3' FOR UPDATE; 例5: (主键不明确,table lock) 复制代码代码如下: SELECT * FROM products WHERE id LIKE '3' FOR UPDATE; 注1: FOR UPDATE仅适用于InnoDB,且必须在交易区块(BEGIN/COMMIT)中才能生效。 注2: 要测试锁定的状况,可以利用MySQL的Command Mode ,开二个视窗来做测试。 共享锁【S锁】 又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 排他锁【X锁】 又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。
阅读更多admin2019-03-20 15:38:51【Mysql】
-
事务(innodb)
MysqlMYSQL的事务处理主要有两种方法 1.用begin,rollback,commit来实现 begin开始一个事务 rollback事务回滚 commit 事务确认 2.直接用set来改变mysql的自动提交模式 mysql默认是自动提交的,也就是你提交一个query,就直接执行!可以通过 set autocommit = 0 禁止自动提交 set autocommit = 1 开启自动提交
阅读更多admin2019-03-20 15:38:33【Mysql】
站点信息
- 建站时间:2019-3-10
- 网站程序:ThinkPHP PHP MYsql
- 路由说明:全站静态化+api
- 统计数据:百度统计
- 登陆方式:githua授权登陆
- 个人邮箱:2584496361@qq.com
- 个人Q Q:2584496361
- 业务咨询:有需要建站朋友欢迎咨询