mysql那些事】的更多相关文章

mysql那些事之索引篇 上一篇博客已经简单从广的方面介绍了一下mysql整体架构以及物理结构的内容. 本篇博客的内容是mysql的索引,索引无论是在面试还是我们日常工作中都是非常的重要一环. 索引是什么? 官方介绍索引是帮助MySQL高效获取数据的数据结构.打个比方来说的话相当于我们生活中字典. 索引的优势和劣势 优势: 可以加快数据的检索速度,降低磁盘的IO,提高查询效率. 索引列可以对数据进行排序,减低cpu的消耗 劣势: 索引是需要占用磁盘空间的. 索引只是针对查询会提升性能.对增删改反…
---恢复内容开始--- 登录 mysql登录 -u+用户 -p 密码 显示数据库 show databases; 使用某个数据库 use xxx; 显示数据库表 show tables 显示表结构 show columns form xxx;//表名 select选择 使用distinct来输出MYsql只返回不同的值 select distinct email from user//必须放在这个字段的前面 部分不能使用这个关键字(这个关键字用于可以用于所有列)除非指定的两个列都不同,否则所有…
前言:所谓的坑,两个意思,一个是软件本身的bug,一个是使用者常犯的错误. phper在日常开发中经常和mysql打交道.特别是在没有分层的中小应用中,phper开发要关注sql语句的实现. 入正题,上建表语句: DROP TABLE IF EXISTS `test_sql`; CREATE TABLE `test_sql` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id', `name` varchar(32) NOT…
在mysql见表的时候,会遇到选择存储引擎:MyISAM和InnoDB.究竟用哪种存储引擎好呢? 1.MyISAM:表锁:支持全文索引:读并发性能较好. 2.InnoDB:行锁:支持事务,支持外键:写并发性能较好. 实际上,现在大多数的公司里,mysql的规定都是使用InnoDB作为默认存储引擎,除了支持事务和行锁是比较重要的两个原因外,其实MyISAM在实际应用场景中意义也不大,并且一个重要原因是,官方支持力度大.oracle很早就收购了InnoDB,后面又收购了mysql,现在重点发展Inn…
mysql建数据库或者建表的时候会遇到选择编码的问题,以前我们都是习惯性的选择utf8,但是在mysql在5.5.3版本后加了utf8mb4的编码,utf8mb4可以存4个字节Unicode,mb4就是most bytes 4的意思.包括Emoji 表情和很多不常用的汉字都可以存储,还可以存储任意新增的Unicode字符,扩展性好啊. 而utf8 编码最大字符长度是 3 字节,如果遇到4个字节的款字符就出幺蛾子了. 而且,utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他…
创建mysql数据表的时候,经常会遇到存储小数(浮点数)的情况,如:价格,重量,身高等. 目前大的公司流行三种存储方案: 1.将数据扩大10的倍数达到使用整数类型存储目的. 比如价格,我们经常以分为单位进行存储,也就是将数据扩大100倍,这样元改成分存储. 重量可以用克为单位,如果克还是小数,就以毫克,微克等单位进行存储. 2.使用decimal类型的方式存储 比如价格,我们可以使用两位小数的精度进行存储.强烈不建议采用float或者double的类型存储,会存在精度损失的问题,在以后做值比较的…
几乎每次数据库建模的时候,都会遇到时间类型数据存储的问题. mysql存储时间通常选择这四种类型:datetime.timestamp.int和bigint四种方式,到底使用什么类型,需要看具体的业务. 我们分别对这四种类型进行讨论. 1.datetime 这个类型可以存储8字节,表示从1000到9999年之间的数据.这个类型可以为空值,也可以自定义值,默认的初始值是“0000-00-00 00:00:00”. 这种类型存储的存储的优点是数据可读性强,不需要函数做转换. 2.timestamp…
创建mysql数据表的时候,经常会遇到手机号码和座机号码数据的存储问题. 先说手机号码:很多人喜欢使用数字来进行存储,手机号不涉及到运算,并且有时候要带括号,加号之类的字符,有时候还要以0开头.所以,手机号最好使用varchar(20)的方式进行存储,这样存储可以支持模糊查询. 座机号码的存储有两种方式,一种是座机区号和座机号分开存储成varchar.一种是使用一个varchar存储整个座机电话号码.…
1.一条update语句 1.先通过引擎找到对应的行数据,并加锁 2.对行数据进行修改并调用引擎接口修改这条数据,然后释放锁(此时并没有把数据在磁盘上做出修改) 3.redo log在内存中生成这条update的日志,通过innodb_flush_log_trx_commit 参数判断是否flush(持久化到磁盘),并告知mysql执行器完成操作 4.执行器生成binlog并持久化到磁盘 5.执行器调用引擎提交事务接口,redo log状态变为commit状态完成整个更新操作. 6.InnoDB…
前言 这篇文章会对PHP的MySQL扩展库,MySQLI的扩展库,SQL批量执行,事务控制等等进行一些简单的讲解. MySQL扩展 PHP中MySQL扩展,虽然因为安全的原因,在PHP5.6及往上不在支持MySQL扩展库,但是还是要学习的,通过编写案例的方式来讲解. 案例 先说下操作数据库的大体思路吧,就是先获取连接->选择数据库->设置操作编码->发送sql指令->对返回的结果进行处理->释放资源,断开连接.案例是一个在线词典查询.下面是创建表的sql语句: create…