这是重要的代码.
TournamentTeam newTeam = new TournamentTeam();
TournamentTeams.InsertOnSubmit(newTeam);
SubmitChanges();
TournamentParticipant newSignup = new TournamentParticipant
{
CheckedIn = false,
TournamentID = tournamentId,
UserID = participant.UserID,
TeamID = newTeam.TeamId
};
TournamentParticipants.InsertOnSubmit(newSignup);
SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
TournamentParticipants.TeamId在TournamentTeam.TeamID上有一个fk关系,TeamID是一个标识列
我不明白的是,当TournamentTeam获得插入时,它会获取新的身份值.即使我调试代码,新的注册也会收到新的团队ID.但是当涉及到生成插入时,它完全避免了这个值,并在select语句之前插入,它抓取了新的标识列.
exec sp_executesql N'INSERT INTO [dbo].[TournamentParticipants]([UserID], [TournamentID], [CheckedIn]) VALUES (@p0, @p1, @p2)
SELECT [t0].[TeamID] FROM [dbo].[TournamentParticipants] AS [t0] WHERE ([t0].[UserID] = @p3) AND ([t0].[TournamentID] = @p4)',N'@p0 int,@p1 int,@p2 bit,@p3 int,@p4 int',@p0=29805,@p1=247,@p2=0,@p3=29805,@p4=247
Run Code Online (Sandbox Code Playgroud)
如何让linq to sql使用我指定的团队id的值,或者在insert语句之前生成select语句?
如何在Microsoft Access中以编程方式删除外键约束,最好使用SQL.对于初学者我不知道如何找到外键的名称.
我使用JDBC-ODBC桥从Java应用程序连接到Access.我想从我的Java应用程序中执行SQL.
我可以在RelationShip视图中看到Access中的关系,但似乎找不到名称.如果我能找到我希望的名字,我可以用ALTER TABLE语句删除它.
您是否知道任何具有外键约束和/或提供事务支持的SQLite替代方案(基于Portable/flatfile /无服务器)?
我有一个表文件夹,如果该文件夹具有父级,则该列的parent_id引用ID,如果没有,则parent_id为null。那是好的解决方案,还是该连接或其他解决方案需要额外的表?外键可以根本为null吗,如果可以,此解决方案将有更大的执行时间?
table folder(
id int primary key, //primary key in my table
parent_id int references id, //foreign key on id column in same table
....
)
Run Code Online (Sandbox Code Playgroud) 我们有大型MS SQL数据库,包含许多表和外键.由于性能的原因,我们需要索引表中的所有外键,我们试图避免手动操作.有没有办法让MS SQL自动或使用某些工具?
使用的MS SQL服务器是MS SQL Server 2008 R2.
非常感谢.
我正在尝试创建一个fk,但MySQL不允许它...
Identifier name 'foobarbaz_FK_CATALOG_PRODUCT_ENTITY_WEEE_DISCOUNT_PRODUCT_ENTITY' is too long [ CREATE TABLE `foobarbaz_weee_discount` ( `entity_id` int(10) unsigned NOT NULL DEFAULT '0', `website_id` smallint(5) unsigned NOT NULL DEFAULT '0', `customer_group_id` smallint(5) unsigned NOT NULL, `value` decimal(12,4) NOT NULL DEFAULT '0.0000', KEY `foobarbaz_FK_CATALOG_PRODUCT_ENTITY_WEEE_DISCOUNT_WEBSITE` (`website_id`), KEY `foobarbaz_FK_CATALOG_PRODUCT_ENTITY_WEEE_DISCOUNT_PRODUCT_ENTITY` (`entity_id`), KEY `foobarbaz_FK_CATALOG_PRODUCT_ENTITY_WEEE_DISCOUNT_GROUP` (`customer_group_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ]
Run Code Online (Sandbox Code Playgroud)
有没有办法添加大fks?谢谢.
我用注释标记的两个外键有什么问题?
创建数据库db; 使用db;
create table Flug(
Flugbez varchar(20),
FDatum Date,
Ziel varchar(20),
Flugzeit int,
Entfernung int,
Primary Key(Flugbez,FDatum));create table Flugzeugtyp(
Typ varchar(20),
Hersteller varchar(20),
SitzAnzahl int,
Reisegeschw int,
primary key(Typ)
);create table flugzeug(
Typ varchar(20),
SerienNr int,
AnschDatum Date,
FlugStd int,
primary key(Typ,SerienNr),
foreign key(Typ)references Flugzeugtyp(Typ));create table Abflug(
Flugbez varchar(20),
FDatum Date,
Typ varchar(20),
Seriennr int,
Kaptaen varchar(20),
Primary key(Flugbez,FDatum,Typ,SerienNr),
Foreign key(Flugbez)references Flug(Flugbez) ,
- 外键(FDatum)引用Flug(FDatum),
外键(Typ)引用Flugzeugtyp(Typ)
- ,外键(SerienNr)引用Flugzeug(SerienNr)
);
当我取消注释这些时,我得到:
ERROR 1005(HY000):无法创建表'db.abflug'(错误号:150)
我使用MySQL Server 5.5的标准安装
首先,我尝试将此数据插入到由外键链接的表中,但没有得到答案.
我有3张桌子:
表:客户
ID -------LastName-------FirstName-------PhoneNumber
Run Code Online (Sandbox Code Playgroud)
表:订单
ID-------Status-------CustomerID
Run Code Online (Sandbox Code Playgroud)
表:OrderLine
ID-------OrderID-------Product-------Quantity-------PricePerUnit
Run Code Online (Sandbox Code Playgroud)
我运行以下查询
SqlCommand myCommand2 =
new SqlCommand(@"INSERT INTO Order (Status, CustomerID)
VALUES(13016, SELECT ID FROM Customers WHERE FirstName = 'Garderp')",
myConnection);`
Run Code Online (Sandbox Code Playgroud)
它抛出异常
Order附近的语法错误
如何在SQL Server 2008中使用外键将数据添加到表中,尤其是在这种特殊情况下?
我有一个带有时间戳字段的表,我在其上创建了一个复合索引.
CREATE INDEX "IDX_NAME_A" ON TABLE "A" (a_id, extract(year FROM created_at))
Run Code Online (Sandbox Code Playgroud)
我有另一个表存储一年和a_id我希望有一个外键关系.
我似乎无法找到做我想要的语法.
ALTER TABLE "B"
ADD FOREIGN KEY(a_id, a_year)
REFERENCES A(a_id, extract(YEAR FROM created_at));
Run Code Online (Sandbox Code Playgroud)
生产:
ERROR: syntax error at or near "("
Run Code Online (Sandbox Code Playgroud)
我也试过......
ALTER TABLE "B"
ADD FOREIGN KEY(a_id, a_year)
USING INDEX "IDX_NAME_A";
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Table A
--------
a_id serial,
created_at timestamp default now()
Table B
-------
b_id serial
a_id integer not null,
a_year date_part('year')
Run Code Online (Sandbox Code Playgroud) 我从SHOW ENGINE INNODB状态获得了信息
*** (1) TRANSACTION:
TRANSACTION 0 2799914, ACTIVE 1 sec, process no 4106, OS thread id 139808903796480 inserting
mysql tables in use 1, locked 1
LOCK WAIT 10 lock struct(s), heap size 1216, 7 row lock(s), undo log entries 3
MySQL thread id 4284, query id 2889649 localhost 127.0.0.1 test update
INSERT INTO shipping .....
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 436366 n bits 88 index `PRIMARY` of …Run Code Online (Sandbox Code Playgroud) foreign-keys ×10
mysql ×4
sql ×4
indexing ×2
c# ×1
create-table ×1
database ×1
deadlock ×1
linq-to-sql ×1
ms-access ×1
php ×1
postgresql ×1
restriction ×1
sql-server ×1
sqlite ×1
transactions ×1