mysql - 更改键和外键

标签 mysql indexing insert foreign-keys

我有两张 table 。第一个是狗:

oldId   name
-----   -----
'AX01'  Fido
'AX02'  Pluto
...      ....

另一个称为服务:

Id  ServicedDog  Descripton
--- ------------ ----------
1   'AX01'        'Dog bath'
2   'AX01'        'Dog Vaccined'
...
22  'AX02'        'Dog bath'
...

我们遇到的问题是,我们需要将表 dogs 的 oldId 列 (CHAR(4)) 转换为自动递增的 INT 列,并更新服务表的相应 ServicedDog 列以获取新值(它是一个外部值) key )。我遇到的另一个问题是 ServicedDog 的数据类型是 CHAR(4),我需要将此列的数据类型更改为 INT。请告诉我,这该怎么办? 谢谢

最佳答案

(没有看到 SHOW CREATE TABLE 你所拥有的,我正在做一些猜测。)

现在真的叫oldid吗?

-- Add the desired id (and populate it);
-- Replace the existing PK:
ALTER TABLE dogs
    ADD COLUMN id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL,
    DROP PRIMARY KEY,
    ADD PRIMARY KEY(id)
    ADD INDEX(oldid);

-- add new dog_id (but do not populate)
ALTER TABLE serviced
    ADD COLUMN dog_id SMALLINT UNSIGNED NOT NULL,
    ADD INDEX(dog_id);

-- establish new linkage:
UPDATE   serviced
    JOIN dogs  ON serviced.oldid = dogs.oldid
    SET  serviced.dog_id = dogs.id;

注释:

  • 假设 oldid 确实是该列的当前名称。
  • 假设狗的数量不超过 64K(SMALLINT UNSIGNED);如果您可能有更多声明,请更改声明。
  • oldid上保留索引——用于转换;您可能想删除索引,甚至删除列。

关于mysql - 更改键和外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42655131/

相关文章:

MySQL INSERT INTO ... SELECT 或默认值

mysql - 条件插入到mysql

mysql - 合并 2 个 SELECT 语句并填充空白

java - 如何将日期格式转换为mysql日期格式?

php - PDO UPDATE 未更新 - 无错误

python - 如何生成遗漏 10% 数据的索引集

sql - 使用范围索引查询 Sql 服务器

php - 如何访问 htdocs 文件夹之外的 XAMPP mysql 数据库

firebase - Firestore 单字段索引豁免限制

如果行尚不存在,MySQL SELECT 或 INSERT