MySQL外键允许为空吗?

MySQL外键允许为空吗?

在MySQL中,外键是指一个表中的字段,它引用或关联到另一个表中的主键或唯一键。外键约束用于维护表之间的关系,并确保数据的完整性。但是,许多开发人员不知道MySQL外键是否允许为空。我们将在本文中探讨这个问题。

阅读更多:MySQL 教程

MySQL中的外键

在MySQL中,可以使用以下语法来创建外键约束:

CREATE TABLE 表名(
    1 数据类型,
    2 数据类型,
    3 数据类型,
    ...
    CONSTRAINT 外键名称 FOREIGN KEY (列名) REFERENCES 参照表名 (参照列名)
);
Mysql

以上示例是一个简单的创建外键的语法,外键名称用于标识外键约束,参照列名是指参照表中的主键或唯一键。

外键是否允许为空

默认情况下,MySQL外键是不允许为空的。这意味着在定义外键时,列的值不能为NULL。例如,如果我们有一个订单表和一个客户表,我们想要创建外键约束,以确保订单表中的客户ID列引用客户表中具有相同ID的顾客。我们可以使用以下代码:

CREATE TABLE `customer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `customer_id` int(11) NOT NULL,
  `order_date` date NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_orders_customer` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
Mysql

在此示例中,订单表中的客户ID列为NOT NULL,因为它是外键列。如果我们尝试将NULL值插入客户ID列,MySQL将返回一个错误。

外键如何允许为空

尽管在MySQL中外键默认情况下是不允许为空的,但我们可以指定以让外键为空。我们可以在创建表格时使用以下语法:

CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `customer_id` int(11) DEFAULT NULL,
  `order_date` date NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_orders_customer` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
Mysql

在上面的示例中,我们将客户ID列更改为DEFAULT NULL。这告诉MySQL,我们允许在客户ID列中插入NULL值,而不返回错误。但是,我们需要谨慎使用此方法,因为我们需要确保在引用其他表的行时,没有NULL值。

总结

MySQL外键默认情况下是不允许为空的。但是,我们可以使用DEFAULT NULL指定允许外键为空。但需要注意的是,我们需要优先使用NOT NULL,以确保引用其他表的行时,没有NULL值。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册