== Why is this an issue?

A primary key uniquely identifies a row in a database table, and should be considered immutable. Primary key values may be used in foreign keys in other tables, as well as in external systems. Changing such a value, even with the best of motivations, is likely to wreak havoc on the system's data integrity and potentially across other systems as well.


*Note* That this rule raises issues only when a database catalog is provided during the SonarQube analysis.


=== Noncompliant code example

[source,cobol]
----
UPDATE USERS
  SET USER_ID = :new-id, USER_NAME = :new-name  *> Noncompliant
  WHERE USER_ID = :input
----


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

"COLUMN_X" is the primary key and should not be updated.


=== Highlighting

primary: column name

secondary: "UPDATE"


'''
== Comments And Links
(visible only on this page)

=== on 11 Jan 2016, 16:35:48 Pierre-Yves Nicolas wrote:
This rule should catch issues on primary keys, but also on partitioning indexes. This is reflected in the message, but not in the current description.

=== on 14 Jan 2016, 16:32:30 Elena Vilchik wrote:
 IMO table name ``++ROW++`` is confusing

=== on 25 Jan 2016, 15:27:48 Pierre-Yves Nicolas wrote:
It seems that checking partitioning columns is more related to performance. Maybe we could add a rule parameter to deactivate that part of the check.

=== on 26 Jan 2016, 14:41:36 Pierre-Yves Nicolas wrote:
In fact, we should think about creating a separate rule to check partitioning columns since the motivation is not the same ("performance" vs "data related reliability").

endif::env-github,rspecator-view[]
