Problem:
Sie möchten die Standardnamen von Einschränkungen in einer Tabelle in MySQL wissen.
Beispiel:
In unserer Datenbank erstellen wir zwei Tabellen, country
und student
, mit den folgenden Einschränkungen:PRIMARY KEY
(die Spalten-ID in den Tabellen country
und student
), FOREIGN KEY
(die Spalte country_id
in der Tabelle student
), DEFAULT
(der Spaltenname in der Tabelle student
), UNIQUE
(die Spalte name
in der Tabelle country
und die Spalte personal_number
in der Tabelle student
) und CHECK
(die Spalte age
in der Tabelle student
).
Lösung:
CREATE TABLE country ( id int NOT NULL primary key, name varchar(100) UNIQUE ); CREATE TABLE student ( id int NOT NULL primary key, name varchar(100) NOT NULL DEFAULT 'unknown', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int, FOREIGN KEY(country_id) REFERENCES country(id) );
Lassen Sie uns zeigen, wie MySQL die Einschränkungen dieser Tabellen standardmäßig benennt. Verwenden Sie diese Abfrage, um sie anzuzeigen:
SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME FROM information_schema.table_constraints WHERE table_name='country' OR table_name='student';
Hier ist das Ergebnis:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
Land | PRIMÄRSCHLÜSSEL | PRIMÄR |
Land | EINZIGARTIG | Name |
Schüler | PRIMÄRSCHLÜSSEL | PRIMÄR |
Schüler | EINZIGARTIG | persönliche_nummer |
Schüler | Fremdschlüssel | student_ibfk_1 |
Schüler | ÜBERPRÜFEN | student_chk_1 |
Diskussion:
Wenn wir unsere Tabellen erstellen, legen wir Einschränkungen für einige Spalten fest. Wir geben jedoch keine Namen für diese Einschränkungen an, daher werden sie in MySQL standardmäßig benannt. In MySQL sind die Standardeinschränkungstypen PRIMARY KEY
, FOREIGN KEY
, UNIQUE
, und CHECK
. Wie werden die Standardnamen für Einschränkungen generiert?
Die PRIMARY KEY constraint
heißt einfach PRIMARY
, weil es immer einen Primärschlüssel in einer Tabelle gibt. Es gibt zwei Einschränkungen namens PRIMARY
im Ergebnis oben, aber die Tabellen, zu denen sie gehören, sind unterschiedlich.
Für FOREIGN KEY
, folgt der Name der Konvention:der Tabellenname, ein Unterstrich (‘_
’), ‚ibfk
“, ein weiterer Unterstrich („_
“), und eine Zahl. In unserem Beispiel ist es student_ibfk_1
in der Tabelle student
.
Der Standardname für einen CHECK
Einschränkung ist ähnlich wie die des Fremdschlüssels. Es beginnt mit dem Tabellennamen, einem Unterstrich (‘_
’), ‚chk
“, ein weiterer Unterstrich („
_
“), und eine Zahl. In unserem Beispiel ist es student_chk_1
in der Tabelle student
.
Der Standardname eines UNIQUE
Constraint ist der Name der Spalte selbst. In unserem Beispiel ist es personal_number
in der Tabelle student
. Wenn es mehrere Spalten mit dem UNIQUE
gibt Constraint, es verwendet den Namen der ersten Spalte in der Definition des Constraints.