Das Ändern von Tabellenstrukturen
In diesem Schritt werden wir lernen, wie man bestehende Tabellen mit ALTER TABLE-Befehlen ändert. Dies ist eine häufige Aufgabe, wenn sich Ihre Datenanforderungen im Laufe der Zeit ändern.
Ändern wir unsere products-Tabelle, um einige neue Spalten hinzuzufügen und bestehende zu ändern:
- Fügen Sie eine neue Spalte hinzu:
ALTER TABLE products
ADD COLUMN manufacturer VARCHAR(100) AFTER name;
Dieser Befehl fügt eine neue Spalte namens manufacturer
hinter der name
-Spalte hinzu.
- Ändern Sie eine bestehende Spalte:
ALTER TABLE products
MODIFY COLUMN description VARCHAR(500) NOT NULL DEFAULT 'No description available';
Dieser Befehl ändert die description
-Spalte in eine Zeichenkette variabler Länge mit einer maximalen Länge von 500 Zeichen. Er legt auch einen Standardwert von 'No description available' für neue Zeilen fest.
- Benennen Sie eine Spalte um:
ALTER TABLE products
CHANGE COLUMN weight product_weight DECIMAL(8,2);
Dieser Befehl benennt die weight
-Spalte in product_weight
um und ändert ihren Datentyp in eine Dezimalzahl mit insgesamt 8 Ziffern und 2 Dezimalstellen.
- Löschen Sie eine Spalte:
ALTER TABLE products
DROP COLUMN in_stock;
Dieser Befehl entfernt die in_stock
-Spalte aus der Tabelle.
Fügen wir einen zusammengesetzten Index (composite index) hinzu, um die Abfrageleistung zu verbessern:
ALTER TABLE products
ADD INDEX idx_name_manufacturer (name, manufacturer);
Dieser Befehl erstellt einen zusammengesetzten Index auf den Spalten name
und manufacturer
.
Um alle vorgenommenen Änderungen anzuzeigen:
DESCRIBE products;
SHOW INDEX FROM products;
Sie sollten die aktualisierte Tabellenstruktur und die Indizes sehen:
MariaDB [store]> DESCRIBE products;
+----------------+---------------+------+-----+--------------------------+-------------------------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------+------+-----+--------------------------+-------------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | MUL | NULL | |
| manufacturer | varchar(100) | YES | | NULL | |
| price | decimal(10,2) | NO | | NULL | |
| description | varchar(500) | NO | | No description available | |
| product_weight | decimal(8,2) | YES | | NULL | |
| created_at | datetime | YES | | current_timestamp() | |
| last_updated | timestamp | NO | | current_timestamp() | on update current_timestamp() |
+----------------+---------------+------+-----+--------------------------+-------------------------------+
8 rows in set (0.001 sec)
MariaDB [store]> SHOW INDEX FROM products;
+----------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Ignored |
+----------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| products | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | NO |
| products | 1 | idx_name_manufacturer | 1 | name | A | 0 | NULL | NULL | | BTREE | | | NO |
| products | 1 | idx_name_manufacturer | 2 | manufacturer | A | 0 | NULL | NULL | YES | BTREE | | | NO |
+----------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
3 rows in set (0.000 sec)