Delete graph data with DML
Stay organized with collections
Save and categorize content based on your preferences.
Delete Spanner Graph data using DML.
Explore further
For detailed documentation that includes this code sample, see the following:
Code sample
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
[[["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"]],[],[],[],null,["# Delete graph data with DML\n\nDelete Spanner Graph data using DML.\n\nExplore further\n---------------\n\n\nFor detailed documentation that includes this code sample, see the following:\n\n- [Insert, update, or delete Spanner Graph data](/spanner/docs/graph/insert-update-delete-data)\n\nCode sample\n-----------\n\n### C++\n\n\nTo learn how to install and use the client library for Spanner, see\n[Spanner client libraries](/spanner/docs/reference/libraries).\n\n\nTo authenticate to Spanner, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n void DeleteDataWithDml(google::cloud::spanner::Client client) {\n using ::google::cloud::StatusOr;\n namespace spanner = ::google::cloud::spanner;\n\n auto commit_result = client.Commit([&client](spanner::Transaction txn)\n -\u003e StatusOr\u003cspanner::Mutations\u003e {\n auto deleted = client.ExecuteDml(\n std::move(txn),\n spanner::SqlStatement(\n \"DELETE FROM AccountTransferAccount WHERE id = 1 AND to_id = 2\"));\n if (!deleted) return std::move(deleted).status();\n return spanner::Mutations{};\n });\n if (!commit_result) throw std::move(commit_result).status();\n\n commit_result = client.Commit(\n [&client](spanner::Transaction txn) -\u003e StatusOr\u003cspanner::Mutations\u003e {\n auto deleted = client.ExecuteDml(\n std::move(txn),\n spanner::SqlStatement(\"DELETE FROM Account WHERE id = 2\"));\n if (!deleted) return std::move(deleted).status();\n return spanner::Mutations{};\n });\n if (!commit_result) throw std::move(commit_result).status();\n\n std::cout \u003c\u003c \"Delete was successful [spanner_delete_graph_data_with_dml]\\n\";\n }\n\n### Go\n\n\nTo learn how to install and use the client library for Spanner, see\n[Spanner client libraries](/spanner/docs/reference/libraries).\n\n\nTo authenticate to Spanner, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n\n import (\n \t\"context\"\n \t\"fmt\"\n \t\"io\"\n\n \t\"cloud.google.com/go/spanner\"\n )\n\n func deleteGraphDataWithDml(w io.Writer, db string) error {\n \tctx := context.Background()\n \tclient, err := spanner.NewClient(ctx, db)\n \tif err != nil {\n \t\treturn err\n \t}\n \tdefer client.Close()\n\n \t// Execute a ReadWriteTransaction to update the 'AccountTransferAccount'\n \t// table underpinning 'AccountTransferAccount' edges in 'FinGraph'. The\n \t// function run by ReadWriteTransaction executes an 'DELETE' SQL DML\n \t// statement. This has the effect of deleting the 'AccountTransferAccount'\n \t// edge where the source 'id' is 1 and the destination 'id' is 2 from the graph.\n \t_, err1 := client.ReadWriteTransaction(ctx, func(ctx context.Context, txn *spanner.ReadWriteTransaction) error {\n \t\tstmt := spanner.https://cloud.google.com/go/docs/reference/cloud.google.com/go/spanner/latest/index.html#cloud_google_com_go_spanner_Statement{SQL: `DELETE FROM AccountTransferAccount WHERE id = 1 AND to_id = 2`}\n \t\trowCount, err := txn.Update(ctx, stmt)\n \t\tif err != nil {\n \t\t\treturn err\n \t\t}\n \t\tfmt.Fprintf(w, \"%d AccountTransferAccount record(s) deleted.\\n\", rowCount)\n \t\treturn nil\n \t})\n\n \tif err1 != nil {\n \t\treturn err1\n \t}\n\n \t// Execute a ReadWriteTransaction to update the 'Account' table underpinning\n \t//'Account' nodes in 'FinGraph'. In 'FinGraph', nodes can only be deleted\n \t// after any edges referencing the nodes have been deleted first. The function\n \t// run by ReadWriteTransaction executes an 'DELETE' SQL DML statement. This has\n \t// the effect of deleting the 'Account' node whose 'id' is 1 from the graph.\n \t_, err2 := client.ReadWriteTransaction(ctx, func(ctx context.Context, txn *spanner.ReadWriteTransaction) error {\n \t\tstmt := spanner.https://cloud.google.com/go/docs/reference/cloud.google.com/go/spanner/latest/index.html#cloud_google_com_go_spanner_Statement{SQL: `DELETE FROM Account WHERE id = 2`}\n \t\trowCount, err := txn.Update(ctx, stmt)\n \t\tif err != nil {\n \t\t\treturn err\n \t\t}\n \t\tfmt.Fprintf(w, \"%d Account record(s) deleted.\\n\", rowCount)\n \t\treturn nil\n \t})\n\n \treturn err2\n }\n\n### Java\n\n\nTo learn how to install and use the client library for Spanner, see\n[Spanner client libraries](/spanner/docs/reference/libraries).\n\n\nTo authenticate to Spanner, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n static void deleteUsingDml(DatabaseClient dbClient) {\n dbClient\n .readWriteTransaction()\n .run(\n transaction -\u003e {\n String sql = \"DELETE FROM AccountTransferAccount WHERE id = 1 AND to_id = 2\";\n long rowCount = transaction.executeUpdate(Statement.of(sql));\n System.out.printf(\"%d AccountTransferAccount record(s) deleted.\\n\", rowCount);\n return null;\n });\n\n dbClient\n .readWriteTransaction()\n .run(\n transaction -\u003e {\n String sql = \"DELETE FROM Account WHERE id = 2\";\n long rowCount = transaction.executeUpdate(Statement.of(sql));\n System.out.printf(\"%d Account record(s) deleted.\\n\", rowCount);\n return null;\n });\n }\n\n### Python\n\n\nTo learn how to install and use the client library for Spanner, see\n[Spanner client libraries](/spanner/docs/reference/libraries).\n\n\nTo authenticate to Spanner, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n def delete_data_with_dml(instance_id, database_id):\n \"\"\"Deletes sample data from the database using a DML statement.\"\"\"\n\n spanner_client = spanner.Client()\n instance = spanner_client.instance(instance_id)\n database = instance.database(database_id)\n\n def delete_transfers(transaction):\n row_ct = transaction.execute_update(\n \"DELETE FROM AccountTransferAccount WHERE id = 1 AND to_id = 2\"\n )\n\n print(\"{} AccountTransferAccount record(s) deleted.\".format(row_ct))\n\n def delete_accounts(transaction):\n row_ct = transaction.execute_update(\"DELETE FROM Account WHERE id = 2\")\n\n print(\"{} Account record(s) deleted.\".format(row_ct))\n\n database.run_in_transaction(delete_transfers)\n database.run_in_transaction(delete_accounts)\n\nWhat's next\n-----------\n\n\nTo search and filter code samples for other Google Cloud products, see the\n[Google Cloud sample browser](/docs/samples?product=spanner)."]]