外键外键的有效性

嗯...是的...Northwind数据库...我知道这个...2 02 2 年我仍然会使用这个例子...产品表...类别表...是的...有时真的很麻烦...设计数据库时我没有考虑周全...例如...你想添加一个产品...一个新产品...但它没有分类...或者类别ID根本不存在...我无法插入...现在该怎么办?
我记得...我当时...也许有点着急...我只是想快点完成...我想...哦...是的...约束...可以暂时禁用...这个操作...真的很有用...
那就是命令...是...ALTERTABLE dbo.Products NOCHECKCONSTRAINT FK_Products_Categories...我输入了...可能有点慢...这个命令...是...暂时...关闭外键约束...关闭...就像...清除 闹钟...然后就可以插入了...比如插入 INSERT INTO Products(ProductName, UnitPrice) VALUES('Emergency Product', 1 0.00)...就这么简单...插入...然后...数据是...在2 02 2 年的环境...应该插入...不会出错...
插入后...很重要...是的...不能一直开着...记住...ALTERTABLE dbo.Products CHECKCONSTRAINT FK_Products_Categories...再次打开...重新启动...然后检查...确保数据...没有损坏...例如...紧急产品...它还在...但是有约束...不能随便添加...没有分类...这样可以确保...整个系统...仍然一致...没有混乱...
哦...是的...还有一种情况...那就是...比如说我...我想更改Categories表... 比如添加一个新字段...比如叫CategoryDescriptionExtended...很长的字段...我可能要改几个地方...其他表...有外键依赖...比如OrderDetails表...还依赖Products...Products依赖Categories...这个时候...如果直接改...可能会被锁...或者报错...会很麻烦...后来才意识到...可以...先...把相关的都...外键约束...先...用 NOCHECKCONSTRAINT...关掉...然后我把Categories表改完...比如添加字段后...然后清空缓存...然后打开那些约束...一一...然后用CHECKCONSTRAINT...打开...这样...就不会有问题...是的...避免了...系统因为一张表的改变而全部卡住...
嗯...就是这样...程序员...有时候就得这么灵活...数据库结构...不是一成不变的...总会有特殊情况...这个 方法...是一个技巧...避免...直接去ALTER TABLE...修改Schema...可能比较复杂...比较耗时...尤其是在线...到...网上...不能随便改...这个操作...只是一个快速...临时...解决方案...挺好的...嗯...

数据库Cannot add foreign key constraint

上周我在向数据库添加外键约束时遇到了问题。
原因是s表中的status列和spj表中的qty列的数据类型不匹配。
status 是字符类型,qty 应该是整数类型。
我决定首先删除与这些表相关的约束,然后重新创建表结构以确保数据类型的一致性。

首先,我运行 SQL 语句来删除表及其约束:DROPTABLE dbo.S。
因此,spj:DROPTABLE p 表被删除。

接下来,我重新创建了 s 表,确保 status 列的类型正确:CREATETABLE s(sno char(1 0) PRIMARY KEY, sname char(1 0) UNIQUE, status INT)。

因此,我创建了表 p 并更改了权重列类型:CREATETABLE p(pno char(1 0) PRIMARY KEY, pname char(1 0), color char(4 ), Weight INT)。

接下来,我创建了表 j,保持不变:CREATETABLE j(jno char(1 0) PRIMARY KEY, jname char(1 0), city char(1 0))。

最后,我重新创建了 spj 表,将 qty 列更改为整数类型,并添加了正确的外键约束: CREATETABLE spj(sno char(1 0), pno char(1 0), jno char(1 0), qty INT, PRIMARYKEY(sno, pno, jno), FOREIGNKEY(sno) REFERENCES s(sno), FOREIGNKEY(pno)参考 p(pno)、FOREIGNKEY(jno) 参考 j(jno))。

通过这样做,我解决了数据类型不一致导致无法添加外键约束的问题。
你只需要弄清楚,我希望这次一切顺利。