我有3个表User
,Profile
和ProfilePicture
。 Profile
和ProfilePicture
与User
表具有外键关系。我想在这里做的是每当我通过Web应用程序将数据插入User
表时,AutoGeneratedID
获取并插入到Profile
和ProfilePicture
表中。
CREATE TABLE User
(
UserId INT(11) NOT NULL AUTO_INCREMENT,
Username VARCHAR(45) NOT NULL,
Password VARCHAR(50) NOT NULL,
PRIMARY KEY (`UserId`),
UNIQUE INDEX `UserIdId_UNIQUE` (`UserId` ASC)
);
CREATE TABLE Profile
(
UserId INT(11) NOT NULL,
Firstname VARCHAR(50) NULL,
Lastname VARCHAR(50) NULL,
FOREIGN KEY (UserId) REFERENCES User (UserId)
)
CREATE TABLE ProfilePicture
(
UserId INT(11) NOT NULL,
Picture image NULL,
insertdate date NULL,
FOREIGN KEY (UserId) REFERENCES User (UserId)
)
我知道我必须使用扳机,但我不明白该怎么做。
答案 0 :(得分:1)
我假设您使用存储过程或原始查询执行此操作。这可以通过使用 OUTPUT 子句来实现。
使用列Id
定义本地表DECLARE @OutputTbl TABLE (ID INT)
现在,当您保存用户,然后将新的gnerated id插入@OutputTbl
INSERT INTO User (Username, Password)
OUTPUT INSERTED.UserId INTO @OutputTbl(ID)
VALUES ('name', 'password')
现在,当您在Profile / ProfilePicture中需要此ID时,请从本地表中获取此ID
insert into Profile (
UserId ,
Firstname,
Lastname) Values ((Select ID from @OutputTbl),'fName','lName')
答案 1 :(得分:0)
您可以尝试以下内容:
sudo mongod --directoryperdb --dbpath /usr/local/Cellar/mongodb/3.2.6/data/db --logpath /usr/local/Cellar/mongodb/3.2.6/log/mongodb.log --logappend -rest
如果您在同一个SP中执行这些插入,那么您可以使用,确保UserId是一个标识列:
2016-06-08T14:45:06.970+0200 I CONTROL [initandlisten] MongoDB starting : pid=8107 port=27017 dbpath=/data/db 64-bit host=iMac-Krystyna-2.local
2016-06-08T14:45:06.970+0200 I CONTROL [initandlisten] db version v3.2.6
2016-06-08T14:45:06.970+0200 I CONTROL [initandlisten] git version: 05552b562c7a0b3143a729aaa0838e558dc49b25
2016-06-08T14:45:06.970+0200 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.2h 3 May 2016
2016-06-08T14:45:06.970+0200 I CONTROL [initandlisten] allocator: system
2016-06-08T14:45:06.970+0200 I CONTROL [initandlisten] modules: none
2016-06-08T14:45:06.970+0200 I CONTROL [initandlisten] build environment:
2016-06-08T14:45:06.970+0200 I CONTROL [initandlisten] distarch: x86_64
2016-06-08T14:45:06.970+0200 I CONTROL [initandlisten] target_arch: x86_64
2016-06-08T14:45:06.970+0200 I CONTROL [initandlisten] options: {}
2016-06-08T14:45:06.970+0200 I STORAGE [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating
2016-06-08T14:45:06.970+0200 I CONTROL [initandlisten] dbexit: rc: 100
答案 2 :(得分:0)
你可以在插入表后,调用SCOPE_IDENTITY()函数,获取最新的 插入身份
了解更多信息,请参阅: https://msdn.microsoft.com/en-us/library/ms190315.aspx http://www.codeproject.com/Articles/103610/Difference-between-IDENTITY-SCOPE-IDENTITY-IDENT-C