gpt4 book ai didi

mysql - 使用 ColdFusion 和 MySQL 插入后获取表 ID

转载 作者:IT老高 更新时间:2023-10-29 00:06:05 25 4
gpt4 key购买 nike

我插入一个表然后取回 ID 以便我可以插入另一个表的正常过程在 MSSQL 中是这样的:

DECLARE @transactionKey uniqueidentifier
SET @transactionKey = NEWID()

INSERT INTO transactions(transactionKey, transactionDate, transactionAmount)
VALUES(@transactionKey, '#transactionDate#', '#transactionAmount#')

DECLARE @transactionID int
SELECT @transactionID = transactionID
FROM transactions
WHERE transactionKey = @transactionKey


INSERT INTO transactionItems(transactionID, itemID, itemAmount)
VALUES(@transactionID, '#itemID#', '#itemAmount#')


SELECT @transactionID as transactionID

我的问题分为两部分。首先,这是最好的方法吗?我读到 GUID 有可能在我身上发生变化,我最终在第二个表中得到了一个无效的 GUID。我认为这种可能性很小,而且我多年来一直在各种项目中这样做,从来没有遇到过问题。

我问题的第二部分是这样的事情在 MySQL 中是否有效?我开始使用 MySQL 进行一个新项目,但我不确定最好的方法。我过去通常只使用 MSSQL。

我在这个新项目中使用 CF9 和 MySQL。

在这方面的任何帮助都会很棒。

提前致谢。

最佳答案

第 1 部分:我个人不会在单个查询中批处理多个语句以降低 SQL 注入(inject)的风险。这是 ColdFusion 管理员数据源中的一个设置。执行存储过程,这可能是您正在做的事情(?),这是另一回事,但是,如果这是您的意图,您应该将问题改写为“使用 mySQL 存储过程插入后获取主键”。

第 2 部分:ColdFusion 与许多东西一样,使得获取新插入记录的主键变得非常容易——即使您正在使用自动递增键、GUID 或类似 Oracle 的 ROWNUM 之类的东西。这将适用于 Adob​​e ColdFusion 支持的几乎所有数据库,包括 MSSQL 或 MySQL。唯一的异常(exception)是数据库的版本——例如,MySQL 3 将不支持它;然而,MySQL 4+ 会。

<cfquery result="result">
INSERT INTO myTable (
title
) VALUES (
<cfqueryparam value="Nice feature!" cfsqltype="cf_sql_varchar">
)
</cfquery>

<--- get the primary key of the inserted record --->
<cfset NewPrimaryKey = result.generatedkey>

从 CF9+ 开始,您可以使用通用键名访问新 ID(适用于任何数据库):

result.GENERATEDKEY    // All databases

对于 CF8,不同的数据库在结果值中会有不同的键。这是一个简单的表格,可以帮助我从 cfquery documentation 复制.

result.identitycol    // MSSQL
result.rowid // Oracle
result.sys_identity // Sybase
result.serial_col // Informix
result.generated_key // MySQL

如果你有任何问题你可以看到一个漂亮的转储如下:

<cfdump var="#result#" />

关于mysql - 使用 ColdFusion 和 MySQL 插入后获取表 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7860734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com