• 初学者记录一下mysql学习中遇到的两个问题


    最近更新:我发现我学的版本有点老啊,现在的版本下,我下面写的有些东西都不成立了。

    跟着网上自己学的,记录一下两个细节,代码演示一下

    一、如何drop foreign key的问题

    1.创建子表和主表并建立foreign key的练习

    1. create table son(name varchar(10),age int,primary key(name));
    2. +-------+-------------+------+-----+---------+-------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +-------+-------------+------+-----+---------+-------+
    5. | name | varchar(10) | NO | PRI | NULL | |
    6. | age | int | YES | | NULL | |
    7. +-------+-------------+------+-----+---------+-------+
    8. create table father(idnum int,name varchar(10));
    9. +-------+-------------+------+-----+---------+-------+
    10. | Field | Type | Null | Key | Default | Extra |
    11. +-------+-------------+------+-----+---------+-------+
    12. | idnum | int | YES | | NULL | |
    13. | name | varchar(10) | YES | | NULL | |
    14. +-------+-------------+------+-----+---------+-------+

    2.将主表和子表的name进行联系

    1. alter table father add foreign key(name) references son(name);
    2. +-------+-------------+------+-----+---------+-------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +-------+-------------+------+-----+---------+-------+
    5. | idnum | int | YES | | NULL | |
    6. | name | varchar(10) | YES | MUL | NULL | |
    7. +-------+-------------+------+-----+---------+-------+

    可以看到name对应的key上出现了mul,也就是建立联系成功 

     3.尝试删除name上的foreign key

    1. alter table father drop foreign key name;
    2. 会返回这样一个错误: Can't DROP 'name'; check that column/key exists
    3. 本质上就是告诉你我找不到叫name的foreign key联系

    4.解决问题

     采取一种新的添加foreign key的方式(加上别名),以idnum为例

    1. 创建表格son1并和father的idnum产生联系
    2. create table son1(idnum int,age int,primary key(idnum));
    3. +-------+------+------+-----+---------+-------+
    4. | Field | Type | Null | Key | Default | Extra |
    5. +-------+------+------+-----+---------+-------+
    6. | idnum | int | NO | PRI | NULL | |
    7. | age | int | YES | | NULL | |
    8. +-------+------+------+-----+---------+-------+
    9. alter table father add constraint idnum foreign key(idnum) references son1(idnum);
    10. 我把这个foreign key还是叫idnum
    11. mysql> desc father;
    12. +-------+-------------+------+-----+---------+-------+
    13. | Field | Type | Null | Key | Default | Extra |
    14. +-------+-------------+------+-----+---------+-------+
    15. | idnum | int | YES | MUL | NULL | |
    16. | name | varchar(10) | YES | MUL | NULL | |
    17. +-------+-------------+------+-----+---------+-------+
    18. 尝试删除
    19. alter table father drop foreign key idnum;
    20. 结果:Query OK, 0 rows affected (0.68 sec)

    这个问题的出现,应该是因为primary key的drop方式和这个的不同 

    我觉得要彻底避免这个问题,就应该在定义的时候给foregin key以别名,不加别名的话我暂时不知道怎么删除这种联系。

    二、foreign key drop之后key一栏还是显示mul的问题

    1.再次查看表格

    1. desc father;
    2. +-------+-------------+------+-----+---------+-------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +-------+-------------+------+-----+---------+-------+
    5. | idnum | int | YES | MUL | NULL | |
    6. | name | varchar(10) | YES | MUL | NULL | |
    7. +-------+-------------+------+-----+---------+-------+
    8. 这个idnum处的mul属性怎么还在

    2.去除这个mul

    1. drop index idnum on father;
    2. !注意这个idnum 不是表中的idnum栏的名称,而是我在上面给foreign key链接取的别名,也就是上面当中“ alter father drop foreign key idnum;” drop的idnum
    3. 再次查看
    4. +-------+-------------+------+-----+---------+-------+
    5. | Field | Type | Null | Key | Default | Extra |
    6. +-------+-------------+------+-----+---------+-------+
    7. | idnum | int | YES | | NULL | |
    8. | name | varchar(10) | YES | MUL | NULL | |
    9. 对应idnum的mul就没了

    以上是一个初学者的浅见。

  • 相关阅读:
    电脑重装系统开机后运行慢怎么办
    Git之路
    nodejs+vue 汽车销售系统elementui
    网络安全(网络安全)小白自学
    订单及其状态机的设计实现
    2023年SpinalHDL应用前景探索线上研讨会----征集演讲嘉宾
    【八】http服务器开发--实现一个http服务器
    BMP文件格式-笔记
    基于HKELM混合核极限学习机多输出回归预测 (多输入多输出) Matlab代码
    Microsoft 网络监控
  • 原文地址:https://blog.csdn.net/huangfengnt/article/details/126347365