sql >> Databasteknik >  >> RDS >> Mysql

Hur man trunkerar tabell i MySQL

Ibland kan du behöva ta bort alla rader i en tabell i MySQL-databasen. Det finns flera sätt att göra det med TRUNCATE TABLE, DROP TABLE och DELETE-satser. I den här artikeln kommer vi att titta på hur man trunkerar tabeller i MySQL med MySQL TRUNCATE TABLE-satsen.

Hur man trunkerar tabell i MySQL

Så här trunkerar du tabell i MySQL med TRUNCATE TABLE-satsen. Här är syntaxen för MySQL TRUNCATE TABLE-satsen.

TRUNCATE [TABLE] table_name;

I ovanstående fråga måste du ange ditt tabellnamn som ska trunkeras, istället för tabellnamn.

Nyckelordet TABLE är valfritt efter TRUNCATE.

Bonus Läs:MySQL DROP VIEW

Exempel på MySQL TRUNCATE TABELL

Låt oss säga att du har bordsbeställningarna 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 |
+------+------------+--------+

Här är SQL-frågan för att trunkera tabellen i MySQL.

mysql> truncate table daily_orders;

mysql> select * from daily_orders;
Empty set (0.00 sec)

Bonus Läs:Hur man skapar index i MySQL

MySQL TRUNCATE vs DELETE

TRUNCATE TABLE liknar DELETE-satsen i MySQL. Det finns dock några viktiga skillnader. Här är skillnaden mellan TRUNCATE och DELETE i MySQL.

MySQL DELETE

  • DELETE är en DML-sats (Data manipulation language). Den raderar en rad i taget. Så det körs med radlås, och varje rad är låst för radering
  • DELETE-åtgärder loggas
  • Du kan ange WHERE-satsen i DELETE-satsen för att bara ta bort specifika rader i tabellen
  • DELETE är långsammare än trunkering eftersom borttagningsåtgärder loggas

MySQL TRUNCATE

  • TRUNCATE är ett DDL-kommando (Data Description Language) som låser tabellen för radering men inte raderna.
  • TRUNCATE tar bort all data i tabellen. Så du kan inte ange WHERE-satsen i TRUNCATE-satsen.
  • TRUNCATE-operationer loggas inte och är därför mycket snabbare än DELETE-satsen.

Återställning är möjlig i både DELETE- och TRUNCATE-satser.

Bonus Läs:Hur man skapar lagrad procedur i MySQL

Hur man trunkerar tabell med främmande nyckel

Om din tabell har en begränsning av främmande nyckel kommer du att få följande fel när du kör TRUNCATE-satsen för den tabellen.

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key 
constraint fails

Så du måste logga in på MySQL och inaktivera kontroller av främmande nyckel innan du trunkerar tabeller, med följande kommando

SET FOREIGN_KEY_CHECKS=0;

När du har trunkerat tabeller, återaktivera kontroller av främmande nyckel

SET FOREIGN_KEY_CHECKS=1;

Bonus Läs:Hur man skapar användare i MySQL

Hur man trunkerar alla tabeller i MySQL

MySQL TRUNCATE TABLE låter dig ta bort endast en tabell åt gången. Så om du vill ta bort flera tabeller måste du utfärda separata TRUNCATE TABLE-kommandon. Här är ett exempel för att trunkera flera tabeller tabell1, tabell2, tabell3, …

mysql> TRUNCATE TABLE table1;
mysql> TRUNCATE TABLE table2;
mysql> TRUNCATE TABLE table3;

Bonus Läs:Hur man skapar en databas i MySQL

Här är en SQL-fråga för att generera flera TRUNCATE TABLE-satser, med hjälp av tabellnamnen i din databas. Ersätt DATABASE_NAME i följande fråga med ditt databasnamn.

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;                               |
+------------------------------------------------------------+

Använd ovanstående frågeresultat för att trunkera alla tabeller i databasen. Förhoppningsvis kan du nu trunkera tabellen i MySQL

Ubiq gör det enkelt att visualisera data på några minuter och övervaka i realtidsinstrumentpaneler. Prova det idag!

  1. SQL Server:Isolationsnivå läcker över poolade anslutningar

  2. Beställ efter COUNT per värde

  3. Skillnaden mellan sys.sql_modules, sys.system_sql_modules och sys.all_sql_modules i SQL Server

  4. Hur matchar jag en hel dag med ett datum och tid?