【问题标题】:MySQL Table with Unique Servers and multiple ports具有唯一服务器和多个端口的 MySQL 表
【发布时间】:2015-06-27 01:43:17
【问题描述】:

我正在创建一个主服务器列表。所以基本上只要我的一台服务器上线,它就会被发布到主服务器列表中。

显然每个服务器都有一个唯一的 IP 地址,但是每个 IP 地址可以有多个服务器(如果同一 IP 上的服务器使用不同的 tcp 端口和 udp 端口​​)。

所以表有3列:ip (TEXT), tcp_port (INT), udp_port (INT)

例如:

  • 45.29.10.11 使用 TCP 端口 500 和 UDP 端口 600 托管服务器。
  • 45.29.10.11 使用 TCP 端口 501 和 UDP 端口 601 托管另一台服务器。
  • 45.29.10.11 使用 TCP 端口 502 和 UDP 端口 602 托管另一台服务器。

等等。如何使主服务器可以将具有相同 IP 的多个服务器添加到列表中,但它们必须具有不同的端口,tcp_port 不存在于任何其他行中,udp_port 也不存在于任何其他行中。

我是否只需将这些列:ip、tcp_port、udp_port 添加到 unique_index 中就可以了?

正确的表创建和插入语法是什么?

【问题讨论】:

    标签: mysql sql database syntax


    【解决方案1】:

    MySQL 忽略 NULL 的唯一约束/索引。所以,你可以添加:

    create unique index idx_master_ip_tcp on master(ip, tcp_port);
    create unique index idx_master_ip_udp on master(ip, udp_port);
    

    这两个约束应该做你想做的,

    【讨论】:

    • 等等,忽略 NULL 是什么意思?还有,IP呢?
    • 索引保证ip/tcp和ip/udp都是唯一的。因此,不允许重复。 MySQL 中的唯一索引允许使用 (ip, NULL) 的多行。
    猜你喜欢
    • 1970-01-01
    • 2022-10-05
    • 2011-11-19
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    相关资源
    最近更新 更多