Nogle gange skal du muligvis slette alle rækker i en tabel i MySQL-databasen. Der er flere måder at gøre det på ved at bruge TRUNCATE TABLE, DROP TABLE og DELETE-sætninger. I denne artikel vil vi se på, hvordan man trunkerer tabel i MySQL ved hjælp af MySQL TRUNCATE TABLE-sætning.
Sådan afkortes tabel i MySQL
Her er, hvordan du afkorter tabel i MySQL ved hjælp af TRUNCATE TABLE-sætning. Her er syntaksen for MySQL TRUNCATE TABLE-sætning.
TRUNCATE [TABLE] table_name;
I ovenstående forespørgsel skal du angive dit tabelnavn, der skal afkortes, i stedet for tabelnavn.
Søgeordet TABLE er valgfrit efter TRUNCATE.
Bonus Læs:MySQL DROP VIEW
Eksempler på MySQL TRUNCATE TABLE
Lad os sige, at du har bordets ordrer i MySQL.
mysql> create table daily_orders(id int, order_date date,amount int); mysql> insert into daily_orders(id, order_date, amount) values(1, '2020-07-01',250),(2,'2020-07-02',320), (3,'2020-07-03',450); mysql> select * from daily_orders; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2020-07-01 | 250 | | 2 | 2020-07-02 | 320 | | 3 | 2020-07-03 | 450 | +------+------------+--------+
Her er SQL-forespørgslen til at afkorte tabel i MySQL.
mysql> truncate table daily_orders; mysql> select * from daily_orders; Empty set (0.00 sec)
Bonus Læs:Sådan opretter du indeks i MySQL
MySQL TRUNCATE vs DELETE
TRUNCATE TABLE ligner DELETE-sætningen i MySQL. Der er dog et par vigtige forskelle. Her er forskellen mellem TRUNCATE og DELETE i MySQL.
MySQL SLET
- DELETE er en DML-sætning (Data manipulation language). Den sletter en række ad gangen. Så det udføres ved hjælp af rækkelås, og hver række er låst til sletning
- SLETTE-handlinger logges
- Du kan angive WHERE-sætning i DELETE-sætningen for kun at slette specifikke rækker i din tabel
- DELETE er langsommere end afkortning, da slettehandlinger logges
MySQL TRUNCATE
- TRUNCATE er en DDL-kommando (Data Description Language), som låser tabellen til sletning, men ikke rækkerne.
- TRUNCATE fjerner alle data i tabellen. Så du kan ikke angive WHERE-sætning i TRUNCATE-sætningen.
- TRUNCATE-handlinger logges ikke og er derfor meget hurtigere end DELETE-sætning.
Tilbageføring er mulig i både DELETE- og TRUNCATE-udsagn.
Bonus Læs:Sådan opretter du lagret procedure i MySQL
Sådan afkortes tabel med fremmednøgle
Hvis din tabel har en fremmednøgle-begrænsning, vil du få følgende fejl, når du kører TRUNCATE-sætningen for den tabel.
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
Så du skal logge ind på MySQL og deaktivere tjek af fremmed nøgle, før du trunkerer tabeller ved at bruge følgende kommando
SET FOREIGN_KEY_CHECKS=0;
Når du har afkortet tabeller, skal du genaktivere kontrol af fremmednøgle
SET FOREIGN_KEY_CHECKS=1;
Bonuslæser:Sådan opretter du bruger i MySQL
Sådan afkortes alle tabeller i MySQL
MySQL TRUNCATE TABLE giver dig mulighed for kun at slette én tabel ad gangen. Så hvis du vil slette flere tabeller, skal du udstede separate TRUNCATE TABLE-kommandoer. Her er et eksempel på at afkorte flere tabeller tabel1, tabel2, tabel3, …
mysql> TRUNCATE TABLE table1; mysql> TRUNCATE TABLE table2; mysql> TRUNCATE TABLE table3;
Bonus Læs:Sådan opretter du database i MySQL
Her er en SQL-forespørgsel til at generere flere TRUNCATE TABLE-sætninger ved hjælp af tabelnavnene i din database. Erstat DATABASE_NAME i følgende forespørgsel med dit databasenavn.
mysql> SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES where table_schema in ('sample'); +------------------------------------------------------------+ | Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';') | +------------------------------------------------------------+ | TRUNCATE TABLE sample.a; | | TRUNCATE TABLE sample.calendar; | | TRUNCATE TABLE sample.categories; | | TRUNCATE TABLE sample.daily_orders; | | TRUNCATE TABLE sample.login; | | TRUNCATE TABLE sample.meeting; | | TRUNCATE TABLE sample.order_status; | | TRUNCATE TABLE sample.orders; | | TRUNCATE TABLE sample.orders2; | | TRUNCATE TABLE sample.orders3; | | TRUNCATE TABLE sample.product_sales; | | TRUNCATE TABLE sample.products; | | TRUNCATE TABLE sample.sales; | | TRUNCATE TABLE sample.user_data; | | TRUNCATE TABLE sample.users; | +------------------------------------------------------------+
Brug ovenstående forespørgselsresultat til at afkorte alle tabeller i databasen. Forhåbentlig kan du nu afkorte tabellen i MySQL
Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!