我正在尝试查看是否有一种方法可以在将单行插入InnoDB表时检查单行的参照完整性,同时foreign_key_checks将其设置为0.
所以给出两个表:
CREATE TABLE `book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`author_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `book_cc846901` (`author_id`),
CONSTRAINT `author_id_refs_id_7fdd0933` FOREIGN KEY (`author_id`) REFERENCES `person` (`id`)
) ENGINE=InnoDB;
CREATE TABLE `person` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)
我们针对它们运行以下语句:
SET foreign_key_checks=0
INSERT INTO `book` (`id`, `name`, `author_id`) VALUES (1, 'Cryptonomicon', 3)
INSERT INTO `person` (`id`, `name`) VALUES (4, 'Neal Stephenson')
SET foreign_key_checks=1
Run Code Online (Sandbox Code Playgroud)
所以我们在这里放了一些不好的数据 …
我是PostgreSQL的新手.我有这样的表:
CREATE TABLE Person (
ID SERIAL PRIMARY KEY,
Name VARCHAR(32) NOT NULL DEFAULT '',
Surname VARCHAR(32) NOT NULL DEFAULT '',
Birthday DATE,
Gender VARCHAR(8)
);
-- Student table inherits from person
CREATE TABLE Student (
ID_Student SERIAL PRIMARY KEY,
MajorDept VARCHAR(32),
) INHERITS(Person);
-- Student table inherits from person
CREATE TABLE Employee (
ID_Employee SERIAL PRIMARY KEY,
Position VARCHAR(32),
Rank VARCHAR(32),
Salary NUMERIC(12,2)
) INHERITS(Person);
-- Address table references person
CREATE TABLE Address (
ID_Address SERIAL PRIMARY KEY,
Person_id …Run Code Online (Sandbox Code Playgroud) postgresql inheritance triggers database-design referential-integrity
我问的原因是我们想要使用MySQL当前不支持的某个CHECK约束.如果没有这种类型的约束,使用外键和引用完整性的全部原因似乎会随着应用程序代码承担更多数据库职责而减少.
如果我们要创建一个"哑"数据模型并将所有参照完整性检查移动到应用程序代码中的一个层,那么潜在的测试可能会更简单,因为参照完整性错误将被困在应用程序而不是数据库中.它还可能加速新模块的开发,因为在测试之前它们不一定必须完全引用(这是一个术语吗?).
那么,在MySQL中坚持使用"正确的"数据模型并保留外键和"ON UPDATE CASCADE"语句等是否还有其他好处?
或者,我们应该抛弃MySQL并转向别的东西吗?!
谢谢!
我的删除声明有问题.
我有两张桌子:
table vehicule_loan(
vehicule TEXT NOT NULL UNIQUE,
);
table vehicule_uid (
id UUID NOT NULL DEFAULT uuid_generate_v4(),
vehicule TEXT NOT NULL REFERENCES vehicule_loan(vehicule) ON DELETE NO ACTION
);
Run Code Online (Sandbox Code Playgroud)
当我vehicule从表中删除a时,vehicule_loan我希望vehicule_uid保留表中的引用行.
但是当我尝试删除一个时,我收到此错误:
ERROR: update or delete on table "vehicule_loan" violates foreign key constraint "vehicule_uid_vehicule_fkey" on table "vehicule_uid"
Run Code Online (Sandbox Code Playgroud)
我想我理解错误:vehicule从表中删除a之后vehicule_loan,vehiculein vehicule_uid会指向什么.
但有没有办法保持行vehicule_uid?
我有一个类似的问题到完整性约束违规在Magento中创建产品(未答复)但我正在创建一个自定义Observer,它挂钩到catalog_product_save_after事件 - 基于本教程:http://fishpig.co.uk/blog/custom-tabs -magento -产品- admin.html
但是,每当保存新产品时,我都会收到此错误:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '22-1' for key 'UNQ_CATALOGINVENTORY_STOCK_ITEM_PRODUCT_ID_STOCK_ID'
Run Code Online (Sandbox Code Playgroud)
config.xml看起来像这样:
<adminhtml>
<events>
<catalog_product_save_after>
<observers>
<a1web_save_product_data>
<type>singleton</type>
<class>metricimperial/observer</class>
<method>saveProductData</method>
</a1web_save_product_data>
</observers>
</catalog_product_save_after>
</events>
</adminhtml>
Run Code Online (Sandbox Code Playgroud)
课程大纲如下:
<?php
class A1web_MetricImperialConverter_Model_Observer
{
/**
* Flag to stop observer executing more than once
*
* @var static bool
*/
static protected $_singletonFlag = false;
* @param Varien_Event_Observer $observer
*/
public function saveProductData(Varien_Event_Observer $observer)
{
if (!self::$_singletonFlag) {
self::$_singletonFlag = true;
$product …Run Code Online (Sandbox Code Playgroud) 我有一个配置为使用SQLite的Django Web服务器.
在多对多关系中(使用额外字段),Django强迫我使用关系模型来建立两个对象之间的关系.但是我能够在相关表中尚不存在的对象之间创建关系.
例如:
I have table1 and table2 which are related via table12.
In table1, there is just one object called A.
In table2, there is just one object called X.
I can create a record in table12 that depict a relationship between A & Y; even though Y doesn't exist in table2.
Run Code Online (Sandbox Code Playgroud)
我的关系模型已经适当地标记了外键.
我的同事提到我们的客户DBA建议删除项目Oracle DB模式中的所有外键约束.最初我不同意这个决定.我是开发人员而不是DBA.后来才意识到这个决定背后可能有一些原因.所以我正在尝试获得这个决定的利弊.
项目信息:
这是我的利弊清单(如果我错了请纠正我)
优点:
由于应用程序持久性由Hibernate管理,因此不需要外键级联.它由Hibernate管理,具有适当的级联选项.
Hibernate DELETE操作(包括删除级联选项)在删除主键记录之前删除外键表记录(即避免引用完整性问题).对于非外键的情况,外键情况和外键与级联情况,此行为相同.但是添加外键会不必要地减慢Oracle删除操作的速度.
缺点
Hibernate提供了一种机制,用于管理对象之间的关联以及关联中的级联操作.但它永远不会提供DB拥有的完整的参照完整性解决方案.
这些批处理作业仅使用SQL-loader或普通JDBC需要参照完整性.
伙计们,我需要你的建议.如果你们中的任何人都是DBA,请提供DBA方面的原因.
谢谢.
所以,我刚刚发现rails不支持关于外键的引用完整性,并且相当惊讶.那么,管理这个的最佳方法是什么?是否存在处理参照完整性的"轨道"方式?
理想情况下,应用程序不应该处理所有这些; 数据库应该.我正在寻找像外国人一样的插件.我想知道这种方法是否有一些缺点.这通常如何处理轨道?
我面临一个奇怪的问题
Zend_DB_Adapter的beginTrasaction()和commit()方法似乎没有按预期工作.我在beginTrasaction()和commit()方法中包含INSERT语句(在FOR LOOP中).但即使出现如下所示的错误,我仍然会看到已经插入了一些行,而我还是希望在发生错误时不会发生提交.我无法理解为什么.有人可以帮忙吗 谢谢.
SQLSTATE [23000]:完整性约束违规:1062键'PRIMARY'重复输入'0'
代码块如:
**$localDB->beginTransaction();**
try{
echo $localDB->isConnected();
$localDB->query("TRUNCATE TABLE $this->dbTable");
**foreach ($rowSet as $row){**
foreach ($row as $key=>$value){
$localRow[$this->columnMap[$key]] =$value;
}
**$localDB->insert($this->dbTable,$localRow);**
}
$localDB->commit();
}
catch (Exception $e){
$localDB->rollBack();
echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud) mysql referential-integrity zend-framework transactions zend-db
我正在使用Entity Framework 6 Code First和Fluent API.我在Visit和VisitPage之间有一对多的关系(1个访问有许多VisitPage对象).这是POCO类的简化版本:
访问:Id(身份),UrlReferrer,Pages. VisitPage:Id(身份),姓名,访问,VisitId
首先,我创建一个Visit对象并向其添加一个VisitPage对象.然后,我将它们插入到DB中.在此之前一切正常.观察:VisitPage中的VisitId属性在插入后自动设置(它从DB获取标识值并设置属性).
然后,在断开连接的环境中,我为访问添加了一个新页面(我没有从DB获取Visit对象,这就是我所说的断开连接的环境).这个新页面引用了相同的访问对象,但我没有设置VisitId属性,因为我认为EF应该根据Visit属性设置它.这就是问题,EF没有设置它,事实上,它抛出一个异常,说Visit属性和VisitId属性的值不匹配.我期待EF能够在引擎盖下执行此操作(例如,在DetectChanges方法中),但事实并非如此.
异常消息:
发生了引用完整性约束违规:关系一端的"VisitId"的属性值与另一端的"VisitPage.VisitId"的属性值不匹配.
那么,我该如何解决这个问题呢?我看到两种可能的解决方案:1)在连接环境中工作 - >从EF获取Visit对象,然后添加页面对象.在这种情况下,EF更新VisitId值并且它可以工作.2)设置Visit对象后手动设置VisitId.
我希望我已经足够清楚了.如果没有,请告诉我.
c# referential-integrity entity-framework disconnected-session
mysql ×3
foreign-keys ×2
postgresql ×2
sql ×2
c# ×1
django ×1
exception ×1
hibernate ×1
inheritance ×1
innodb ×1
magento ×1
oracle ×1
php ×1
sqlite ×1
transactions ×1
triggers ×1
zend-db ×1