V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chenyg32
V2EX  ›  程序员

MYSQL 复合外键

  •  
  •   chenyg32 · 2013-12-07 16:34:59 +08:00 · 3757 次点击
    这是一个创建于 3798 天前的主题,其中的信息可能已经有所发展或是发生改变。
    每次来这里总是受益匪浅。
    假如2个表,S,T
    7 条回复    1970-01-01 08:00:00 +08:00
    chenyg32
        1
    chenyg32  
    OP
       2013-12-07 16:49:33 +08:00
    小弟初学数据库,望路过的大神多多指教。
    假如2个表,S,T
    假如S有2个主键a,b;T也有2个主键a,b。
    我想达到的效果是,T的2个主键分别是S的2个主键的外键。
    [当且仅当S.a=T.a以及S.b=T.b的时候,它们才有关系。]
    foreign key (c,d) references S(a,b) on delete cascade;
    这样写好像失败……
    ps.我有点知道复合属性当主键或外键不是很好,但真的遇到这种情况了怎么办,比如现在……
    chenyg32
        2
    chenyg32  
    OP
       2013-12-07 16:54:36 +08:00
    求指教呀~感激不尽~
    chenyg32
        3
    chenyg32  
    OP
       2013-12-07 18:54:07 +08:00
    一定是我写得不够详细。
    我就想问一句话,可以将2个属性一起当外键吗?
    zerosyn
        4
    zerosyn  
       2013-12-07 19:25:05 +08:00
    可以
    FOREIGN KEY (`c`, `d`) REFERENCES `S` (`a`, `b`) ON DELETE CASCADE
    chenyg32
        5
    chenyg32  
    OP
       2013-12-07 20:51:17 +08:00
    @zerosyn 你确定这样可以吗~~ 我下午是这样创建但并不成功,虽然没有报错,但效果跟没写的一样
    zerosyn
        6
    zerosyn  
       2013-12-07 20:58:38 +08:00   ❤️ 1
    @chenyg32
    有效果的,S 表不存在的 a, b 键值对,T 表是不能使用的;S 表删除记录的时候,T 表也会对应删掉
    chenyg32
        7
    chenyg32  
    OP
       2013-12-08 14:10:02 +08:00
    @zerosyn 已解决~就是这样 Thanks a lot
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2265 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:53 · PVG 15:53 · LAX 00:53 · JFK 03:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.