mysql中支持两种索引类型,一种是btree类型,一种是hash类型。为什么我们添加索引的时候没有要求设置索引类型了,因为有默认值。Innodb和MyISAM默认的索引是Btree索引;而Mermory默认的索引是Hash索引。1、BTree类型BTree索引是最常用的mysql数据库索引算法,因为它不仅可以被用在=,>,>=,<,<=和between这些比较操作符上,而且还可以用于like操作符,只要它的查询条件是一个不以通配符开头的常量,例如:select * from user where name like ‘jack%’;2、Hash类型Hash索引只能用于对等比较,例如=,<=>(相当于=)操作符。由于是一次定位数据,不像BTree索引需要从根节点到枝节点,最后才能访问到页节点这样多次IO访问,所以检索效率远高于BTree索引。但为什么我们使用BTree比使用Hash多呢?主要Hash本身由于其特殊性,也带来了很多限制和弊端:Hash索引仅仅能满足“=”,“IN”,“<=>”查询,不能使用范围查询。联合索引中,Hash索引不
今天在排查一个程序bug中发现,有一个sql写入的数据跟数据库中记录的不一致。通过排查,突然想起来可能是数值类型的问题,果真如此。字段设置的为tinyint(4),当写入超过127的数值后,数据库中都为记录为127。帮这个字段改为int(10)类型。改为之后,我思考,超过数值范围的提示错误或记录错误就可以避免这种问题了。通过搜索知道了mysql中有严格模式与非严格模式。下面详细介绍。何为MySQL的严格模式,简单来说就是MySQL自身对数据进行严格的校验(格式、长度、类型等),比如一个整型字段我们写入一个字符串类型的数据,在非严格模式下MySQL不会报错,同样如果定义了char或varchar类型的字段,当写入或更新的数据超过了定义的长度也不会报错。我认为这个对于编程来说没有任何好处,虽然我们尽量在代码中做数据校验。MySQL开启了严格模式从一定程序上来讲是对我们代码的一种测试,如果我们的开发环境没有开启严格模式在开发过程中也没有遇到错误,那么在上线或代码移植的时候将有可能出现不兼容的情况,因此在开发过程做最好开启MySQL的严格模式。1、如何查看当前使用的模式可以执行sql语句sel
mysql数据库root账号密码忘记了,如何重置密码了。linux中方法很简单:(1)、第一步,在mysql配置文件my.cnf中(默认的地址为/etc/my.cnf,需要根据具体的配置找对应的配置文件),[mysqld]下面新建一行添加skip-grant-tables保存文件,然后重启mysqld服务,可以执行命令 service mysqld restart(2)、使用mysql命令连接本地的mysql服务,可以执行命令mysql -u root -p这是不需要输入密码,输入换行就能进入(3)、执行更新密码的sql语句。mysql5.7版本及以上版本,执行语句update mysql.user set authentication_string=password('123456') where user='root';mysql5.7以下版本执行语句update mysql.user set password=password('123456') where user='root';ps:其中123456为新的密码,