#In this test case we will check what will happen in the case of hash collision SET debug_dbug="d,same_long_unique_hash"; create table t1(a blob unique); FLUSH STATUS; insert into t1 values('xyz'); insert into t1 values('abc'); insert into t1 values('sachin'); insert into t1 values('sachin'); ERROR 23000: Duplicate entry 'sachin' for key 'a' insert into t1 values('maria'); insert into t1 values('maria'); ERROR 23000: Duplicate entry 'maria' for key 'a' drop table t1; SHOW STATUS LIKE 'handler_read_next'; Variable_name Value Handler_read_next 11 SET debug_dbug=""; create table t1(a blob unique); FLUSH STATUS; insert into t1 values('xyz'); insert into t1 values('abc'); insert into t1 values('sachin'); insert into t1 values('sachin'); ERROR 23000: Duplicate entry 'sachin' for key 'a' insert into t1 values('maria'); insert into t1 values('maria'); ERROR 23000: Duplicate entry 'maria' for key 'a' drop table t1; SHOW STATUS LIKE 'handler_read_next'; Variable_name Value Handler_read_next 0 SET debug_dbug="d,same_long_unique_hash"; create table t1(a blob unique, b blob unique); insert into t1 values('xyz', 11); insert into t1 values('abc', 22); insert into t1 values('sachin', 1); insert into t1 values('sachin', 4); ERROR 23000: Duplicate entry 'sachin' for key 'a' insert into t1 values('maria', 2); insert into t1 values('maria', 3); ERROR 23000: Duplicate entry 'maria' for key 'a' drop table t1; create table t1(a blob , b blob , unique(a,b)); insert into t1 values('xyz', 11); insert into t1 values('abc', 22); insert into t1 values('sachin', 1); insert into t1 values('sachin', 1); ERROR 23000: Duplicate entry 'sachin-1' for key 'a' insert into t1 values('maria', 2); insert into t1 values('maria', 2); ERROR 23000: Duplicate entry 'maria-2' for key 'a' drop table t1; ##Internal State of long unique tables SET debug_dbug="d,print_long_unique_internal_state"; create table t1 ( a blob unique); Warnings: Note 1 Printing Table state, It will print table fields, fields->offset,field->null_bit, field->null_pos and key_info ... Printing Table keyinfo table->s->reclength 19 table->s->fields 2 table->key_info[0] user_defined_key_parts = 1 table->key_info[0] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->key_info[0] flags & HA_NOSAME = 0 table->s->key_info[0] user_defined_key_parts = 1 table->s->key_info[0] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->s->key_info[0] flags & HA_NOSAME = 1 Printing table->key_info[0].key_part[0] info key_part->offset = 11 key_part->field_name = DB_ROW_HASH_1 key_part->length = 8 key_part->null_bit = 2 key_part->null_offset = 0 Printing share->key_info[0].key_part[0] info key_part->offset = 1 key_part->field_name = a key_part->length = 0 key_part->null_bit = 1 key_part->null_offset = 0 Printing table->fields table->field[0]->field_name a table->field[0]->offset = 1 table->field[0]->field_length = 10 table->field[0]->null_pos wrt to record 0 = 0 table->field[0]->null_bit_pos = 1 table->field[1]->field_name DB_ROW_HASH_1 table->field[1]->offset = 11 table->field[1]->field_length = 8 table->field[1]->null_pos wrt to record 0 = 0 table->field[1]->null_bit_pos = 2 SET debug_dbug=""; drop table t1; SET debug_dbug="d,print_long_unique_internal_state"; create table t1 ( a blob unique, b blob unique , c blob unique); Warnings: Note 1 Printing Table state, It will print table fields, fields->offset,field->null_bit, field->null_pos and key_info ... Printing Table keyinfo table->s->reclength 55 table->s->fields 6 table->key_info[0] user_defined_key_parts = 1 table->key_info[0] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->key_info[0] flags & HA_NOSAME = 0 table->s->key_info[0] user_defined_key_parts = 1 table->s->key_info[0] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->s->key_info[0] flags & HA_NOSAME = 1 Printing table->key_info[0].key_part[0] info key_part->offset = 31 key_part->field_name = DB_ROW_HASH_1 key_part->length = 8 key_part->null_bit = 8 key_part->null_offset = 0 Printing share->key_info[0].key_part[0] info key_part->offset = 1 key_part->field_name = a key_part->length = 0 key_part->null_bit = 1 key_part->null_offset = 0 table->key_info[1] user_defined_key_parts = 1 table->key_info[1] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->key_info[1] flags & HA_NOSAME = 0 table->s->key_info[1] user_defined_key_parts = 1 table->s->key_info[1] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->s->key_info[1] flags & HA_NOSAME = 1 Printing table->key_info[1].key_part[0] info key_part->offset = 39 key_part->field_name = DB_ROW_HASH_2 key_part->length = 8 key_part->null_bit = 16 key_part->null_offset = 0 Printing share->key_info[1].key_part[0] info key_part->offset = 11 key_part->field_name = b key_part->length = 0 key_part->null_bit = 2 key_part->null_offset = 0 table->key_info[2] user_defined_key_parts = 1 table->key_info[2] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->key_info[2] flags & HA_NOSAME = 0 table->s->key_info[2] user_defined_key_parts = 1 table->s->key_info[2] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->s->key_info[2] flags & HA_NOSAME = 1 Printing table->key_info[2].key_part[0] info key_part->offset = 47 key_part->field_name = DB_ROW_HASH_3 key_part->length = 8 key_part->null_bit = 32 key_part->null_offset = 0 Printing share->key_info[2].key_part[0] info key_part->offset = 21 key_part->field_name = c key_part->length = 0 key_part->null_bit = 4 key_part->null_offset = 0 Printing table->fields table->field[0]->field_name a table->field[0]->offset = 1 table->field[0]->field_length = 10 table->field[0]->null_pos wrt to record 0 = 0 table->field[0]->null_bit_pos = 1 table->field[1]->field_name b table->field[1]->offset = 11 table->field[1]->field_length = 10 table->field[1]->null_pos wrt to record 0 = 0 table->field[1]->null_bit_pos = 2 table->field[2]->field_name c table->field[2]->offset = 21 table->field[2]->field_length = 10 table->field[2]->null_pos wrt to record 0 = 0 table->field[2]->null_bit_pos = 4 table->field[3]->field_name DB_ROW_HASH_1 table->field[3]->offset = 31 table->field[3]->field_length = 8 table->field[3]->null_pos wrt to record 0 = 0 table->field[3]->null_bit_pos = 8 table->field[4]->field_name DB_ROW_HASH_2 table->field[4]->offset = 39 table->field[4]->field_length = 8 table->field[4]->null_pos wrt to record 0 = 0 table->field[4]->null_bit_pos = 16 table->field[5]->field_name DB_ROW_HASH_3 table->field[5]->offset = 47 table->field[5]->field_length = 8 table->field[5]->null_pos wrt to record 0 = 0 table->field[5]->null_bit_pos = 32 SET debug_dbug=""; drop table t1; SET debug_dbug="d,print_long_unique_internal_state"; create table t1 ( a blob , b blob , c blob , d blob , unique (a,b), unique(c, d)); Warnings: Note 1 Printing Table state, It will print table fields, fields->offset,field->null_bit, field->null_pos and key_info ... Printing Table keyinfo table->s->reclength 57 table->s->fields 6 table->key_info[0] user_defined_key_parts = 1 table->key_info[0] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->key_info[0] flags & HA_NOSAME = 0 table->s->key_info[0] user_defined_key_parts = 2 table->s->key_info[0] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->s->key_info[0] flags & HA_NOSAME = 1 Printing table->key_info[0].key_part[0] info key_part->offset = 41 key_part->field_name = DB_ROW_HASH_1 key_part->length = 8 key_part->null_bit = 16 key_part->null_offset = 0 Printing share->key_info[0].key_part[0] info key_part->offset = 1 key_part->field_name = a key_part->length = 0 key_part->null_bit = 1 key_part->null_offset = 0 Printing share->key_info[0].key_part[1] info key_part->offset = 11 key_part->field_name = b key_part->length = 0 key_part->null_bit = 2 key_part->null_offset = 0 table->key_info[1] user_defined_key_parts = 1 table->key_info[1] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->key_info[1] flags & HA_NOSAME = 0 table->s->key_info[1] user_defined_key_parts = 2 table->s->key_info[1] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->s->key_info[1] flags & HA_NOSAME = 1 Printing table->key_info[1].key_part[0] info key_part->offset = 49 key_part->field_name = DB_ROW_HASH_2 key_part->length = 8 key_part->null_bit = 32 key_part->null_offset = 0 Printing share->key_info[1].key_part[0] info key_part->offset = 21 key_part->field_name = c key_part->length = 0 key_part->null_bit = 4 key_part->null_offset = 0 Printing share->key_info[1].key_part[1] info key_part->offset = 31 key_part->field_name = d key_part->length = 0 key_part->null_bit = 8 key_part->null_offset = 0 Printing table->fields table->field[0]->field_name a table->field[0]->offset = 1 table->field[0]->field_length = 10 table->field[0]->null_pos wrt to record 0 = 0 table->field[0]->null_bit_pos = 1 table->field[1]->field_name b table->field[1]->offset = 11 table->field[1]->field_length = 10 table->field[1]->null_pos wrt to record 0 = 0 table->field[1]->null_bit_pos = 2 table->field[2]->field_name c table->field[2]->offset = 21 table->field[2]->field_length = 10 table->field[2]->null_pos wrt to record 0 = 0 table->field[2]->null_bit_pos = 4 table->field[3]->field_name d table->field[3]->offset = 31 table->field[3]->field_length = 10 table->field[3]->null_pos wrt to record 0 = 0 table->field[3]->null_bit_pos = 8 table->field[4]->field_name DB_ROW_HASH_1 table->field[4]->offset = 41 table->field[4]->field_length = 8 table->field[4]->null_pos wrt to record 0 = 0 table->field[4]->null_bit_pos = 16 table->field[5]->field_name DB_ROW_HASH_2 table->field[5]->offset = 49 table->field[5]->field_length = 8 table->field[5]->null_pos wrt to record 0 = 0 table->field[5]->null_bit_pos = 32 SET debug_dbug=""; drop table t1; SET debug_dbug="d,print_long_unique_internal_state"; create table t1(a int primary key, b blob unique , c blob unique not null); Warnings: Note 1 Printing Table state, It will print table fields, fields->offset,field->null_bit, field->null_pos and key_info ... Printing Table keyinfo table->s->reclength 41 table->s->fields 5 table->key_info[0] user_defined_key_parts = 1 table->key_info[0] algorithm == HA_KEY_ALG_LONG_HASH = 0 table->key_info[0] flags & HA_NOSAME = 1 table->s->key_info[0] user_defined_key_parts = 1 table->s->key_info[0] algorithm == HA_KEY_ALG_LONG_HASH = 0 table->s->key_info[0] flags & HA_NOSAME = 1 Printing table->key_info[0].key_part[0] info key_part->offset = 1 key_part->field_name = a key_part->length = 4 key_part->null_bit = 0 key_part->null_offset = 0 Printing share->key_info[0].key_part[0] info key_part->offset = 1 key_part->field_name = a key_part->length = 4 key_part->null_bit = 0 key_part->null_offset = 0 table->key_info[1] user_defined_key_parts = 1 table->key_info[1] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->key_info[1] flags & HA_NOSAME = 0 table->s->key_info[1] user_defined_key_parts = 1 table->s->key_info[1] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->s->key_info[1] flags & HA_NOSAME = 1 Printing table->key_info[1].key_part[0] info key_part->offset = 25 key_part->field_name = DB_ROW_HASH_1 key_part->length = 8 key_part->null_bit = 2 key_part->null_offset = 0 Printing share->key_info[1].key_part[0] info key_part->offset = 5 key_part->field_name = b key_part->length = 0 key_part->null_bit = 1 key_part->null_offset = 0 table->key_info[2] user_defined_key_parts = 1 table->key_info[2] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->key_info[2] flags & HA_NOSAME = 0 table->s->key_info[2] user_defined_key_parts = 1 table->s->key_info[2] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->s->key_info[2] flags & HA_NOSAME = 1 Printing table->key_info[2].key_part[0] info key_part->offset = 33 key_part->field_name = DB_ROW_HASH_2 key_part->length = 8 key_part->null_bit = 0 key_part->null_offset = 0 Printing share->key_info[2].key_part[0] info key_part->offset = 15 key_part->field_name = c key_part->length = 0 key_part->null_bit = 0 key_part->null_offset = 0 Printing table->fields table->field[0]->field_name a table->field[0]->offset = 1 table->field[0]->field_length = 4 table->field[0]->null_pos wrt to record 0 = -1 table->field[0]->null_bit_pos = 0 table->field[1]->field_name b table->field[1]->offset = 5 table->field[1]->field_length = 10 table->field[1]->null_pos wrt to record 0 = 0 table->field[1]->null_bit_pos = 1 table->field[2]->field_name c table->field[2]->offset = 15 table->field[2]->field_length = 10 table->field[2]->null_pos wrt to record 0 = -1 table->field[2]->null_bit_pos = 0 table->field[3]->field_name DB_ROW_HASH_1 table->field[3]->offset = 25 table->field[3]->field_length = 8 table->field[3]->null_pos wrt to record 0 = 0 table->field[3]->null_bit_pos = 2 table->field[4]->field_name DB_ROW_HASH_2 table->field[4]->offset = 33 table->field[4]->field_length = 8 table->field[4]->null_pos wrt to record 0 = -1 table->field[4]->null_bit_pos = 0 SET debug_dbug=""; drop table t1; ##Using hash SET debug_dbug="d,print_long_unique_internal_state"; create table t1(a int ,b int , c int, unique(a, b, c) using hash); Warnings: Note 1 Printing Table state, It will print table fields, fields->offset,field->null_bit, field->null_pos and key_info ... Printing Table keyinfo table->s->reclength 21 table->s->fields 4 table->key_info[0] user_defined_key_parts = 1 table->key_info[0] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->key_info[0] flags & HA_NOSAME = 0 table->s->key_info[0] user_defined_key_parts = 3 table->s->key_info[0] algorithm == HA_KEY_ALG_LONG_HASH = 1 table->s->key_info[0] flags & HA_NOSAME = 1 Printing table->key_info[0].key_part[0] info key_part->offset = 13 key_part->field_name = DB_ROW_HASH_1 key_part->length = 8 key_part->null_bit = 16 key_part->null_offset = 0 Printing share->key_info[0].key_part[0] info key_part->offset = 1 key_part->field_name = a key_part->length = 4 key_part->null_bit = 2 key_part->null_offset = 0 Printing share->key_info[0].key_part[1] info key_part->offset = 5 key_part->field_name = b key_part->length = 4 key_part->null_bit = 4 key_part->null_offset = 0 Printing share->key_info[0].key_part[2] info key_part->offset = 9 key_part->field_name = c key_part->length = 4 key_part->null_bit = 8 key_part->null_offset = 0 Printing table->fields table->field[0]->field_name a table->field[0]->offset = 1 table->field[0]->field_length = 4 table->field[0]->null_pos wrt to record 0 = 0 table->field[0]->null_bit_pos = 2 table->field[1]->field_name b table->field[1]->offset = 5 table->field[1]->field_length = 4 table->field[1]->null_pos wrt to record 0 = 0 table->field[1]->null_bit_pos = 4 table->field[2]->field_name c table->field[2]->offset = 9 table->field[2]->field_length = 4 table->field[2]->null_pos wrt to record 0 = 0 table->field[2]->null_bit_pos = 8 table->field[3]->field_name DB_ROW_HASH_1 table->field[3]->offset = 13 table->field[3]->field_length = 8 table->field[3]->null_pos wrt to record 0 = 0 table->field[3]->null_bit_pos = 16 SET debug_dbug=""; drop table t1; ##Using hash but with memory engine so no long unique column SET debug_dbug="d,print_long_unique_internal_state"; create table t1(a int ,b int , c int, unique(a, b, c) using hash) engine=memory; Warnings: Note 1 Printing Table state, It will print table fields, fields->offset,field->null_bit, field->null_pos and key_info ... Printing Table keyinfo table->s->reclength 13 table->s->fields 3 table->key_info[0] user_defined_key_parts = 3 table->key_info[0] algorithm == HA_KEY_ALG_LONG_HASH = 0 table->key_info[0] flags & HA_NOSAME = 1 table->s->key_info[0] user_defined_key_parts = 3 table->s->key_info[0] algorithm == HA_KEY_ALG_LONG_HASH = 0 table->s->key_info[0] flags & HA_NOSAME = 1 Printing table->key_info[0].key_part[0] info key_part->offset = 1 key_part->field_name = a key_part->length = 4 key_part->null_bit = 2 key_part->null_offset = 0 Printing share->key_info[0].key_part[0] info key_part->offset = 1 key_part->field_name = a key_part->length = 4 key_part->null_bit = 2 key_part->null_offset = 0 Printing share->key_info[0].key_part[1] info key_part->offset = 5 key_part->field_name = b key_part->length = 4 key_part->null_bit = 4 key_part->null_offset = 0 Printing share->key_info[0].key_part[2] info key_part->offset = 9 key_part->field_name = c key_part->length = 4 key_part->null_bit = 8 key_part->null_offset = 0 Printing table->fields table->field[0]->field_name a table->field[0]->offset = 1 table->field[0]->field_length = 4 table->field[0]->null_pos wrt to record 0 = 0 table->field[0]->null_bit_pos = 2 table->field[1]->field_name b table->field[1]->offset = 5 table->field[1]->field_length = 4 table->field[1]->null_pos wrt to record 0 = 0 table->field[1]->null_bit_pos = 4 table->field[2]->field_name c table->field[2]->offset = 9 table->field[2]->field_length = 4 table->field[2]->null_pos wrt to record 0 = 0 table->field[2]->null_bit_pos = 8 SET debug_dbug=""; drop table t1;