202102-21 mysql 数据类型转换的实现 一、问题有一张如下图所示的表,需要我们查出result值大于reference_high值的数据然后我们写了下面的SQL查询语句SELECTi.result,i.reference_highFROMreport_itemiLEFTJOINreportrONr.id=i.report_idWHEREr.org_id=54ANDr.report_status=1ANDr.add_dateBETWEEN'2020-12-01'AND'2020-12-28'ANDi.reference_high<>''ANDi.result<>''ANDi.result>i.reference_high;然后执行查看结果查询结果并不如我们预... 继续阅读 >
202102-21 MySQL 大表添加一列的实现 问题参考自:https://www.zhihu.com/question/440231149,mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据。数据库不能停,并且还有增删改操作。请问如何操作?答案为个人原创以前老版本MySQL添加一列的方式:ALTERTABLE你的表ADDCOLUMN新列char(128);会造成锁表,简易过程如下:新建一个和Table1完全同构的Table2对表Table1加写锁在表Table2上执行ALTERTABLE你的表ADDCOLUMN新... 继续阅读 >
202102-21 详解MySQL Workbench使用教程 MySQLWorkbench是一款专为MySQL设计的集成化桌面软件,也是下一代的可视化数据库设计、管理的工具,它同时有开源和商业化两个版本。该软件支持Windows和Linux系统,可以从https://dev.mysql.com/downloads/workbench/下载。MySQLWorkbench是可视化数据库设计软件,为数据库管理员和开发人员提供了一整套可视化的数据库操作环境,主要功能有数据库设计与模型建立、SQL开发(取代MySQLQueryBrowser)、数据库管理(... 继续阅读 >
202102-21 MySQL数据类型DECIMAL用法详解 MySQLDECIMAL数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据。要定义数据类型为DECIMAL的列,请使用以下语法:column_nameDECIMAL(P,D);在上面的语法中:P是表示有效数字数的精度。P范围为1〜65。D是表示小数点后的位数。D的范围是0~30。MySQL要求D小于或等于(<=)P。DECIMAL(P,D)表示列可以存储D位小数的P位数。十进制列的实际范围取决于精度和刻... 继续阅读 >
202102-21 mysql中decimal数据类型小数位填充问题详解 前言在开发过程中,我们往往会用到decimal数据类型。因为decimal是MySQL中存在的精准数据类型。MySQL中的数据类型有:float,double等非精准数据类型和decimal这种精准。区别:float,double等非精准类型,在DB中保存的是近似值。Decimal则以字符串的形式保存精确的原始数值。decimal介绍:decimal(a,b)其中:a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。b指定小数点右边可以存储的十进制数字的最大个数... 继续阅读 >
202102-21 MySQL实现replace函数的几种实用场景 REPLACE语法REPLACE(String,from_str,to_str)即:将String中所有出现的from_str替换为to_str,这里的from_str不支持正则匹配。操作实例测试表数据如下:mysql>select*from`LOL`;+----+----------------+--------------+-------+|id|hero_title|hero_name|price|+----+----------------+--------------+-------+|1|刀锋之影|泰隆|6300||2|迅捷斥候|提莫|6300||3|光辉女郎AA|拉... 继续阅读 >
202102-20 MySQL 生成随机数字、字符串、日期、验证码及 UUID的方法 上一篇介绍了如何在Oracle生成随机数字、字符串、日期、验证码以及UUID,今天我们继续讨论在MySQL中生成各种随机数据的方法。📝计算机生成的都是伪随机数,并不是真正的物理随机数。生成随机数字生成0到1之间的随机数MySQL中的RAND函数可以用于生成一个大于等于0小于1的随机数字。例如:SELECTrand();rand()|------------------|0.7245639057127423|SELECTrand();rand()|-------------------|0.01... 继续阅读 >
202102-20 mysql update case 更新字段值不固定的操作 在处理批量更新某些数据的时候,如果跟你更新的字段的值都一样,比如某个状态都更新为某个固定值,直接用updatetablesetxxx=xxxwherexxx=xxx这种即可如果要更新的字段的值是不固定的,用下面的updatecasewhenwhere这种方式就更方便了UPDATEtablenameseta1=CASEuseridWHEN1THENa1+5WHEN2THENa1+2END,a2=CASEuseridWHEN1THENa2-5WHEN2THENa2-2ENDwhereuseridin(1,2)用updatecasewhen更... 继续阅读 >
202102-20 mysql密码中有特殊字符&在命令行下登录的操作 在服务器上,通常为了快速登录数据库,我们会使用mysql-hhost-uusername-ppassworddb的方式登录数据库,如果密码中没有特殊字符&,会直接进入数据库sql命令行下,如果有特殊字符&,那么就会出现如下提示:-bash:syntaxerrornearunexpectedtoken`&'一般情况,我们可以通过命令mysql-hhost-uusername-pdb然后根据提示手动输入密码。另外,这里可以对特殊字符的密码做处理。1、直接将密码用单引号引起来。2、在特殊字符... 继续阅读 >
202102-20 mysql修改记录时update操作 字段=字段+字符串 在有些场景下,我们需要对我们的varchar类型的字段做修改,而修改的结果为两个字段的拼接或者一个字段+字符串的拼接。如下所示,我们希望将xx_role表中的name修改为name+id。在mysql下,我们直接通过“+”来操作,会提示错误。操作符“+”是用来对数字进行加操作的,这里需要使用关键字concat,表示拼接。同样的,我们也可以利用字段+字符串来拼接。这里稍微说一下“+”的操作,他是用来对数字类型的字段进行加操作的,如下所示:... 继续阅读 >
202102-20 Mysql 中文排序规则说明 使用MySQL过程中,我们经常会对一个字段进行排序查询,我们一般都是想要按照中文拼音首字母进行依次排序,但mysql中进行中文排序的时候,对汉字的排序结果往往都是错误的。这种情况在MySQL的很多版本中都存在。如果这个问题不解决,那么MySQL将无法实际处理中文。出现这个问题的原因是因为MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了... 继续阅读 >
202102-20 基于mysql 默认排序规则的坑 mysql默认varchar类型是对大小写不敏感(不区分),如果想要mysql区分大小写需要设置排序规则:utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。utf8_genera_ci不区分大小写,ci为caseinsensitive的缩写,即大小写不敏感。utf8_general_cs区分大小写,cs为casesensitive的缩写,即大小写敏感。用utf8_genera_ci没有区分大小写,导致这个字段的内容区分大小写时出问题,比如作为区分大小写的code或者验证码时就出问... 继续阅读 >
202102-20 Mysql主键UUID和自增主键的区别及优劣分析 引言之前有段时间用postgresql数据库,在上云之后,从自增主键变为uuid,感觉uuid全球唯一,很方便。最近用mysql,发现mysql主键都是选择自增主键,仔细比较一下,为什么mysql选择自增主键,有什么不同。在mysql5.0之前,如果是多个master复制的环境,无法用自增主键,因为可能重复。在5.0以及之后的版本通过配置自增偏移量解决了整个问题。什么情况下我们希望用uuid1.避免重复,便于scale,这就是我们做cloudservice的时候选择... 继续阅读 >
202102-20 如何区分MySQL的innodb_flush_log_at_trx_commit和sync_binlog innodb_flush_log_at_trx_commit和sync_binlog 两个参数是控制MySQL磁盘写入策略以及数据安全性的关键参数。showvariableslike"innodb_flush_log_at_trx_commit";innodb_flush_log_at_trx_commit:0:由mysql的main_thread每秒将存储引擎logbuffer中的redo日志写入到logfile,并调用文件系统的sync操作,将日志刷新到磁盘。1:每次事务提交时,将存储引擎logbuffer中的redo日志写入到logfile,并调用文件系统的sync操... 继续阅读 >
202102-20 如何区分MySQL的innodb_flush_log_at_trx_commit和sync_binlog innodb_flush_log_at_trx_commit和sync_binlog 两个参数是控制MySQL磁盘写入策略以及数据安全性的关键参数。showvariableslike"innodb_flush_log_at_trx_commit";innodb_flush_log_at_trx_commit:0:由mysql的main_thread每秒将存储引擎logbuffer中的redo日志写入到logfile,并调用文件系统的sync操作,将日志刷新到磁盘。1:每次事务提交时,将存储引擎logbuffer中的redo日志写入到logfile,并调用文件系统的sync操... 继续阅读 >
202102-20 MySQL 日志相关知识总结 数据库中用于存储数据的文件称为datafile,日志文件称为logfile。此外,如果每次读写都是直接访问磁盘,性能很差,所以数据库是有缓存的,数据缓存是databuffer,日志缓存logbuffer。sql执行顺序当我们执行一条更新语句时,比如updatetablesetc=c+1whereid=2,执行顺序如下:执行器通过存储引擎获取id=2的行记录。如果id=2的行记录所在的数据页已经在内存中,则直接返回;否则,需要从磁盘读取数据执行器拿到返回... 继续阅读 >