Error 1215:Cannot add foreign key constraint

本文详细记录了解决在MySQL中创建订单表时遇到的外键约束错误的过程,包括调整表编码格式和正确添加外键引用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在创建订单表:
CREATE TABLE `orders` (
  `oid` varchar(32) NOT NULL,
  `ordertime` datetime DEFAULT NULL,        #下单时间
  `total` double DEFAULT NULL,                #总价
  `state` int(11) DEFAULT NULL,                #订单状态:1=未付款;2=已付款,未发货;3=已发货,没收货;4=收货,订单结束
  `address` varchar(30) DEFAULT NULL,        #收获地址
  `name` varchar(20) DEFAULT NULL,            #收获人
  `telephone` varchar(20) DEFAULT NULL,        #收货人电话
  `uid` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`oid`),
  KEY `order_fk_0001` (`uid`),
  CONSTRAINT `order_fk_0001` FOREIGN KEY (`uid`) REFERENCES `user` (`uid`)
) ;

时MySQL报错Error  1215:Cannot add foreign key constraint

于是先创建了不添加外键的订单表

CREATE TABLE `orders` (
  `oid` varchar(32) NOT NULL,
  `ordertime` datetime DEFAULT NULL,        #下单时间
  `total` double DEFAULT NULL,                #总价
  `state` int(11) DEFAULT NULL,                #订单状态:1=未付款;2=已付款,未发货;3=已发货,没收货;4=收货,订单结束
  `address` varchar(30) DEFAULT NULL,        #收获地址
  `name` varchar(20) DEFAULT NULL,            #收获人
  `telephone` varchar(20) DEFAULT NULL,        #收货人电话
  `uid` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`oid`),
  KEY `order_fk_0001` (`uid`)
) ;

查看user表的表结构:show create table user;

| user  | CREATE TABLE `user` (
  `uid` varchar(32) NOT NULL,
  `username` varchar(20) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `email` varchar(30) DEFAULT NULL,
  `telephone` varchar(20) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `sex` varchar(10) DEFAULT NULL,
  `state` int(11) DEFAULT '0',
  `code` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

在查看orders表的表结构:show create table orders;

| orders | CREATE TABLE `orders` (
  `oid` varchar(32) NOT NULL,
  `ordertime` datetime DEFAULT NULL,
  `total` double DEFAULT NULL,
  `state` int(11) DEFAULT NULL,
  `address` varchar(30) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `telephone` varchar(20) DEFAULT NULL,
  `uid` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`oid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

发现两表的编码格式不一,user表的编码格式时utf8,orders表的编码格式时latin1

于是将orders表的编码格式修改为utf8: alter table orders convert to character set utf8;

再加入外键: alter table orders add constraint order_fk_0001 foreign key(uid) references user(uid);

执行成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值