【问题标题】:MySQL drop foreign key constraint and remove NOT NULLMySQL 删除外键约束并删除 NOT NULL
【发布时间】:2020-04-17 19:55:29
【问题描述】:

如何更改 user_id 的此表以删除外键并将 NOT NULL 更改为 NULL

它指的是用户表。

创建表也显示在底部 - (在 cmets 中引用)。我正在尝试匹配外键。

最重要的第一步是将 NOT NULL 删除为 NULL,但不确定如何去做。

mysql> describe post;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| title       | varchar(100) | NO   |     | NULL    |                |
| date_posted | datetime     | NO   |     | NULL    |                |
| description | longtext     | YES  |     | NULL    |                |
| status      | varchar(100) | YES  |     | NULL    |                |
| assigned_to | varchar(100) | YES  |     | NULL    |                |
| user_id     | int(11)      | NO   | MUL | NULL    |                |
| reported_by | varchar(100) | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+


mysql> describe user;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| username   | varchar(20)  | NO   | UNI | NULL    |                |
| email      | varchar(120) | NO   | UNI | NULL    |                |
| image_file | varchar(20)  | NO   |     | NULL    |                |
| password   | varchar(60)  | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

| post  | CREATE TABLE `post` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) NOT NULL,
  `date_posted` datetime NOT NULL,
  `description` longtext,
  `status` varchar(100) DEFAULT NULL,
  `assigned_to` varchar(100) DEFAULT NULL,
  `user_id` int(11) NOT NULL,
  `reported_by` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  CONSTRAINT `post_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 |


| user  | CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `email` varchar(120) NOT NULL,
  `image_file` varchar(20) NOT NULL,
  `password` varchar(60) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 |


【问题讨论】:

  • 你知道 FK 叫什么吗?或者这就是问题所在?
  • 不描述 - 显示创建表。
  • 谢谢,它指的是用户表中的 id,我已将其添加到问题中。我是 SQL 新手,FK 是“id”还是使用表本身?谢谢
  • 我主要关心的是删除NOT NULL为NULL,其次是删除外键
  • A describe 不显示 FK 请为两个表添加 show create table 的输出。

标签: mysql sql


【解决方案1】:

要删除 NOT NULL 约束,您可以这样做:

alter table post modify user_id int null;

然后你可以删除外键约束:

alter table post drop foreign key `post_ibfk_1`;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2012-04-12
    • 2011-01-19
    相关资源
    最近更新 更多