1025-Error on rename of ‘.\xxx\#sql-xxxx‘ to ‘.\xxx\product‘ (errno:150)

写在开头:

在创建表时,主键id的类型一旦确定,后续要更改,会非常麻烦,所以为了避免麻烦,尽量在创建表时,将主键id的类型设置为bigint类型

除了主键id的类型不好修改外,其他字段的类型,均可方便修改

PS: 发现一个比较取巧的方法,直接对要操作的表复制粘贴,就可以对复制出来的表修改主键id的类型,不知道啥原理(建议备份后操作)

当需要修改表中某些字段的类型时,比如将某些字段类型(除了主键id)由int改为bigint,报如下错误:

主要原因是:该表引用了外键(FOREIGN KEY)约束

可以通过命令行界面,查看

SHOW CREATE TABLE product;

结果如下:其中  CONSTRAINT `product_ibfk_1` FOREIGN KEY (`dir_id`) REFERENCES `productdir` (`id`)   表示product表中引入了外键约束,即product表中的dir_id等于productdir表中的id

| product | CREATE TABLE `product` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `productName` varchar(50) DEFAULT NULL,
  `dir_id` int(11) DEFAULT NULL,
  `salePrice` double(10,2) DEFAULT NULL,
  `supplier` varchar(50) DEFAULT NULL,
  `brand` varchar(50) DEFAULT NULL,
  `cutoff` double(2,2) DEFAULT NULL,
  `costPrice` double(10,2) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `dir_id` (`dir_id`),
  CONSTRAINT `product_ibfk_1` FOREIGN KEY (`dir_id`) REFERENCES `productdir` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 |

解决办法:

通过命令行取消外键约束(其中product_ibfk_1指的是外键约束名,在创建外键约束时会自动生成,无需定义)

ALTER TABLE product DROP FOREIGN KEY product_ibfk_1;

出现Query OK表示操作成功

然后就可以返回设计表中,修改相应的属性值了

如果修改完属性之后,还想要恢复之前的外键约束,那么可以通过命令行或者设计表模式下通过软件手动添加

方式一:命令行

ALTER TABLE product ADD CONSTRAINT product_ibfk_1 FOREIGN KEY (dir_id) REFERENCES productdir (id);

格式:

格式:(大小写无所谓)
alter table 表名
add constraint 外键约束名
foreign key (字段名)
references 关联的表名 (关联的字段名)

方式二:手动添加

常用的SQL语法

# SQL基本语法

登录数据库: mysql -uroot -p
退出数据库: quit 或者 exit 或者 ctr + d
创建数据库: create database 数据库名 charset=utf8;
使用数据库: use 数据库名;
删除数据库: drop database 数据库名;
创建表: create table 表名(字段名 字段类型 约束, ...);
修改表-添加字段: alter table 表名 add 字段名 字段类型 约束
修改表-修改字段类型: alter table 表名 modify 字段名 字段类型 约束
修改表-修改字段名和字段类型: alter table 表名 change 原字段名 新字段名 字段类型 约束
修改表-删除字段: alter table 表名 drop 字段名;
删除表: drop table 表名;
查询数据: select * from 表名; 或者 select 列1,列2,... from 表名;
插入数据: insert into 表名 values (...) 或者 insert into 表名 (列1,...) values(值1,...)
修改数据: update 表名 set 列1=值1,列2=值2... where 条件
删除数据: delete from 表名 where 条件


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值