mysql建表指定外键_mysql建表外键约束的问题

在创建MySQL数据库时遇到外键约束错误150,问题出在'news'表中'c_id'字段的外键设置。尝试为'c_id'添加索引或确认表引擎为InnoDB未解决问题。实际原因是'c_id'字段是NOT NULL类型,而外键设置在删除分类时要将其设为NULL,导致冲突。解决方案包括移除'c_id'的NOT NULL约束或更改ON DELETE选项,如RESTRICT、CASCADE或NO ACTION。
摘要由CSDN通过智能技术生成

先来看两个建表语句:

CREATE TABLE `categories` (

`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '分类id',

`cname` VARCHAR(32) NOT NULL COMMENT '分类名称',

PRIMARY KEY (`id`)

) ENGINE=INNODB DEFAULT CHARSET=utf8

CREATE TABLE `news` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`c_id` int unsigned  NOT NULL  COMMENT '分类id',

`imgsrc` varchar(255) NOT NULL,

`href` varchar(255) NOT NULL,

`date` date NOT NULL,

`title` varchar(255) NOT NULL,

`detail` text NOT NULL,

`create_at` datetime DEFAULT CURRENT_TIMESTAMP,

`update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),

foreign key (c_id) references categories(id) on update cascade on delete set null

) ENGINE=innodb auto_increment=1 DEFAULT CHARSET=utf8

在建立news表的时候一直报错:(errno: 150 "Foreign key constraint is incorrectly formed")

很多网上说是 必须再建立news表的时候需要为c_id添加上索引(index c_id(`c_id`)),我试了不行

然后网上还说两个表必须都是innodb的引擎,我这个也没有问题

看报错说是字段类型不一致,我看了一下,都是int 类型,都是not  null,那为什么始终说类型不一致呢

看了半天才知道,确实是建立外键的时候出的错,看 on delete set null 那段,意思是说在删除分类表中的id的时候,news表中的对应的c_id变为null了

问题就是出在这里,因为c_id是not null,所以出错,

所以想建立news 表有两种办法

1.将c_id 的not null去掉

2.将on delete set null 改为 on delete restrict 或者 on delete cascade 或者 on delete no  action

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值