mysql笔记

mysql常见问题集合:

1.mysql中文排序:

字段编码为utf8时,mysql并不会按中文拼音排序。
需要设置字段编码为gbk,或对字段进行类型转换CONVERT([字段] using gbk)
比如: select * from table order by CONVERT(nameUSING gbk)

2.在mysql中的group_concat函数限制:

在mysql中的group_concat函数默认支持的最大字符数为1024。
当你使用group_concat函数时,超出第1024字符的字符会全部丢失。
解决方法:
(1).使用sql设置group_concat的最大长度
SET GLOBAL group_concat_max_len=102400;
SET SESSION group_concat_max_len=102400;
但是这种方式在重启mysql后就无效。
(2).在MySQL配置文件中my.conf或my.ini中添加:
#[mysqld]
group_concat_max_len=102400
然后重启mysql服务

3.ONLY_FULL_GROUP_BY校验规则导致group by 报语法错误
--关闭only_full_group_by的规则校验
set @@GLOBAL.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
set @@SESSION.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

在 [mysqld] 下面添加代码:

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
4.数据库表名的大小写配置

show global variables like '%lower_case_table_names%';
lower_case_table_names = 0时,mysql会根据表名直接操作,大小写敏感。
lower_case_table_names = 1时,mysql会先把表名转为小写,再执行操作。

找出mysql的配置文件,在 [mysqld] 下面添加/修改代码,
修改 lower_case_table_names = 1 即可以不区分大小写了

其他

事务的四大特性(ACID): 原子性,一致性,隔离性,持久性

隔离级别 脏读 不可重复读 幻读
READ-UNCOMMITTED
READ-COMMITTED ×
REPEATABLE-READ × ×
SERIALIZABLE × × ×

mysql为第3种 REPEATABLE-READ

mysql外键优缺点:
优点:便于查看各个表的关系,增强数据可靠性。
缺点:在进行insert, update, delete等操作时,会校验数据是否符合,导致耗时过大。

索引方法(结构): B树/ B+树 (BTree)(常用) hash
一级索引(聚集索引):
主键索引:在 MySQL 的 InnoDB 的表中,当没有显示的指定表的主键时,InnoDB 会自动先检查表中是否
有唯一索引的字段,如果有,则选择该字段为默认的主键,否则 InnoDB 将会自动创建一个 6Byte 的自增主键。主键索引只能有一个。添加多个主键会变成复合索引。
二级索引(非聚集索引)
普通索引(index)
唯一索引(Unique Key)
全文索引(Full Text)

单一索引:针对单列的索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
复合(联合)索引:针对多列的索引,有优先级,筛选力度最高的放最前面
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。