INSERT INTO table_name(f1 ,f2 ,f3) VALUES(? ,?) on duplicate key update f2 = ? ,f3 = ?…
线上问题:org.springframework.dao.DuplicateKeyException: PreparedStatementCallback; SQL [update fl_table set id = ?, password = ?, email = ? where id = '3583954800']; Duplicate entry ' ' for key 'email'; nested exception is com.mysql.jdbc.exceptions.jdbc4…
项目中需要用到联合唯一索引: 例如:有以下需求:每个人每一天只有可能产生一条记录:处了程序约定之外,数据库本身也可以设定: 例如:user表中有userID,userName两个字段,如果不希望有2条一模一样的记录,需要给user表添加多个字段的联合唯一索引: alter table user add nuique index(user_id,user_name); 例如: alter table user_daily_money_info add unique index agd(user_a…
在表中有这么一索引 UNIQUE KEY `customer_id` (`customer_id`,`item_id`,`ref_id`) 问1. 这种多列唯一索引在事务中select for update下是不是行锁? 如下: 事务1, CREATE DEFINER=`root`@`localhost` PROCEDURE `Test1`(out debitb decimal(14,2))BEGIN -- SET TRANSACTION ISOLATION LEVEL Serializable…
本文仅限于自己读写的笔记,需要具有一定 mysql(inodb,myisam 引擎)基础的高端玩家,不感兴趣的玩家们就不用在意了 Inodb 引擎 1,每个新建索引,都需要考虑清楚看是否是必须的,很多新建的索引不仅不会提高 sql 语句的效率,反而会增加维护索引的成本 对于 Inodb 的 B-Tree,如果是非聚簇索引,每次检索都需要进行两次(本身+主键,此处不过多解释),所以当存在索引 (B),A是主键,就没有必要再建立索引(B, A),除非需要 order by a 才需要用到组合索引.…
建表时添加 DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `stu_id` ) NOT NULL AUTO_INCREMENT, `name` ) DEFAULT NULL, PRIMARY KEY (`stu_id`), UNIQUE KEY `UK_student_name` (`name`) ) ENGINE DEFAULT CHARSET=utf8; 建表后添加1 create unique index UK_stude…
MySQL [test]> create table tbl_keyword ( -> id int not null auto_increment primary key, -> keyword varchar(256) not null -> ) -> ; Query OK, 0 rows affected (0.06 sec) MySQL [test]> insert into tbl_keyword(keyword) values ("aa"…
mysql处理某个唯一索引时存在则更新,不存在则插入的情况应该是很常见的,网上也有很多类似的文章,我今天就讲讲当这个唯一的索引是多列唯一索引时可能会遇到的问题和方法. 方法一: 使用 INSERT INTO ON ... DUPLICATE KEY UPDATE ... : 表的创建如下: CREATE TABLE `test_table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `var1` varchar(100) CHARACTER SET utf…
1.搜索的索引列:最适合索引的列是出现在where子句中的列,或链接子句中指定的列,而不是出现在select关键词后的选择列表中的列 2.使用唯一索引:考虑列中值的分布.索引的列基础越大,索引的效果越好.列如记录性别的列,不管搜索那个性别,都会得出大约一般的行,因此对此列索引没有太大的作用 3.使用短索引:如果对字符串列进行索引,应该制定一个前缀长度,只要有可能就尽量这样做.例如,有一个CHAR(200)列,如果在前10个或者20个字符进行索引能够节省大量索引空间,也可能会使查询更快.较小的索引…
MySql(二)索引的设计与使用 一.索引概述 二.设计索引的原则 三.BTREE索引与HASH索引 一.索引概述 所有Mysql列类型都可以被索引,对相关列使用索引时提高select操作性能的最佳途径. 根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种存储引擎对每个表至少支持16个索引,总索引长度至少为256字节. MyISAM和InnoDB存储引擎的表默认创建的都是BTREE索引. 索引在创建表的时候可以同时创建,也可以随时增加新的索引. 创建新索引的语法为: create [un…