标签: foreign-keys

外键约束:何时使用ON UPDATE和ON DELETE

我正在使用MySQL Workbench设计我的数据库模式,这非常酷,因为你可以做图表并转换它们:P

无论如何,我决定使用InnoDB因为它的外键支持.我注意到的一件事是,它允许您为外键设置On Update和Delete选项.有人可以解释在一个简单的例子中可以使用"限制","级联"和设置null的位置吗?

例如,假设我有一个user包含a 的表userID.并说我有一个message多对多的消息表,它有2个外键(userIDuser表中引用相同的主键).在这种情况下,设置On Update和On Delete选项是否有用?如果是这样,我选择哪一个?如果这不是一个好例子,你能否提出一个很好的例子来说明这些如何有用?

谢谢

mysql sql database foreign-keys

181
推荐指数
1
解决办法
13万
查看次数

MySQL删除一些外键

我有一个表,其主键在其他几个表中使用,并有几个外键到其他表.

CREATE TABLE location (
   locationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
   ...
) ENGINE = InnoDB;

CREATE TABLE assignment (
   assignmentID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   locationID INT NOT NULL,
   FOREIGN KEY locationIDX (locationID) REFERENCES location (locationID)
   ...
) ENGINE = InnoDB;

CREATE TABLE assignmentStuff (
   ...
   assignmentID INT NOT NULL,
   FOREIGN KEY assignmentIDX (assignmentID) REFERENCES assignment (assignmentID)
) ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)

问题是,当我试图删除其中一个外键列(即locationIDX)时,它会给我一个错误.

"ERROR 1025(HY000):重命名时出错"

如何在不发生此错误的情况下删除上面的分配表中的列?

mysql constraints foreign-keys mysql-error-1025

176
推荐指数
5
解决办法
32万
查看次数

迁移:无法在laravel中添加外键约束

我正在尝试在Laravel中创建外键但是当我使用artisani 迁移我的表时抛出以下错误:

[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL
: alter table `priorities` add constraint priorities_user_id_foreign foreign 
key (`user_id`) references `users` (`id`))     
Run Code Online (Sandbox Code Playgroud)

我的迁移代码如下:

优先级迁移文件

public function up()
{
    //
    Schema::create('priorities', function($table) {
        $table->increments('id', true);
        $table->integer('user_id');
        $table->foreign('user_id')->references('id')->on('users');
        $table->string('priority_name');
        $table->smallInteger('rank');
        $table->text('class');
        $table->timestamps('timecreated');
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    //
    Schema::drop('priorities');
}
Run Code Online (Sandbox Code Playgroud)

用户迁移文件

public function up()
{
    //
    Schema::table('users', function($table)
    {
    $table->create();
    $table->increments('id');
    $table->string('email');
    $table->string('first_name');
    $table->string('password');
    $table->string('email_code'); …
Run Code Online (Sandbox Code Playgroud)

migration foreign-keys laravel eloquent laravel-4

175
推荐指数
17
解决办法
19万
查看次数

如何在SQL Server中找到外键依赖项?

如何在特定列上找到所有外键依赖项?

有哪些不同的替代方案(图形化在SSMS中,SQL Server中的查询/视图,第三方数据库工具,.NET中的代码)?

.net sql-server foreign-keys

163
推荐指数
7
解决办法
17万
查看次数

IEntityChangeTracker的多个实例不能引用实体对象.同时在Entity Framework 4.1中向实体添加相关对象

我正在尝试保存员工详细信息,其中包含对City的引用.但每当我尝试保存我的联系人时,我都会得到例外"ADO.Net实体框架实例对象不能被IEntityChangeTracker的多个实例引用"

我读了这么多帖子,但仍然没有弄清楚该怎么做...我的保存按钮点击代码如下

protected void Button1_Click(object sender, EventArgs e)
    {
        EmployeeService es = new EmployeeService();
        CityService cs = new CityService();

        DateTime dt = new DateTime(2008, 12, 12);
        Payroll.Entities.Employee e1 = new Payroll.Entities.Employee();

        Payroll.Entities.City city1 = cs.SelectCity(Convert.ToInt64(cmbCity.SelectedItem.Value));

        e1.Name = "Archana";
        e1.Title = "aaaa";
        e1.BirthDate = dt;
        e1.Gender = "F";
        e1.HireDate = dt;
        e1.MaritalStatus = "M";
        e1.City = city1;        

        es.AddEmpoyee(e1,city1);
    }
Run Code Online (Sandbox Code Playgroud)

Employeeservice代码

public string AddEmpoyee(Payroll.Entities.Employee e1, Payroll.Entities.City c1)
        {
            Payroll_DAO1 payrollDAO = new Payroll_DAO1();
            payrollDAO.AddToEmployee(e1);  //Here I am getting Error..
            payrollDAO.SaveChanges(); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net ado.net entity-framework foreign-keys

161
推荐指数
5
解决办法
17万
查看次数

MySQL外键约束,级联删除

我想使用外键来保持完整性并避免孤儿(我已经使用了innoDB).

如何创建DELETE ON CASCADE的SQL语句?

如果我删除某个类别,那么如何确保它不会删除与其他类别相关的产品.

数据透视表"categories_products"在其他两个表之间创建了多对多关系.

categories
- id (INT)
- name (VARCHAR 255)

products
- id
- name
- price

categories_products
- categories_id
- products_id
Run Code Online (Sandbox Code Playgroud)

mysql innodb foreign-keys

152
推荐指数
3
解决办法
24万
查看次数

外键是否提高了查询性能?

假设我有2个表,Products和ProductCategories.两个表都与CategoryId有关系.这是查询.

SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category
FROM Products p
INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId
WHERE c.CategoryId = 1;
Run Code Online (Sandbox Code Playgroud)

当我创建执行计划时,表ProductCategories执行集群索引查找,这是期望的.但对于表产品,它执行集群索引扫描,这让我怀疑.为什么FK无助于提高查询性能?

所以我必须在Products.CategoryId上创建索引.当我再次创建执行计划时,两个表都执行索引查找.估计的子树成本降低了很多.

我的问题是:

  1. 除了FK有助于关系约束,它还有其他用处吗?它是否提高了查询性能?

  2. 我应该在所有表中的所有FK列(如Products.CategoryId)上创建索引吗?

sql sql-server indexing performance foreign-keys

148
推荐指数
3
解决办法
8万
查看次数

何时/为何在SQL Server中使用级联?

在SQL Server中设置外键时,在什么情况下应该在删除或更新时级联它,背后的原因是什么?

这可能也适用于其他数据库.

我最关注每个场景的具体例子,最好是那些成功使用它们的人.

sql-server rdbms database-design cascade foreign-keys

146
推荐指数
9
解决办法
9万
查看次数

SQL DROP TABLE外键约束

如果我想像这样删除我的数据库中的所有表,它会处理外键约束吗?如果没有,我该如何处理?

GO
IF OBJECT_ID('dbo.[Course]','U') IS NOT NULL
    DROP TABLE dbo.[Course]
GO
IF OBJECT_ID('dbo.[Student]','U') IS NOT NULL
    DROP TABLE dbo.[Student]
Run Code Online (Sandbox Code Playgroud)

sql-server constraints foreign-keys drop-table database-table

141
推荐指数
4
解决办法
29万
查看次数

外键命名方案

我刚刚开始使用外键第一次使用外键,我想知道是否有一个标准的命名方案可用于它们?

鉴于这些表格:

task (id, userid, title)
note (id, taskid, userid, note);
user (id, name)
Run Code Online (Sandbox Code Playgroud)

任务具有Notes,任务由用户拥有,用户拥有Notes.

在这种情况下如何命名三个外键?或者,它甚至是否重要

更新:这个问题是关于外键名称,而不是字段名称!

database foreign-keys naming-conventions

139
推荐指数
6
解决办法
9万
查看次数