Tag: 外键

MySQL的术语“约束”与“外键”的区别?

我在这里查看MySQL文档,并试图理清FOREIGN KEY和CONSTRAINT之间的区别。 我以为FK 是一个约束,但是文档似乎像他们是独立的东西一样谈论他们。 创buildFK的语法是(部分)… [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, …) REFERENCES tbl_name (index_col_name,…) 所以“CONSTRAINT”子句是可选的。 你为什么要包括它或不包括它? 如果你离开它MySQL是否创build一个外键,但不是一个约束? 还是说它更像是一个“CONSTRAINT”只不过是你FK的一个名字,所以如果你不指定它,你会得到一个匿名的FK? 任何澄清将不胜感激。 谢谢, 阮经天

如何删除SQL Server中的外键约束?

我想从另一个表中删除外键,所以我可以插入我select的值。 我是新的数据库,所以请告诉我正确的SQL查询删除或删除外键值。

在MySQL中重命名外键列

我们试图将MySQL(5.1.31,InnoDB)中的列重命名为另一个表的外键。 起初,我们试图使用Django-South,但遇到了一个已知的问题: http://south.aeracode.org/ticket/243 OperationalError:(1025,“./xxx/#sql-bf_4d'重命名为'./xxx/cave_event'(errno:150)”时出错“) 和 将'./xxx/#sql-bf_4b'重命名为'./xxx/cave_event'(errno:150)时出错 这个错误150肯定与外键约束有关。 见例如 mysql错误1025(HY000):'./foo'(errorno:150)重命名错误是什么意思? http://www.xaprb.com/blog/2006/08/22/mysqls-error-1025-explained/ 所以,现在我们正在尝试在原始SQL中进行重命名。 看起来我们将不得不先删除外键,然后重命名,然后再添加外键。 这听起来正确吗? 有没有更好的方法,因为这看起来很混乱和麻烦? 任何帮助将非常感激!

Postgresql约束

我似乎无法得到这个权利,我想修改一个字段是一个外键,级联删除…我做错了什么? ALTER TABLE my_table ADD CONSTRAINT $4 FOREIGN KEY my_field REFERENCES my_foreign_table ON DELETE CASCADE;

MySQL“错误1005(HY000):无法创build表'foo。#sql-12c_4'(errno:150)”

我正在创build数据库foo一些表,但每次我最终与errno 150有关的外键。 首先,这是我创build表的代码: CREATE TABLE Clients ( client_id CHAR(10) NOT NULL , client_name CHAR(50) NOT NULL , provisional_license_num CHAR(50) NOT NULL , client_address CHAR(50) NULL , client_city CHAR(50) NULL , client_county CHAR(50) NULL , client_zip CHAR(10) NULL , client_phone INT NULL , client_email CHAR(255) NULL , client_dob DATETIME NULL , test_attempts INT NULL ); CREATE […]

有外键作为主键是好的吗?

我有表“用户”(用户名,密码)和表“configuration文件”(profileId,gender,dateofbirth,…)。 目前我正在使用这种方法:每个configuration文件logging都有一个名为“userId”的字段作为链接到用户表的外键。 当用户注册时,他的个人档案logging是自动创build的。 我对我的朋友build议感到困惑:将“userId”字段作为外键和主键,并删除“profileId”字段。 哪种方法更好?

MySQL的外键“删除限制”条款的确切含义

我有两个MySQL表: collections和privacy_level 。 我用一个外键关系来定义它们: CREATE TABLE collections ( coll_id smallint NOT NULL AUTO_INCREMENT UNSIGNED, name varchar(30) NOT NULL, privacy tinyint NOT NULL UNSIGNED DEFAULT '0', PRIMARY KEY(coll_id), INDEX(privacy), FOREIGN KEY fk_priv (privacy) REFERENCES privacy_level (level) ON UPDATE CASCADE ON DELETE RESTRICT ) ENGINE=InnoDB; CREATE TABLE privacy_level ( level tinyint NOT NULL UNSIGNED, name varchar(20) NOT […]

SQL Server 2008:表中的列与现有主键或唯一约束不匹配

我需要对SQL Server 2008数据库进行一些更改。 这需要创build一个新表,并在新表中插入一个引用已有表的主键的外键。 所以我想在我的新tblTwo之间build立一个关系,它引用了tblOne的主键。 但是,当我试图做到这一点(通过SQL Serverpipe理工作室),我得到了以下错误: 表'tblOne'中的列与现有主键或UNIQUE约束不匹配 我不确定这是什么意思,我想知道是否有任何方法呢?

postgresql外键语法

我有两个表,你会看到我的posgresql代码下面。 第一个表的学生有两列,一个是student_name,另一个是主键student_id。 在我的第二个名为tests的表中,它有4列,一个用于subject_id,一个用于subject_name,然后一个用于学生最高评分最高的学生。 我试图让我的学生表中的student_id指向highestStudent_id。 这是我下面的代码,不知道如果语法是正确的: CREATE TABLE students ( student_id SERIAL PRIMARY KEY, player_name TEXT); CREATE TABLE tests ( subject_id SERIAL, subject_name, highestStudent_id SERIAL REFERENCES students); highestStudent_id SERIAL REFERENCES students是否正确地使用了最highestStudent_id SERIAL REFERENCES students ? 因为我看过另一个像highestStudent_id REFERENCES students(student_id)) 请问在postgresql中创build外键的正确方法是什么?

为什么外键在理论上比实践中更多?

当你研究关系理论时,外键当然是强制性的。 但实际上,在我工作的每个地方,表格产品和连接总是通过在查询中明确指定键来完成的,而不是依赖DBMS中的外键。 这样,当然可以按字段join两个表,这些字段不是外键,会产生意想不到的结果。 你为什么这么认为? DBMSs不应该强制连接和产品只能通过外键进行吗? 编辑:感谢所有的答案。 现在很清楚,FK的主要原因是参考完整性。 但是如果你devise一个数据库,模型中的所有关系(ERD中的IE箭头)至less在理论上会成为外键,无论你在数据库pipe理系统中如何定义它们,它们在语义上都是FK。 我无法想象需要通过不是FK的字段来连接表。 有人可以举一个有意义的例子吗? PS:我意识到N:M关系成为单独的表而不是外键的事实,为简单起见,只是省略了它。