MySQL Execution - Replace Insert Ignore Usage #658
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
INSERT IGNOREhas many sharp edges and does more than just ignore Duplicate Key Conflicts. It also swallows errors such as partitioning allocation and divide by zero errors and we should aim to not use this anywhere. See more here: https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#ignore-strict-comparisonUnfortunately MySQL does not have
ON DUPLICATE KEY DO NOTHING, so instead we should use theON DUPLICATE KEY UPDATEsyntax and update something that is ideally part of the duplicate key conflict (in essence a no-op). However, that update should not be on the sharding key that we would want to use with Vitess, as this will cause issues with Vitess query validation.After this change there is only one more location to change - ImmutableClusterMetadata, but cannot be changed in its current state as this table has no column that satisfies the constraints above. However as we read the row back in that case to validate, it is not as critical to solve in the short term.