代码之家  ›  专栏  ›  技术社区  ›  Ibrahim Azhar Armar

mysql中的语法是唯一的吗?

  •  1
  • Ibrahim Azhar Armar  · 技术社区  · 15 年前

    我使用MySQL和PHP。

    这是mysql表,有人能给我添加唯一的代码并显示吗

    CREATE TABLE `advertisements` (
    `id` int(11) NOT NULL auto_increment,
    `title` varchar(255) NOT NULL,
    `position` smallint(2) NOT NULL,
    `active` tinyint(1) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    CREATE TABLE `advertisements` (
    `id` int(11) NOT NULL auto_increment,
    `title` varchar(255) NOT NULL,
    `position` smallint(2) NOT NULL UNIQUE,
    `active` tinyint(1) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    3 回复  |  直到 15 年前
        1
  •  4
  •   Frankie    15 年前

    必须将该列定义为 UNIQUE .

    ALTER TABLE `a` ADD UNIQUE (
        `id`
    )
    
        2
  •  1
  •   Mark Byers    15 年前

    • 如何确保列中的值是唯一的?

    添加唯一索引。

    可以向列出允许值的表中添加外键约束。

        3
  •  1
  •   Bill Karwin    15 年前

    首先, smallint(2) smallint(1234) smallint 在MySQL中完全相同。数值参数不是长度或值范围的限制,它只是显示宽度的提示。MySQL的 短整型 是一个16位整数,范围从-32768到32767。 smallint unsigned 范围从0到65535。

    通过声明 PRIMARY KEY UNIQUE KEY :

    CREATE TABLE MyTable (
      position SMALLINT NOT NULL,
      UNIQUE KEY (position)
    );
    

    • 如果试图存储超出范围的值,则写入导致错误的触发器。

      DELIMITER //
      CREATE TRIGGER ZeroToNine BEFORE INSERT ON MyTable
      FOR EACH ROW
      BEGIN
          DECLARE p SMALLINT;
          IF (NEW.position NOT BETWEEN 0 AND 9) THEN
              SET p = 'Position must be between 0 and 9';
          END IF;
      END //
      DELIMITER ;
      
    • 使用外键约束,使列引用您用值0到9填充的表。

      CREATE TABLE ZeroToNine (
        position SMALLINT NOT NULL PRIMARY KEY
      ) ENGINE=InnoDB;
      INSERT INTO ZeroToNine VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
      
      CREATE TABLE MyTable (
        position SMALLINT NOT NULL,
        UNIQUE KEY (position),
        FOREIGN KEY (position) REFERENCES ZeroToNine (position)
      ) ENGINE=InnoDB;
      
    • 其他数据库也支持 CHECK 但是不幸的是MySQL不支持这个特性。

      CREATE TABLE MyTable (
        position SMALLINT NOT NULL
          CHECK (position BETWEEN 0 AND 9),
        UNIQUE KEY (position)
      );