欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文徹底搞清楚MySQL的主鍵、外鍵、約束和各種索引

 更新時間:2023年06月12日 11:05:59   作者:陳橘又青  
主鍵用于唯一標識表中每一行數(shù)據(jù),外鍵用于建立表與表之間關聯(lián)關系,約束用于限制表中數(shù)據(jù)的規(guī)則,索引用于加速查詢,本文就將帶大家底搞清楚MySQL的主鍵、外鍵、約束和各種索引,感興趣的小伙伴可以跟著小編一起來學習

1. 主鍵

主鍵是一種用于唯一標識表中每一行數(shù)據(jù)的標識符。在Mysql中,主鍵可以是一個或多個列的組合,但是必須滿足以下條件:

  • 主鍵列的值必須唯一,不能重復。
  • 主鍵列的值不能為空,不能為NULL。
  • 一個表只能有一個主鍵。

主鍵可以用于加速查詢和提高數(shù)據(jù)的完整性和安全性。在Mysql中,主鍵可以通過以下兩種方式定義:

1.1. 在創(chuàng)建表時定義主鍵

在創(chuàng)建表時,可以通過在列定義后面添加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. 外鍵

外鍵是一種用于建立表與表之間關聯(lián)關系的機制。外鍵可以用于保證數(shù)據(jù)的完整性和一致性。在Mysql中,外鍵可以通過以下兩種方式定義:

2.1. 在創(chuàng)建表時定義外鍵

在創(chuàng)建表時,可以通過在列定義后面添加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. 約束

約束是一種用于限制表中數(shù)據(jù)的規(guī)則。在Mysql中,約束可以用于保證數(shù)據(jù)的完整性和一致性。Mysql支持以下幾種約束:

3.1. NOT NULL約束

NOT NULL約束用于限制列中的數(shù)據(jù)不能為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約束用于限制列中的數(shù)據(jù)不能重復。例如:

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約束用于限制列中的數(shù)據(jù)必須滿足指定的條件。例如:

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約束,如果插入數(shù)據(jù)時沒有指定status的值,則默認為0。

4. 索引

索引是一種用于加速查詢的機制。在Mysql中,索引可以用于提高查詢效率和保證數(shù)據(jù)的完整性和一致性。Mysql支持以下幾種索引:

4.1. PRIMARY KEY索引

PRIMARY KEY索引是一種用于唯一標識表中每一行數(shù)據(jù)的索引。在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索引是一種用于限制列中的數(shù)據(jù)不能重復的索引。在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. 總結(jié)

本文介紹了Mysql中主鍵、外鍵、約束和索引的概念和用法。在實際應用中,應根據(jù)具體情況選擇合適的主鍵、外鍵、約束和索引,以提高數(shù)據(jù)的完整性和一致性,加速查詢。

以上就是一文徹底搞清楚MySQL的主鍵、外鍵、約束和各種索引的詳細內(nèi)容,更多關于MySQL主鍵、外鍵、約束和索引的資料請關注腳本之家其它相關文章!

相關文章

  • Mysql Error Code : 1436 Thread stack overrun

    Mysql Error Code : 1436 Thread stack overrun

    I meet with the error while calling stored procedures from the MySql in my Mac system server. It similar as the description below
    2011-07-07
  • MySQL GTID主備不一致的修復方案

    MySQL GTID主備不一致的修復方案

    這篇文章主要介紹了MySQL GTID主備不一致的修復方案,幫助大家更好的理解和學習使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-04-04
  • MySQL中延遲復制的實現(xiàn)

    MySQL中延遲復制的實現(xiàn)

    MySQL延遲復制允許副本服務器滯后源服務器指定時間,用于數(shù)據(jù)保護、歷史檢查等,延遲復制通過設置MASTER_DELAY選項實現(xiàn),下面就來介紹 一下,感興趣的可以了解一下
    2025-02-02
  • MySQL多表查詢的具體實例

    MySQL多表查詢的具體實例

    這篇文章主要介紹了MySQL多表查詢的具體實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • mysql數(shù)據(jù)庫設置utf-8編碼的方法步驟

    mysql數(shù)據(jù)庫設置utf-8編碼的方法步驟

    這篇文章主要介紹了mysql數(shù)據(jù)庫設置utf-8編碼的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • 最新評論