如何在mysql中将bigint更改为int,并且表具有外键

发布于 2024-12-28 02:18:13 字数 188 浏览 1 评论 0原文

我最近注意到我的一个数据库中有几个 bigint 类型字段可以替换为“int”类型。问题是数据库已经在线并正在使用,而且还有外键在起作用,所以当我尝试更改离线数据库中的数据类型时,mysql 不会让我这样做并产生错误消息:“#1025 - 重命名 (...) 时出错。

那么如何在保持外键满意的同时更改这些字段呢? (并且不会清除现有的数据库!)

I recently noticed that there are several bigint type fields in one of my databases that could be replaced with type "int". The problem is that the database is already online and in use and also that there are foreign keys in action, so when I try changing the data type in the offline DB, mysql won't let me and produces the error message: "#1025 - Error on rename of (...)".

So how can I change these fields while keeping the foreign keys happy? (and not wiping out the existing DB!)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甜妞爱困 2025-01-04 02:18:13

只要列中没有任何不适合较小 INT 数据类型的数据,您就可以将列从 BIGINT 更改为 INT。

更改表 mytable
修改列 mycolumn INT(11);

You can alter a column from BIGINT to INT as long as there is not any data in the column that would not fit into the smaller INT datatype.

ALTER TABLE mytable
MODIFY COLUMN mycolumn INT(11);

日裸衫吸 2025-01-04 02:18:13

您可以尝试:

  1. 添加具有正确类型的新列。
  2. 将值从旧列复制到新列。
  3. 重命名列。
  4. 更新约束(可能分两步 - DROPCREATE)。
  5. 删除旧列。

You could try:

  1. Add new columns with proper types.
  2. Copy values from old columns to new columns.
  3. Rename columns.
  4. Update constrains (maybe in two steps -- DROP and CREATE).
  5. Drop old columns.
音盲 2025-01-04 02:18:13

当字段保存数据时,您无法减小字段的大小。您只能扩展它们。
您可以做的是导出所有数据、禁用键、清空表、更改字段大小和字段大小。再次导入数据。

You can't reduce the size of field when it holds data. You can only expand them.
What you can do is export all the data, disable the keys, empty the tables, change the field sizes & import the data again.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文