目录
  • 1. 主键
    • 1.1. 在创建表时定义主键
    • 1.2. 在已有表中添加主键
  • 2. 外键
    • 2.1. 在创建表时定义外键
    • 2.2. 在已有表中添加外键
  • 3. 约束
    • 3.1. NOT NULL约束
    • 3.2. UNIQUE约束
    • 3.3. CHECK约束
    • 3.4. DEFAULT约束
  • 4. 索引
    • 4.1. PRIMARY KEY索引
    • 4.2. UNIQUE索引
    • 4.3. INDEX索引
    • 4.4. FULLTEXT索引
  • 5. 总结

    1. 主键

    主键是一种用于唯一标识表中每一行数据的标识符。在Mysql中,主键可以是一个或多个列的组合,但是必须满足以下条件:

    • 主键列的值必须唯一,不能重复。
    • 主键列的值不能为空,不能为NULL。
    • 一个表只能有一个主键。

    主键可以用于加速查询和提高数据的完整性和安全性。在Mysql中,主键可以通过以下两种方式定义:

    1.1. 在创建表时定义主键

    在创建表时,可以通过在列定义后面添加PRIMARY KEY关键字来定义主键。例如:

    CREATE TABLE `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL,
      `email` varchar(50) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    上面的例子中,id列被定义为主键。

    1.2. 在已有表中添加主键

    在已有表中添加主键,可以使用ALTER TABLE语句。例如:

    ALTER TABLE `users` ADD PRIMARY KEY (`id`);

    2. 外键

    外键是一种用于建立表与表之间关联关系的机制。外键可以用于保证数据的完整性和一致性。在Mysql中,外键可以通过以下两种方式定义:

    2.1. 在创建表时定义外键

    在创建表时,可以通过在列定义后面添加FOREIGN KEY关键字来定义外键。例如:

    CREATE TABLE `orders` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `user_id` int(11) NOT NULL,
      `product_id` int(11) NOT NULL,
      `quantity` int(11) NOT NULL,
      PRIMARY KEY (`id`),
      FOREIGN KEY (`user_id`) REFERENCES `users`(`id`),
      FOREIGN KEY (`product_id`) REFERENCES `products`(`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    上面的例子中,orders表中的user_id和product_id列被定义为外键,分别引用了users表和products表中的id列。

    2.2. 在已有表中添加外键

    在已有表中添加外键,可以使用ALTER TABLE语句。例如:

    3. 约束

    约束是一种用于限制表中数据的规则。在Mysql中,约束可以用于保证数据的完整性和一致性。Mysql支持以下几种约束:

    3.1. NOT NULL约束

    NOT NULL约束用于限制列中的数据不能为NULL。例如:

    CREATE TABLE `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL,
      `email` varchar(50) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    上面的例子中,name和email列被定义为NOT NULL。

    3.2. UNIQUE约束

    UNIQUE约束用于限制列中的数据不能重复。例如:

    CREATE TABLE `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL,
      `email` varchar(50) NOT NULL UNIQUE,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    上面的例子中,email列被定义为UNIQUE。

    3.3. CHECK约束

    CHECK约束用于限制列中的数据必须满足指定的条件。例如:

    CREATE TABLE `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL,
      `age` int(11) NOT NULL,
      CHECK (`age` >= 18),
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    上面的例子中,age列被定义为CHECK约束,要求age的值必须大于等于18。

    3.4. DEFAULT约束

    DEFAULT约束用于指定列的默认值。例如:

    CREATE TABLE `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL,
      `email` varchar(50) NOT NULL,
      `status` tinyint(1) NOT NULL DEFAULT 0,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    上面的例子中,status列被定义为DEFAULT约束,如果插入数据时没有指定status的值,则默认为0。

    4. 索引

    索引是一种用于加速查询的机制。在Mysql中,索引可以用于提高查询效率和保证数据的完整性和一致性。Mysql支持以下几种索引:

    4.1. PRIMARY KEY索引

    PRIMARY KEY索引是一种用于唯一标识表中每一行数据的索引。在Mysql中,每个表只能有一个PRIMARY KEY索引。例如:

    CREATE TABLE `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL,
      `email` varchar(50) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    上面的例子中,id列被定义为PRIMARY KEY索引。

    4.2. UNIQUE索引

    UNIQUE索引是一种用于限制列中的数据不能重复的索引。在Mysql中,每个表可以有多个UNIQUE索引。例如:

    CREATE TABLE `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL,
      `email` varchar(50) NOT NULL UNIQUE,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    上面的例子中,email列被定义为UNIQUE索引。

    4.3. INDEX索引

    INDEX索引是一种用于加速查询的索引。在Mysql中,每个表可以有多个INDEX索引。例如:

    CREATE TABLE `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL,
      `email` varchar(50) NOT NULL,
      INDEX `idx_name` (`name`),
      INDEX `idx_email` (`email`),
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    上面的例子中,name和email列被定义为INDEX索引。

    4.4. FULLTEXT索引

    FULLTEXT索引是一种用于全文搜索的索引。在Mysql中,每个表只能有一个FULLTEXT索引。例如:

    CREATE TABLE `articles` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `title` varchar(50) NOT NULL,
      `content` text NOT NULL,
      FULLTEXT INDEX `idx_content` (`content`),
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    上面的例子中,content列被定义为FULLTEXT索引。

    5. 总结

    本文介绍了Mysql中主键、外键、约束和索引的概念和用法。在实际应用中,应根据具体情况选择合适的主键、外键、约束和索引,以提高数据的完整性和一致性,加速查询。

    以上就是一文彻底搞清楚MySQL的主键、外键、约束和各种索引的详细内容,更多关于MySQL主键、外键、约束和索引的资料请关注本网站其它相关文章!

    您可能感兴趣的文章:

    • 关于MySQL表中没有主键时如何找到重复的数据
    • Mysql复合主键和联合主键的区别解析
    • MySQL主键自增会遇到的坑及解决方法
    • MySQL语句中的主键和外键使用说明
    • mysql创建表设置表主键id从1开始自增的解决方案
    • 如何修改mysql数据表主键