Like insert, except that if the row already exists, then its column values are overwritten with the ones provided. Any column values not explicitly written are preserved. When using insert_or_update, just as when using insert, all NOT NULL columns in the table must be given a value. This holds true even when the row already exists and will therefore actually be updated.
Like insert, except that if the row already exists, it is deleted, and the column values provided are inserted instead. Unlike insert_or_update, this means any values not explicitly written become NULL. In an interleaved table, if you create the child table with the ON DELETE CASCADE annotation, then replacing a parent row also deletes the child rows. Otherwise, you must delete the child rows before you replace the parent row.
Like insert, except that if the row already exists, then
its column values are overwritten with the ones provided. Any
column values not explicitly written are preserved.
When using insert_or_update, just as when using insert, all NOT
NULL columns in the table must be given a value. This holds true
even when the row already exists and will therefore actually be updated.
Like insert, except that if the row already exists, then
its column values are overwritten with the ones provided. Any
column values not explicitly written are preserved.
When using insert_or_update, just as when using insert, all NOT
NULL columns in the table must be given a value. This holds true
even when the row already exists and will therefore actually be updated.
Like insert, except that if the row already exists, it is
deleted, and the column values provided are inserted
instead. Unlike insert_or_update, this means any values not
explicitly written become NULL.
In an interleaved table, if you create the child table with the
ON DELETE CASCADE annotation, then replacing a parent row
also deletes the child rows. Otherwise, you must delete the
child rows before you replace the parent row.
Like insert, except that if the row already exists, it is
deleted, and the column values provided are inserted
instead. Unlike insert_or_update, this means any values not
explicitly written become NULL.
In an interleaved table, if you create the child table with the
ON DELETE CASCADE annotation, then replacing a parent row
also deletes the child rows. Otherwise, you must delete the
child rows before you replace the parent row.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-28 UTC."],[],[],null,["# Cloud Spanner V1 Client - Class Mutation (1.104.0)\n\nVersion latestkeyboard_arrow_down\n\n- [1.104.0 (latest)](/php/docs/reference/cloud-spanner/latest/V1.Mutation)\n- [1.103.0](/php/docs/reference/cloud-spanner/1.103.0/V1.Mutation)\n- [1.102.0](/php/docs/reference/cloud-spanner/1.102.0/V1.Mutation)\n- [1.101.0](/php/docs/reference/cloud-spanner/1.101.0/V1.Mutation)\n- [1.100.0](/php/docs/reference/cloud-spanner/1.100.0/V1.Mutation)\n- [1.98.0](/php/docs/reference/cloud-spanner/1.98.0/V1.Mutation)\n- [1.97.0](/php/docs/reference/cloud-spanner/1.97.0/V1.Mutation)\n- [1.96.0](/php/docs/reference/cloud-spanner/1.96.0/V1.Mutation)\n- [1.95.0](/php/docs/reference/cloud-spanner/1.95.0/V1.Mutation)\n- [1.94.0](/php/docs/reference/cloud-spanner/1.94.0/V1.Mutation)\n- [1.93.1](/php/docs/reference/cloud-spanner/1.93.1/V1.Mutation)\n- [1.92.1](/php/docs/reference/cloud-spanner/1.92.1/V1.Mutation)\n- [1.91.0](/php/docs/reference/cloud-spanner/1.91.0/V1.Mutation)\n- [1.90.0](/php/docs/reference/cloud-spanner/1.90.0/V1.Mutation)\n- [1.89.0](/php/docs/reference/cloud-spanner/1.89.0/V1.Mutation)\n- [1.88.0](/php/docs/reference/cloud-spanner/1.88.0/V1.Mutation)\n- [1.87.0](/php/docs/reference/cloud-spanner/1.87.0/V1.Mutation)\n- [1.86.0](/php/docs/reference/cloud-spanner/1.86.0/V1.Mutation)\n- [1.85.0](/php/docs/reference/cloud-spanner/1.85.0/V1.Mutation)\n- [1.84.0](/php/docs/reference/cloud-spanner/1.84.0/V1.Mutation)\n- [1.83.0](/php/docs/reference/cloud-spanner/1.83.0/V1.Mutation)\n- [1.82.0](/php/docs/reference/cloud-spanner/1.82.0/V1.Mutation)\n- [1.81.0](/php/docs/reference/cloud-spanner/1.81.0/V1.Mutation)\n- [1.80.0](/php/docs/reference/cloud-spanner/1.80.0/V1.Mutation)\n- [1.79.0](/php/docs/reference/cloud-spanner/1.79.0/V1.Mutation)\n- [1.78.0](/php/docs/reference/cloud-spanner/1.78.0/V1.Mutation)\n- [1.77.0](/php/docs/reference/cloud-spanner/1.77.0/V1.Mutation)\n- [1.76.1](/php/docs/reference/cloud-spanner/1.76.1/V1.Mutation)\n- [1.68.0](/php/docs/reference/cloud-spanner/1.68.0/V1.Mutation)\n- [1.67.0](/php/docs/reference/cloud-spanner/1.67.0/V1.Mutation)\n- [1.66.0](/php/docs/reference/cloud-spanner/1.66.0/V1.Mutation)\n- [1.65.0](/php/docs/reference/cloud-spanner/1.65.0/V1.Mutation)\n- [1.64.0](/php/docs/reference/cloud-spanner/1.64.0/V1.Mutation)\n- [1.63.2](/php/docs/reference/cloud-spanner/1.63.2/V1.Mutation)\n- [1.62.1](/php/docs/reference/cloud-spanner/1.62.1/V1.Mutation)\n- [1.61.0](/php/docs/reference/cloud-spanner/1.61.0/V1.Mutation)\n- [1.60.0](/php/docs/reference/cloud-spanner/1.60.0/V1.Mutation)\n- [1.59.0](/php/docs/reference/cloud-spanner/1.59.0/V1.Mutation)\n- [1.58.4](/php/docs/reference/cloud-spanner/1.58.4/V1.Mutation)\n- [1.57.0](/php/docs/reference/cloud-spanner/1.57.0/V1.Mutation)\n- [1.56.0](/php/docs/reference/cloud-spanner/1.56.0/V1.Mutation)\n- [1.55.0](/php/docs/reference/cloud-spanner/1.55.0/V1.Mutation)\n- [1.54.2](/php/docs/reference/cloud-spanner/1.54.2/V1.Mutation) \nReference documentation and code samples for the Cloud Spanner V1 Client class Mutation.\n\nA modification to one or more Cloud Spanner rows. Mutations can be\napplied to a Cloud Spanner database by sending them in a\nCommit call.\n\nGenerated from protobuf message `google.spanner.v1.Mutation`\n\nNamespace\n---------\n\nGoogle \\\\ Cloud \\\\ Spanner \\\\ V1\n\nMethods\n-------\n\n### __construct\n\nConstructor.\n\n### getInsert\n\nInsert new rows in a table. If any of the rows already exist,\nthe write or transaction fails with error `ALREADY_EXISTS`.\n\n### hasInsert\n\n### setInsert\n\nInsert new rows in a table. If any of the rows already exist,\nthe write or transaction fails with error `ALREADY_EXISTS`.\n\n### getUpdate\n\nUpdate existing rows in a table. If any of the rows does not\nalready exist, the transaction fails with error `NOT_FOUND`.\n\n### hasUpdate\n\n### setUpdate\n\nUpdate existing rows in a table. If any of the rows does not\nalready exist, the transaction fails with error `NOT_FOUND`.\n\n### getInsertOrUpdate\n\nLike [insert](/php/docs/reference/cloud-spanner/latest/V1.Mutation#_Google_Cloud_Spanner_V1_Mutation__getInsert__), except that if the row already exists, then\nits column values are overwritten with the ones provided. Any\ncolumn values not explicitly written are preserved.\n\nWhen using [insert_or_update](/php/docs/reference/cloud-spanner/latest/V1.Mutation#_Google_Cloud_Spanner_V1_Mutation__getInsertOrUpdate__), just as when using [insert](/php/docs/reference/cloud-spanner/latest/V1.Mutation#_Google_Cloud_Spanner_V1_Mutation__getInsert__), all `NOT\nNULL` columns in the table must be given a value. This holds true\neven when the row already exists and will therefore actually be updated.\n\n### hasInsertOrUpdate\n\n### setInsertOrUpdate\n\nLike [insert](/php/docs/reference/cloud-spanner/latest/V1.Mutation#_Google_Cloud_Spanner_V1_Mutation__getInsert__), except that if the row already exists, then\nits column values are overwritten with the ones provided. Any\ncolumn values not explicitly written are preserved.\n\nWhen using [insert_or_update](/php/docs/reference/cloud-spanner/latest/V1.Mutation#_Google_Cloud_Spanner_V1_Mutation__getInsertOrUpdate__), just as when using [insert](/php/docs/reference/cloud-spanner/latest/V1.Mutation#_Google_Cloud_Spanner_V1_Mutation__getInsert__), all `NOT\nNULL` columns in the table must be given a value. This holds true\neven when the row already exists and will therefore actually be updated.\n\n### getReplace\n\nLike [insert](/php/docs/reference/cloud-spanner/latest/V1.Mutation#_Google_Cloud_Spanner_V1_Mutation__getInsert__), except that if the row already exists, it is\ndeleted, and the column values provided are inserted\ninstead. Unlike [insert_or_update](/php/docs/reference/cloud-spanner/latest/V1.Mutation#_Google_Cloud_Spanner_V1_Mutation__getInsertOrUpdate__), this means any values not\nexplicitly written become `NULL`.\n\nIn an interleaved table, if you create the child table with the\n`ON DELETE CASCADE` annotation, then replacing a parent row\nalso deletes the child rows. Otherwise, you must delete the\nchild rows before you replace the parent row.\n\n### hasReplace\n\n### setReplace\n\nLike [insert](/php/docs/reference/cloud-spanner/latest/V1.Mutation#_Google_Cloud_Spanner_V1_Mutation__getInsert__), except that if the row already exists, it is\ndeleted, and the column values provided are inserted\ninstead. Unlike [insert_or_update](/php/docs/reference/cloud-spanner/latest/V1.Mutation#_Google_Cloud_Spanner_V1_Mutation__getInsertOrUpdate__), this means any values not\nexplicitly written become `NULL`.\n\nIn an interleaved table, if you create the child table with the\n`ON DELETE CASCADE` annotation, then replacing a parent row\nalso deletes the child rows. Otherwise, you must delete the\nchild rows before you replace the parent row.\n\n### getDelete\n\nDelete rows from a table. Succeeds whether or not the named\nrows were present.\n\n### hasDelete\n\n### setDelete\n\nDelete rows from a table. Succeeds whether or not the named\nrows were present.\n\n### getOperation"]]