Introduktion
- I SQL er det nogle gange nødvendigt at slette en kolonne i en tabel.
- Brugen af ALTER TABLE kommando med DROP COLUMN klausul tjener det formål at slette/fjerne en kolonne fra en tabel.
- Det er muligt at fjerne enkelte såvel som flere kolonner fra en tabel.
1. Slet en enkelt kolonne fra en tabel
For at slette en enkelt kolonne i tabellen skal du bruge syntaksen nedenfor:
ALTER TABLE TableName DROP COLUMN ColumnName;
Her,
- Tabelnavn er navnet på den tabel, hvis kolonne skal slettes.
- Kolonnenavn efter DROP COLUMN-udtrykket er navnet på den kolonne, der skal slettes.
Eksempel:
Overvej en database med navnet "employee_db" med en tabel "employee" oprettet i den. I dette emne vil vi overveje denne tabel og database for alle de efterfølgende eksempler:
mysql> USE employee_db;
Database changed
mysql> DESC employee;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| Emp_ID | int(11) | NO | PRI | NULL | |
| Emp_Name | varchar(20) | YES | | NULL | |
| Emp_Salary | int(11) | YES | | NULL | |
| Emp_Dept | varchar(20) | YES | | NULL | |
| Emp_City | varchar(20) | YES | | NULL | |
| Emp_PhoneNo | varchar(20) | YES | | NULL | |
+-------------+-------------+------+-----+---------+-------+
6 rows in set (0.07 sec)
mysql> SELECT *FROM employee;
+--------+----------+------------+------------+----------+-------------+
| Emp_ID | Emp_Name | Emp_Salary | Emp_Dept | Emp_City | Emp_PhoneNo |
+--------+----------+------------+------------+----------+-------------+
| 101 | Ram | 52000 | R&D | Pune | 8798654676 |
| 102 | Shyam | 38000 | Finance | Delhi | 9898765687 |
| 103 | Anmol | 61000 | Accounting | Mumbai | 9087864532 |
| 104 | Abhishek | 69000 | Purchasing | Shimla | 7678987534 |
| 105 | Rohit | 53000 | HRM | Ambala | 8897865643 |
+--------+----------+------------+------------+----------+-------------+
5 rows in set (0.00 sec)
Her har vi valgt den allerede oprettede database med kommandoen 'USE werknemer_db'. "DESC-medarbejder"-kommandoen beskriver strukturen af 'medarbejder'-tabellen. Så har vi brugt SELECT-kommandoen til at vise den medarbejdertabel, der er oprettet i medarbejder_db.
Nu vil vi skrive en forespørgsel for at slette en kolonne, der indeholder medarbejderby i tabellen "medarbejder" .
mysql> ALTER TABLE employee DROP COLUMN Emp_City;
Query OK, 5 rows affected (0.30 sec)
Records: 5 Duplicates: 0 Warnings: 0
ALTER TABLE-kommandoen bruges på medarbejdertabellen med DROP COLUMN-klausulen på Emp_City.
mysql> DESC employee;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| Emp_ID | int(11) | NO | PRI | NULL | |
| Emp_Name | varchar(20) | YES | | NULL | |
| Emp_Salary | int(11) | YES | | NULL | |
| Emp_Dept | varchar(20) | YES | | NULL | |
| Emp_PhoneNo | varchar(20) | YES | | NULL | |
+-------------+-------------+------+-----+---------+-------+
5 rows in set (0.02 sec)
mysql> SELECT *FROM employee;
+--------+----------+------------+------------+-------------+
| Emp_ID | Emp_Name | Emp_Salary | Emp_Dept | Emp_PhoneNo |
+--------+----------+------------+------------+-------------+
| 101 | Ram | 52000 | R&D | 8798654676 |
| 102 | Shyam | 38000 | Finance | 9898765687 |
| 103 | Anmol | 61000 | Accounting | 9087864532 |
| 104 | Abhishek | 69000 | Purchasing | 7678987534 |
| 105 | Rohit | 53000 | HRM | 8897865643 |
+--------+----------+------------+------------+-------------+
5 rows in set (0.00 sec)
Når vi igen anvender DESC-kommandoen på 'employee'-tabellen lige efter at have anvendt ALTER-kommandoen skrevet ovenfor, kan vi nu se, at Emp_City ikke er opført i resultaterne. Dette viser, at kolonne med navnet Emp_City nu er slettet fra medarbejdertabellen.
Vi har også brugt SELECT-kommandoen igen. I resultaterne af SELECT-kommandoen fjernes værdierne i Emp_City fra alle posterne.
2. Slet flere kolonner fra en tabel
For at slette mere end én kolonne i tabellen skal du bruge syntaksen nedenfor:
ALTER TABLE TableName DROP COLUMN ColumnName1, DROP COLUMN ColumnName2,……ColumnNameN;
Her,
Vi er nødt til at angive alle kolonnenavne, som skal fjernes, med DROP COLUMN-sætning.
Eksempel:
For det første vil vi se strukturen af medarbejdertabellen og de poster, der findes i den.
mysql> DESC employee;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| Emp_ID | int(11) | NO | PRI | NULL | |
| Emp_Name | varchar(20) | YES | | NULL | |
| Emp_Salary | int(11) | YES | | NULL | |
| Emp_Dept | varchar(20) | YES | | NULL | |
| Emp_PhoneNo | varchar(20) | YES | | NULL | |
+-------------+-------------+------+-----+---------+-------+
5 rows in set (0.02 sec)
mysql> SELECT *FROM employee;
+--------+----------+------------+------------+-------------+
| Emp_ID | Emp_Name | Emp_Salary | Emp_Dept | Emp_PhoneNo |
+--------+----------+------------+------------+-------------+
| 101 | Ram | 52000 | R&D | 8798654676 |
| 102 | Shyam | 38000 | Finance | 9898765687 |
| 103 | Anmol | 61000 | Accounting | 9087864532 |
| 104 | Abhishek | 69000 | Purchasing | 7678987534 |
| 105 | Rohit | 53000 | HRM | 8897865643 |
+--------+----------+------------+------------+-------------+
5 rows in set (0.00 sec)
Her har vi valgt den allerede oprettede database med kommandoen 'USE werknemer_db'. "DESC-medarbejder"-kommandoen beskriver strukturen af 'medarbejder'-tabellen. Så har vi brugt SELECT-kommandoen til at vise den medarbejdertabel, der er oprettet i medarbejder_db.
Nu vil vi skrive en forespørgsel for at slette en kolonne, der indeholder medarbejderens løn og medarbejdertelefonnummer i tabellen "medarbejder".
mysql> ALTER TABLE employee DROP COLUMN Emp_Salary, DROP COLUMN Emp_PhoneNo;
Query OK, 5 rows affected (0.29 sec)
Records: 5 Duplicates: 0 Warnings: 0
ALTER TABLE-kommandoen bruges på medarbejdertabellen med DROP COLUMN-klausulen på Emp_Salary og Emp_PhoneNo.
mysql> DESC employee;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| Emp_ID | int(11) | NO | PRI | NULL | |
| Emp_Name | varchar(20) | YES | | NULL | |
| Emp_Dept | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> SELECT *FROM employee;
+--------+----------+------------+
| Emp_ID | Emp_Name | Emp_Dept |
+--------+----------+------------+
| 101 | Ram | R&D |
| 102 | Shyam | Finance |
| 103 | Anmol | Accounting |
| 104 | Abhishek | Purchasing |
| 105 | Rohit | HRM |
+--------+----------+------------+
5 rows in set (0.00 sec)
Når vi igen anvender DESC-kommandoen på 'employee'-tabellen lige efter at have anvendt ALTER-kommandoen skrevet ovenfor, kan vi se, at Emp_Salary og Emp_PhoneNo ikke er angivet i resultaterne. Dette viser, at kolonne navngivet som Emp_Salary og Emp_PhoneNo er nu slettet fra medarbejdertabellen. Så har vi også brugt SELECT-kommandoen igen. I resultaterne af SELECT-kommandoen fjernes værdierne i Emp_Salary og Emp_PhoneNo fra alle posterne.