在将分组聚合结果(就是用了group by col,col2…)保存到mysql时,列是一个联合唯一索引,多个列的组合不重复,发现下面这两个语句会报错:
1Duplicateentry’2019-01-04-tx’forkey’PRIMARY’
很显然,这是主键或者唯一索引冲突导致的。
因为我执行了这样两条sql:
1insertintotableName(date,workflow,cou)values(‘2019-01-04′,’tx’,10000);2insertintotableName(date,workflow,cou)values(‘2019-01-04′,’Tx’,100000);
mysql会将这date,workflow两列的值组合,作为索引,索引的初衷当然是为了提高高并发查询效率,但是在这里
2019-01-04-tx
2019-01-04-Tx
被当作一样的联合值了,所以报错,索引冲突。
解决方法是:
修改列指定binary
将workflow修改为区分大小写,这里是workflow取值tx,Tx造成的冲突。显然,要用到alter语法:
1altertablestatistic_daily_workflow_countmodifycolumnworkflowvarchar(170)binarycharactersetutf8collateutf8_bin;
utf8_bin或者utf8mb4都是可以的。
这样就能愉快的玩耍了。
所以,需要注意的是
问题一:MySql默认主键不区分大小写
实例:
1–创建混合类型2createtablePlainText(3Contentnvarchar(50),4primarykey(Content)5);67insertintoPlainTextvalues(‘a’);8insertintoPlainTextvalues(‘A’);
抛出异常:Duplicate entry ‘a’ for key ‘PRIMARY’,主键不能重复
解决方法1:创建表时字段指定binary
1createtablePlainText(2Contentnvarchar(50)binary,3primarykey(Content)4);
解决方法2:修改列指定binary
1–修改列2ALTERTABLE`Md5Data`.`PlainText`3CHANGECOLUMN`Content“Content`VARCHAR(55)CHARACTERSET’utf8’BINARYNOTNULLDEFAULT”;
问题二:MySql查询时不区分大小写
第一种:让mysql查询时区分大小写
1select*fromusertablewherebinaryid=’A’;
第二种:在建表时加以标识
1createtabletable_name{2idvarchar(32)binary;3}
猜你可能喜欢
hive亿级用户表整挂到复活的经历
redis 用法
前段时间我的大数据面试笔记(含答案)
新老用户,日活,周活,月活的hive计算
一个基于hadoop的分词小项目
《人民的名义》小说文本分析