insert into values 或 insert into select批量插入时,都满足事务的原子性与一致性,一条出错整体都会回滚。在使用insert into select时,MySQL会对select的数据加S(读)锁,在事务较为复杂的场景下可能有死锁的风险。
MySQL莫名地报错:
2020-12-08T02:02:32.179362Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable
今天在把一个数据库的数据导出SQL,然后在另外一个库中执行的时候出现了这个问题,报错:
Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
经常使用DECIMAL数据类型的货币数据,如价格,工资,账户余额等。如果要设计一个处理货币数据的数据库,则可参考以下语法:
amount DECIMAL(19,2);
1.轻量配置、2.均衡配置、3.高端配置、4.极限配置
utf8与utf8mb4(utf8 most bytes 4)
- MySQL 5.5.3 之后增加了utfmb4字符编码
- 支持BMP(Basic Multilingual Plane,基本多文种平面)和补充字符
- 最多使用四个字节存储字符
在MySQL的存储过程中经常会看到这句话:DECLARE CONTINUE HANDLER FOR NOT FOUND。
它的含义是:若没有数据返回,程序继续,并将变量 IS_FOUND 设为 0 ,这种情况是出现在类似:select XX into XXX from tablename 的时候发生的。
MySQL四舍五入函数:
- round(x) 函数:返回最接近于参数 x 的整数;
- round(x, y) 函数:对参数x进行四舍五入的操作,返回值保留小数点后面指定的y位。
在MySQL中进行模糊查询的时候可以使用 instr() 函数。
instr()函数介绍
instr(s, s1),这个函数返回字符串s1在字符串s中的位置,若是找不到则返回0,找到则返回字符串s1所在位置。(返回位置从1开始)
instr()函数使用
SELECT * FROM user WHERE INSTR(username,'2')>0
碰到一个SQL的排序问题,他把符合条件的单独几行,可以放在查询结果的开始,或者查询结果的尾部
通过的方法就是IN语句(也可以通过IF语句)