<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # MySQL 約束 > 原文: [http://zetcode.com/databases/mysqltutorial/constraints/](http://zetcode.com/databases/mysqltutorial/constraints/) 在 MySQL 教程的這一部分中,我們將處理約束。 約束放在列或表上。 它們限制了可以插入表中的數據。 我們有以下限制: * 非空 * 唯一 * 主鍵 * 外鍵 * 枚舉 * 組 其他數據庫也具有`CHECK`約束,該約束為有效數據設置了條件。 MySQL 解析了這個約束,但是沒有強制執行。 ### 非空約束 具有`NOT NULL`約束的列不能具有`NULL`值。 ```sql mysql> CREATE TABLE People(Id INTEGER, LastName TEXT NOT NULL, -> FirstName TEXT NOT NULL, City VARCHAR(55)); Query OK, 0 rows affected (0.07 sec) ``` 我們創建兩個具有`NOT NULL`約束的列。 ```sql mysql> INSERT INTO People VALUES(1, 'Hanks', 'Robert', 'New York'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO People VALUES(1, NULL, 'Marianne', 'Chicago'); ERROR 1048 (23000): Column 'LastName' cannot be null ``` 第一個`SELECT`語句執行成功,第二個失敗。 SQL 錯誤說,`LastName`列不能為空。 ### 唯一約束 `UNIQUE`約束確保所有數據在列中都是唯一的。 ```sql mysql> CREATE TABLE Brands(Id INTEGER, BrandName VARCHAR(30) UNIQUE); Query OK, 0 rows affected (0.08 sec) ``` 在這里,我們創建一個表`Brands`。 `BrandName`列設置為`UNIQUE`。 不能有兩個名稱相同的品牌。 ```sql mysql> INSERT INTO Brands VALUES(1, 'Coca Cola'); Query OK, 1 row affected (0.03 sec) mysql> INSERT INTO Brands VALUES(2, 'Pepsi'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Brands VALUES(3, 'Pepsi'); ERROR 1062 (23000): Duplicate entry 'Pepsi' for key 'BrandName' ``` 對于鍵`"BrandName"`,我們收到一個 SQL 錯誤,重復項`"Pepsi"`。 只能有一個百事可樂品牌。 注意,`PRIMARY KEY`約束自動在其上定義了`UNIQUE`約束。 ### 主鍵 `PRIMARY KEY`約束唯一地標識數據庫表中的每個記錄。 這是唯一鍵的特例。 主鍵不能為`NULL`,唯一鍵可以為。 可以有更多`UNIQUE`列,但是表中只有一個主鍵。 在設計數據庫表時,主鍵很重要。 主鍵是唯一的 ID。 我們使用它們來引用表行。 在表之間創建關系時,主鍵成為其他表中的外鍵。 ```sql mysql> DROP TABLE Brands; mysql> CREATE TABLE Brands(Id INTEGER PRIMARY KEY, BrandName VARCHAR(30) UNIQUE); ``` `Brands`表的`Id`列成為主鍵。 ```sql mysql> DESCRIBE Brands; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | Id | int(11) | NO | PRI | NULL | | | BrandName | varchar(30) | YES | UNI | NULL | | +-----------+-------------+------+-----+---------+-------+ ``` `DESCRIBE`語句顯示有關表中各列的信息。 我們可以看到`Id`列定義了`PRIMARY KEY`,`BrandName`設置了`UNIQUE`約束。 在處理特定表時,主鍵用于唯一標識表中的行。 唯一鍵強制列中的所有數據都不重復。 ### 外鍵 一個表中的`FOREIGN KEY`指向另一表中的`PRIMARY KEY`。 它是兩個表之間的引用約束。 外鍵標識一個(引用)表中的一列或一組列,該列或表引用另一(引用)表中的一列或一組列。 我們將在兩個表上顯示此約束:`Authors`和`Books`。 ```sql mysql> CREATE TABLE Authors(AuthorId INTEGER PRIMARY KEY, Name VARCHAR(70)) -> type=InnoDB; ``` 在這里,我們創建`Authors`表。 在 MySQL 中,引用表和被引用表必須是 InnoDB 或 BDB 存儲引擎。 在 MyISAM 存儲引擎中,將解析外鍵,但不會強制使用外鍵。 ```sql mysql> CREATE TABLE Books(BookId INTEGER PRIMARY KEY, Title VARCHAR(50), -> AuthorId INTEGER, FOREIGN KEY(AuthorId) REFERENCES Authors(AuthorId)) -> type=InnoDB; ``` 我們創建`Books`表。 在這里,我們有一個`AuthorId`列名,它用作外鍵。 它引用`Authors`表的主鍵。 在我們的示例中,外鍵強制執行意味著什么? 我們無法使用`Authors`本書中沒有的`AuthorId`在`Books`表中插入一行。 ### `ENUM`約束 `ENUM`是一個字符串對象,其值是從允許值列表中選擇的。 在創建表時,它們在列規范中顯式枚舉。 ```sql mysql> CREATE TABLE Shops(Id INTEGER, Name VARCHAR(55), -> Quality ENUM('High', 'Average', 'Low')); ``` 我們有一個`Shops`表。 該表具有定義的`Id`,`Name`和`Quality`列。 `Quality`列是`ENUM`。 它允許具有三個指定值之一:`High`,`Average`或`Low`。 ```sql mysql> INSERT INTO Shops VALUES(1, 'Boneys', 'High'); mysql> INSERT INTO Shops VALUES(2, 'AC River', 'Average'); mysql> INSERT INTO Shops VALUES(3, 'AT 34', '**'); mysql> SELECT * FROM Shops; +------+----------+---------+ | Id | Name | Quality | +------+----------+---------+ | 1 | Boneys | High | | 2 | AC River | Average | | 3 | AT 34 | | +------+----------+---------+ ``` 在前兩個語句中,我們插入了兩行。 在第三種情況下,該值在`ENUM`中不可用。 在這種情況下,將插入一個空字符串。 ### `SET`約束 `SET`可以具有零個或多個值。 每個值都必須從允許值列表中選擇。 ```sql mysql> CREATE TABLE Students(Id INTEGER, Name VARCHAR(55), -> Certificates SET('A1', 'A2', 'B1', 'C1')); ``` 我們有一個`Students`表。 在此表中,我們有一個`Certificates`列。 每個學生可以擁有 0、1 個或多個這些證書。 這與`ENUM`約束不同,在`ENUM`約束中,允許值列表中只能有一個不同的值。 ```sql mysql> INSERT INTO Students VALUES(1, 'Paul', 'A1,B1'); mysql> INSERT INTO Students VALUES(2, 'Jane', 'A1,B1,A2'); mysql> INSERT INTO Students VALUES(3, 'Mark', 'A1,A2,D1,D2'); mysql> SELECT * FROM Students; +------+------+--------------+ | Id | Name | Certificates | +------+------+--------------+ | 1 | Paul | A1,B1 | | 2 | Jane | A1,A2,B1 | | 3 | Mark | A1,A2 | +------+------+--------------+ ``` 保羅有兩個證書,珍妮有三個,馬克有四個,但是只有兩個被認可,因此只有前兩個被寫到了表中。 證書用逗號分隔。 不允許有空格。 在 MySQL 教程的這一部分中,我們介紹了 MySQL 支持的約束。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看