Seq*_*zia 14 mysql sql-server coldfusion
我正常的插入一个表然后获取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
Run Code Online (Sandbox Code Playgroud)
我的问题是2部分.首先,这是最好的方法吗?我读到GUID有可能在我身上发生变化,我最终在第二个表中出现了无效的GUID.我假设这个机会非常渺茫,我多年来一直在各种项目上做这件事并且从来没有遇到过问题.
我的问题的第二部分是在MySQL中做这样的工作吗?我开始使用MySQL开发一个新项目,我不确定最好的方法.我通常只在MSSQL上工作过.
我在这个新项目上使用CF9和MySQL.
对此的任何帮助都会很棒.
提前致谢.
Aar*_*lee 26
第1部分: 我个人不会在单个查询中批处理多个语句,以降低SQL注入的风险.这是ColdFusion管理员的数据源中的设置.执行存储过程(可能正在执行的操作(?))是另一个故事,但是,如果这是您的意图,您应该将您的问题改为"使用mySQL存储过程插入后获取主键".
第2部分: 与许多事情一样,ColdFusion使得为新插入的记录获取主键非常容易 - 即使您使用的是自动增量键,GUID或类似Oracle的ROWNUM.这适用于Adobe ColdFusion支持的几乎所有数据库,包括MSSQL或MySQL.唯一的例外是数据库的版本 - 例如,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>
Run Code Online (Sandbox Code Playgroud)
从CF9 +开始,您可以使用通用密钥名称访问新ID(对于任何数据库):
result.GENERATEDKEY // All databases
Run Code Online (Sandbox Code Playgroud)
对于CF8,不同的数据库在结果值中将具有不同的键.这是一个简单的表,以帮助我从cfquery文档中复制.
result.identitycol // MSSQL
result.rowid // Oracle
result.sys_identity // Sybase
result.serial_col // Informix
result.generated_key // MySQL
Run Code Online (Sandbox Code Playgroud)
如果您有任何疑问,可以看到如下的漂亮转储:
<cfdump var="#result#" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13312 次 |
| 最近记录: |