[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["很难理解","hardToUnderstand","thumb-down"],["信息或示例代码不正确","incorrectInformationOrSampleCode","thumb-down"],["没有我需要的信息/示例","missingTheInformationSamplesINeed","thumb-down"],["翻译问题","translationIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-09-05。"],[],[],null,["# Migrate your application code\n\nA typical application uses a client, such as a low-level driver or an object-relational mapper (ORM) to\nconnect to the database. Spanner supports clients in multiple languages\nthat let you use common libraries, such as JDBC, across developer\nenvironments. For more information, see\n[Overview of drivers](/spanner/docs/drivers-overview).\n\nIn addition to managing how your application connects to Spanner,\nyou also have to manage which queries are sent and which syntax the queries are using.\nSpanner supports two SQL dialects, both based on ANSI SQL standard.\nYou can choose to use GoogleSQL or PostgreSQL interface for Spanner based\non the ecosystem you want to operate in. For more information, see\n[Choosing the right dialect for your Spanner database](/spanner/docs/choose-googlesql-or-postgres).\nBecause of the\narchitectural differences between the Spanner database and your\nsource database, the syntax used\nin Spanner might not align with the syntax of your source database.\n\nComplete the following steps manually\nto migrate your application to Spanner:\n\n- Spanner doesn't support running user code in the database,\n so you need to move any procedures and triggers stored at the database level\n into the application.\n\n- Use Spanner client libraries and ORMs. For more information, see\n [Overview of APIs, client libraries, and ORM drivers](/spanner/docs/api-libraries-overview).\n\n- Take note of [Spanner partitioned DML](/spanner/docs/dml-partitioned),\n [read-only transactions](/spanner/docs/transactions#read-only_transactions),\n [commit timestamps](/spanner/docs/commit-timestamp), and read timestamps and\n how they can optimize application performance.\n\n- You also might need to make changes to transaction handling. Consider the following:\n\n - The mutations per commit limit is 80,000. Each secondary index on a table is an additional mutation per row. To modify data using mutations, see [Insert, update, and delete data using mutations](/spanner/docs/modify-mutation-api). To modify a large amount of data, use [partitioned DML](/spanner/docs/dml-partitioned)."]]