Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да проверите дали таблица вече съществува, преди да я създадете в MySQL

В MySQL можете да използвате IF NOT EXISTS клауза на CREATE TABLE оператор, за да проверите дали таблица със същото име вече съществува в базата данни.

Ако таблицата не съществува, тя ще бъде създадена. Ако вече съществува, няма да бъде създаден.

Пример

Става така:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Където t1 е името на таблицата, а всичко между скобите е дефиницията на таблицата (т.е. колони и т.н.).

В този случай таблицата ще бъде създадена само ако вече няма такава, наречена t1 .

Проверете дали таблицата вече съществува

Можем да използваме sys.table_exists() процедура, за да проверите дали таблицата вече съществува:

CALL sys.table_exists('test', 't1', @table_type); 
SELECT @table_type;

Резултат:

+-------------+
| @table_type |
+-------------+
| BASE TABLE  |
+-------------+

Ето, test е името на базата данни и t1 е името на таблицата, за която проверявам съществуването.

В този случай резултатът е BASE TABLE което означава, че таблицата съществува.

Това е само един от многото начини да проверите дали таблица съществува в MySQL.

Опитайте да създадете таблицата отново

Сега, ако се опитаме да създадем тази таблица отново:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Не получаваме грешка:

Query OK, 0 rows affected, 1 warning (0.00 sec)

Но получаваме предупреждение.

Така че нека проверим предупреждението:

SHOW WARNINGS;

Резултат:

+-------+------+---------------------------+
| Level | Code | Message                   |
+-------+------+---------------------------+
| Note  | 1050 | Table 't1' already exists |
+-------+------+---------------------------+

Както се очакваше, това ни казва, че таблицата вече съществува.

Без IF NOT EXISTS Клауза

Ето какво се случва, когато не използваме IF NOT EXISTS клауза, когато се опитвате да създадете таблица, която вече съществува:

CREATE TABLE t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Този път получаваме грешка:

ERROR 1050 (42S01): Table 't1' already exists

Важно е да се отбележи, че IF NOT EXISTS клаузата не проверява структурата/дефиницията на таблицата. Той просто проверява дали няма съществуваща таблица със същото име, която се опитваме да дадем на таблицата, която създаваме.

С други думи, само защото таблица с това име вече съществува, това не означава, че има правилната дефиниция.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Най-добри практики на mysqldump:Част 1 – Предпоставки за MySQL

  2. Как да получите следващия идентификатор за автоматично увеличение в mysql

  3. Как да деактивирате проверката на чужд ключ в MySQL

  4. Премахване на MySQL 5.7 напълно

  5. генерира дни от период от време