[MySQL-Erste-Schritte-Anleitung] Die Verwendung und der Unterschied zwischen Primärschlüssel und eindeutigem Schlüssel

1. Primärschlüssel

1. Grundlegende Grammatik

-- 方式一
create table t5(id int primary key, ……); -- 设置id字段主键

-- 方式二
create table t5(
    id int primary key,
    ……
  	primary key(id, ……);  
    -- 每个表只能有一个主键,但是可以将多个列设置复合主键
)

Es kann höchstens einen Primärschlüssel in einer Tabelle geben , und die durch den Primärschlüssel eingeschränkten Felder dürfen nicht wiederholt oder leer sein . Die Spalte, in der sich der Primärschlüssel befindet, ist normalerweise ein ganzzahliger Typ.

mysql> show create table t5\G
*************************** 1. row ***************************
Create Table: CREATE TABLE `t5` (
  `id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Obwohl wir bei der Erstellung von t5 keine Nicht-Null-Einschränkung für das ID-Feld festgelegt haben, fügt mysql bei der Syntaxoptimierung automatisch eine Einschränkung für das Primärschlüsselfeld not nullhinzu .

2. Anwendungsfälle

  • Geben Sie beim Erstellen der Tabelle den Primärschlüssel an

    mysql> create table t7(
        -> id int unsigned primary key comment '将学号设置为主键',
        -> name varchar(10) not null);
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> desc t7;
    +-------+------------------+------+-----+---------+-------+
    | Field | Type             | Null | Key | Default | Extra |
    +-------+------------------+------+-----+---------+-------+
    | id    | int(10) unsigned | NO   | PRI | NULL    |       |
    | name  | varchar(10)      | NO   |     | NULL    |       |
    +-------+------------------+------+-----+---------+-------+
    2 rows in set (0.00 sec)
    
  • Primärschlüssel löschen

    alter table 表名 drop primary key
    

    Bild-20230427191932180

  • Wenn die Tabelle ohne Primärschlüssel erstellt wird, kann der Primärschlüssel wieder hinzugefügt werden. Wenn das Feld, das der Primärschlüssel sein soll, Duplikate enthält, schlägt die Einfügung fehl. Es wird daher dringend empfohlen, beim Erstellen des Tisches Rücksicht zu nehmen, und es ist sehr unpraktisch, ihn später hinzuzufügen

    alter table 表名 add primary key(字段)
    

    Bild-20230427192021112

  • Die durch den Primärschlüssel eingeschränkten Felder können nicht wiederholt werden. Sobald sie wiederholt werden, schlägt der Einfügevorgang fehl

    mysql> insert into t7 values(1, '张三');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into t7 values(2, '李四');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into t7 values(2, '王五');
    ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'
    
  • Legen Sie den zusammengesetzten Primärschlüssel fest. Beim Erstellen einer Tabelle können wir immerhin Felder verwenden, primary key(主键字段列表)um einen Primärschlüssel zu erstellen.Wenn es mehrere Felder als Primärschlüssel gibt, können sie als zusammengesetzte Primärschlüssel festgelegt werden

    mysql> create table t8(
        -> id int,
        -> QQ varchar(20),
        -> telephone varchar(15),
        -> primary key(id, QQ, telephone)
        -> );
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> desc t8;
    +-----------+-------------+------+-----+---------+-------+
    | Field     | Type        | Null | Key | Default | Extra |
    +-----------+-------------+------+-----+---------+-------+
    | id        | int(11)     | NO   | PRI | NULL    |       |
    | QQ        | varchar(20) | NO   | PRI | NULL    |       |
    | telephone | varchar(15) | NO   | PRI | NULL    |       |
    +-----------+-------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    

​ Im obigen Beispiel werden die drei Felder ID, QQ und Telefon zu einem Primärschlüssel zusammengeführt. Die Eindeutigkeitsanforderung des zusammengesetzten Primärschlüssels besteht darin, dass die Kombination aller Felder des zusammengesetzten Primärschlüssels in einer Datenzeile eindeutig sein muss, dh eine teilweise Duplizierung ermöglicht.

2. Eindeutiger Schlüssel

1. Grundlegende Grammatik

mysql> create table t9(
    -> id int unsigned primary key auto_increment,
    -> QQ varchar(20) unique  -- unique关键字用于指定唯一键
    -> );

Wie bereits erwähnt, kann der Primärschlüssel die Eindeutigkeit der Daten garantieren, aber es kann nur einen Primärschlüssel in einer Tabelle geben. Im wirklichen Leben gibt es jedoch oft mehr als eine eindeutige Angabe in einer Tabelle, wie z. B.: ID-Nummer, QQ-Nummer, Mobiltelefonnummer ... dann muss die Eindeutigkeit dieser Daten durch einen eindeutigen Schlüssel garantiert werden.

Der Hauptunterschied zwischen einem eindeutigen Schlüssel und einem Primärschlüssel besteht darin, dass ein eindeutiger Schlüssel dies kannNullwerte zulassen(NULL), wobei leere Felder nicht auf Eindeutigkeit verglichen werden. Das Vorhandensein von Nullwerten führt dazu, dass der eindeutige Schlüssel nicht jede Datenzeile vollständig und eindeutig identifizieren kann; während der Primärschlüssel keine Wiederholung oder Leerheit von Daten zulässt, kann er also jede Datenzeile eindeutig identifizieren.

Wir können einfach verstehen, dass es beim Primärschlüssel mehr darum geht, Eindeutigkeit zu identifizieren . Der eindeutige Schlüssel dient vielmehr dazu, sicherzustellen, dass die Daten im Unternehmen nicht dupliziert werden . Generell empfehlen wir, den Primärschlüssel als Feld zu gestalten, das nichts mit dem laufenden Geschäft zu tun hat, damit wir bei Anpassungen des Geschäfts versuchen können, keine großen Anpassungen am Primärschlüssel vorzunehmen.

2. Anwendungsfälle

  • Legen Sie das QQ-Feld als eindeutigen Schlüssel fest

    mysql> create table t10(
        -> id int primary key auto_increment,
        -> name varchar(10) not null,
        -> QQ varchar(20) unique
        -> );
    Query OK, 0 rows affected (0.03 sec)
    

    Bild-20230428112518030

  • Eindeutiger Schlüssel erlaubt keine Duplikate

    mysql> insert into t10 values(1, '张三', '123456');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into t10 values(2, '李四', '123456');
    ERROR 1062 (23000): Duplicate entry '123456' for key 'QQ'
    
  • Der eindeutige Schlüssel darf leer sein

    mysql> insert into t10(name) values('李四');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from t10;
    +----+--------+--------+
    | id | name   | QQ     |
    +----+--------+--------+
    |  1 | 张三   | 123456 |
    |  2 | 李四   | NULL   |
    +----+--------+--------+
    2 rows in set (0.00 sec)
    

Guess you like

Origin blog.csdn.net/whc18858/article/details/130432853