错误笔记之Can't create table 'xxxx' (errno: 121)

本文记录了一次在MySQL数据库操作中遇到的外键名重复错误及其解决过程。通过检查发现,错误提示为“Can't create table 'xxxx' (errno:121)”,进一步分析确认是由于外键名称重复导致。

今天玩mysql数据库的时候犯了个低级错误

错误提示:

Can't create table 'xxxx' (errno: 121)

仔细看了看,发现外键名重复了
由于平时很少手写外键,注意,外键名,不能重复

代码概述 该问题是关于执行建表语句时出现的错误:**"can't create table car (errno:150)"**,这是 MySQL 中一个常见的外键约束错误,表示表 `car` 无法创建,原因通常与外键约束的设置不匹配有关。 代码解析 错误原因: `errno:150` 表示外键约束创建失败,通常是由于以下原因之一: 1. **外键字段类型不匹配**:`car` 表中的 `brand_id` 字段类型与被引用的 `car_brand` 表中的 `brand_id` 类型不一致(例如一个是 `INT`,一个是 `BIGINT`)。 2. **被引用字段不是主键或没有索引**:`car_brand(brand_id)` 必须是主键或至少有唯一索引。 3. **字符集或排序规则不匹配**:如果两张表的字符集或排序规则不同,也可能导致外键失败。 4. **引擎不一致**:两张表的存储引擎不一致(如一个是 `InnoDB`,一个是 `MyISAM`)。 解决建议: 确保 `car_brand` 表已存在,并且其 `brand_id` 字段为主键或唯一索引,且字段类型、字符集、排序规则、存储引擎与 `car` 表一致。 验证 `car_brand` 表结构的示例语句: ```sql CREATE TABLE car_brand ( brand_id INT PRIMARY KEY COMMENT '品牌ID', brand_name VARCHAR(50) NOT NULL COMMENT '品牌名称' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` 优化后的 `car` 表建表语句(确保与 `car_brand` 的 `brand_id` 一致): ```sql CREATE TABLE car ( car_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '车辆ID', brand_id INT NOT NULL COMMENT '品牌ID', car_type VARCHAR(30) NOT NULL COMMENT '车型', xingshizheng VARCHAR(20) NOT NULL UNIQUE COMMENT '行驶证号', color VARCHAR(20) NOT NULL COMMENT '颜色', seats TINYINT UNSIGNED NOT NULL COMMENT '座位数', car_number VARCHAR(15) NOT NULL UNIQUE COMMENT '车牌号', che_zheng VARCHAR(20) UNIQUE COMMENT '车证编号', car_years TINYINT UNSIGNED COMMENT '车龄', create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间', FOREIGN KEY (brand_id) REFERENCES car_brand(brand_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '车辆信息表'; ``` 知识点 1. **外键约束**:外键用于维护两张表之间的一致性关系。 2. **存储引擎一致性**:使用外键的表必须使用支持事务的存储引擎,如 `InnoDB`。 3. **字段类型匹配**:外键字段与其引用字段的数据类型、长度等必须完全一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值