Создать таблицу — онлайн MySQL генератор

Форма для генерации SQL-запроса для MySQL

Beta

Считаете ли вы этот инструмент полезным? То поделитесь этим с друзьями или коллегами. Это поможет нам сделать наши бесплатные веб-инструменты лучше.


Эта форма позволяет вам создать sql для создания таблицы:

Имя Таблицы

Движок

DefaultInnoDBMyISAM

ИмяТипДлинаРазрешить НольДругиеДействие
INTVARCHARTEXTDATETINYINTSMALLINTMEDIUMINTINTBIGINT-DECIMALFLOATDOUBLEREAL-BITBOOLEANSERIALDATEDATETIMETIMESTAMPTIMEYEARCHARVARCHAR-TINYTEXTTEXTMEDIUMTEXTLONGTEXT-BINARYVARBINARY-TINYBLOBMEDIUMBLOBBLOBLONGBLOB-ENUMSETGEOMETRYPOINTLINESTRINGPOLYGONMULTIPOINTMULTILINESTRINGMULTIPOLYGONGEOMETRYCOLLECTION

Auto Increment

Zerofill

UNSIGNED

Default: NoneAs defined:NullEmpty string

Comment:

INTVARCHARTEXTDATETINYINTSMALLINTMEDIUMINTINTBIGINT-DECIMALFLOATDOUBLEREAL-BITBOOLEANSERIALDATEDATETIMETIMESTAMPTIMEYEARCHARVARCHAR-TINYTEXTTEXTMEDIUMTEXTLONGTEXT-BINARYVARBINARY-TINYBLOBMEDIUMBLOBBLOBLONGBLOB-ENUMSETGEOMETRYPOINTLINESTRINGPOLYGONMULTIPOINTMULTILINESTRINGMULTIPOLYGONGEOMETRYCOLLECTION

Auto Increment

Zerofill

UNSIGNED

Default: NoneAs defined:NullEmpty string

Comment:


Индексы

ИмяПоляТип ИндексаИндексный МетодAction

NormalUniqueFull text

BTREEHASH

Ваш сгенерированный sql можно увидеть ниже.

Beta — Это означает, что некоторые функции могут работать неправильно, или запрос sql будет сгенерирован с синтаксической ошибкой. Вы выполняете запросы на свой страх и риск.

Результат генерации sql

скачатьполноэкранныйкопироватьочистить

Перенести в «Вставить код» для сохранения

О «Создание таблицы MySQL генератор»

Об этом инструменте

Генератор MySQL таблиц была создана, чтобы помочь с генерацией MySQL-запроса для Создания таблиц. Нет необходимости запоминать синтаксис и вводить необходимые данные, теперь вы можете легко сгенерировать запрос MySQL онлайн «.

Как это работает?

После ввода имени таблицы инструмент позволяет пользователю вводить следующую информацию для каждого столбца таблицы и добавлять индексы.

Предупреждения

Генератор может содержать ошибки. Вы выполняете запросы на свой страх и риск.

Как клонировать и копировать таблицы в MySql

MySql

Fomenko Alexander

• 2 min read

При работе с базами данных может возникнуть ситуация, когда вам в MySQL нужно клонировать или продублировать существующую таблицу в новую из-за их сходства в столбцах и атрибутах, или же, для проведения тестов без затрагивания исходной таблицы.

Я столкнулся с подобной ситуацией, когда мне нужно было создать структурную копию одной таблицы, заполнить её данными, а потом заменить ею исходную. Подход с двумя идентичными таблицами применялся для того, чтобы для посетителей сайта вдруг не возникло ситуации, что таблица очищена в ожидании заполнения новыми данными. Потому, сначала мы создаем купию таблицы в MySql с каким-то временным именем, наполняем её данными, а затем переименовываем по имени первой. В результате чего, пользователь увидит обновленные данные, и не будет момента, когда эта таблица может быть пустой.

Поскольку существующая и новая таблицы очень похожи, моим быстрым решением будет клонирование существующей таблицы в SQL для создания новой таблицы на её основе. В SQL это сделать довольно просто, нужно выполнить всего пару команд, чтобы наилучшим образом удовлетворить свои потребности в клонировании таблицы.

В этой статье я покажу вам, как дублировать и клонировать существующие таблицы в SQL.

Простое клонирование

Первый метод называется Простое клонирование и, как следует из названия, он создает таблицу из другой таблицы без учета атрибутов столбцов и индексов.

CREATE TABLE new_table SELECT * FROM original_table;

Наприме, если у меня есть таблица users, я могу легко создать другую таблицу adminUsers, если мне не критично переносить атрибуты и индексы с таблицы users.

Приведенная ниже команда SQL создаёт простую структурную копию таблицы пользователей:

CREATE TABLE adminUsers SELECT * FROM users;

Используйте это для быстрого клонирования любою таблицы, которая будет включать только структуру и данные исходной таблицы.

Поверхностное клонирование

Поверхностное клонирование в основном используется для создания копии существующей структуры данных таблицы и атрибутов столбца без копирования данных. Это только создаст пустую базу таблицы с идентичной структурой исходной таблицы.

CREATE TABLE new_table LIKE original_table;

Следующая команда создаст пустую базу таблицы на основе исходной таблице.

CREATE TABLE adminUsers LIKE users;

Используйте это, если вам нужна только структура данных и атрибуты столбцов исходной таблицы, без наполнения её данными из исходной.

Глубокое клонирование

Глубокое клонирование значительно отличается от простого клонирования и похоже на поверхностное клонирование, но с тем отличием, что копирует структуру таблицы вместе с данными исходной таблицы. Как следует из названия, она создаёт глубокую копию исходной таблицы.

Это означает, что новая таблица будет иметь все атрибуты каждого столбца, индексы и данные существующей таблицы. Это весьма полезно, если вы хотите сохранить индексы и атрибуты исходной таблицы.

Чтобы достичь этого, мы должны создать пустую таблицу на основе структуры и атрибутов исходной, затем выбрать данные из исходной таблицы и вставить их в новую таблицу.

CREATE TABLE new_table LIKE original_table;
INSERT INTO new_table SELECT * FROM original_table;

Потому, создадим структуру новой таблицы по исходной и наполним её данными:

CREATE TABLE adminUsers LIKE users;
INSERT INTO adminUsers SELECT * FROM adminUsers;

Еще одна интересная вещь: допустим, вам не нужны все данные из существующей таблицы, а нужны только некоторые данные по определённым условиям, тогда уточнение вашего SELECT-запроса — ваш лучший помощник.

Например, у нас есть пользователи с userType = «admin»

в нашей таблице пользователей, и мы хотим копировать только этих пользователей в нашу новую таблицу, вы можете легко сделать это, выполнив запрос:

INSERT INTO adminUsers SELECT * FROM adminUsers where userType="admin";

Круто, правда? Надеюсь, что я ответил на вопрос о том, как в MySql клонировать таблицу и скопировать из неё данные в новую.

mysql — Невозможно создать таблицу, но таблица не существует

Просто добавлю свое решение, так как у меня была аналогичная проблема.

  • Воссоздайте таблицу с той же спецификацией внешнего ключа, но с другим именем, которое раньше использовалось для таблицы.
  • Удалить результирующую таблицу (также будет удален исходный потерянный внешний ключ)
  • Воссоздать таблицу с исходным внешним ключом или без него

Я столкнулся с неприятной ситуацией, когда оператор ALTER TABLE завершился неудачно из-за того, что внешний ключ не был удален ранее. Это привело к некоторым несоответствиям в словаре данных InnoDB (вероятно, из-за http://bugs.mysql.com/bug.php?id=58215).

Связанный вопрос здесь: https://stackoverflow.com/questions/16857451/error-in-foreign-key-constraint-on-a-droped-table

 mysql> ALTER TABLE `visits` CHANGE COLUMN `variation_visitor_id` ` Variation_visitor_id` INT(11) NOT NULL ;
 

Ошибка при переименовании ‘./db/#sql-482c_8448f’ в ‘./db/visits’ (ошибка: 150)

 mysql> SHOW ENGINE INNODB STATUS;
Ошибка в ограничении внешнего ключа таблицы db/visits:
 FOREIGN KEY (`variation_visitor_id`) ССЫЛКИ `variations_visitors` (`id`) ПРИ УДАЛЕНИИ НЕТ ДЕЙСТВИЙ ПРИ ОБНОВЛЕНИИ НЕТ ДЕЙСТВИЙ
) ДВИГАТЕЛЬ = InnoDB НАБОР ШИМОВ ПО УМОЛЧАНИЮ = utf8
Не удается найти индекс в ссылочной таблице, где
столбцы, на которые ссылаются, отображаются как первые столбцы или типы столбцов
в таблице и ссылочной таблице не совпадают для ограничения. 
Обратите внимание, что тип внутренней памяти ENUM и SET изменился в
таблицы, созданные с >
= InnoDB-4.1.12, и такие столбцы в старых таблицах нельзя ссылаться на такие столбцы в новых таблицах. См. http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html. для правильного определения внешнего ключа.

Поскольку мне не удалось восстановить таблицу #sql-482c_8448f для посещений, я решил повторно импортировать ее из резервной копии, сделанной непосредственно перед изменением. Однако это не удалось. При расследовании:

  • Ограничение было удалено из INFORMATION_SCHEMA.TABLE_CONSTRAINTS и INFORMATION_SCHEMA.STATISTICS
  • Но ограничение по-прежнему было видно в INFORMATION_SCHEMA.INNODB_SYS_FOREIGN;
  • Таблица не существовала, поэтому я не мог удалить внешний ключ
  • Мне не удалось создать таблицу без ошибок
 mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN WHERE;
+-----------------------------------+------------+- -----------------------+--------+------+
| ID | FOR_NAME | REF_NAME | N_COLS | ТИП |
+-----------------------------------+------------+- -----------------------+--------+------+
| db/fk_visits_variations_visitors1 | дБ/посещения | БД/вариации_посетителей | 1 | 48 |
+-----------------------------------+------------+- -----------------------+--------+------+
 

Попытка воссоздать таблицу без внешнего ключа вызвала ошибку 150

 mysql>
УСТАНОВИТЬ UNIQUE_CHECKS = 0;
УСТАНОВИТЬ FOREIGN_KEY_CHECKS = 0;
CREATE TABLE `посещения` (
  `id` INT(11) НЕ NULL AUTO_INCREMENT ,
  `variation_visitor_id` INT(11) NOT NULL,
  ПЕРВИЧНЫЙ КЛЮЧ (`id`),
) ДВИГАТЕЛЬ = InnoDB НАБОР ШИМОВ ПО УМОЛЧАНИЮ = utf8;
УСТАНОВИТЬ FOREIGN_KEY_CHECKS = 1;
УСТАНОВИТЬ UNIQUE_CHECKS = 1;
ОШИБКА 1005 (HY000) в строке 26: не удается создать таблицу "db. visits" (номер ошибки: 150)
mysql> SHOW ENGINE INNODB STATUS;
Ошибка в ограничении внешнего ключа таблицы db/visits:
в таблице нет индекса, который содержал бы
столбцы в качестве первых столбцов или типы данных в
таблицы не совпадают с таблицами в ссылочной таблице
или один из столбцов ON ... SET NULL объявлен NOT NULL. Ограничение:
,
  ОГРАНИЧЕНИЕ "fk_visits_variations_visitors1" ВНЕШНИЙ КЛЮЧ ("variation_visitor_id") ССЫЛКИ "variations_visitors" ("id") НА УДАЛЕНИЕ НЕТ ДЕЙСТВИЙ НА ОБНОВЛЕНИЕ НЕТ ДЕЙСТВИЙ
 

Попытка создать его вызвала ошибку 121

 mysql>
УСТАНОВИТЬ UNIQUE_CHECKS = 0;
УСТАНОВИТЬ FOREIGN_KEY_CHECKS = 0;
CREATE TABLE `посещения` (
  `id` INT(11) НЕ NULL AUTO_INCREMENT ,
  `variation_visitor_id` INT(11) NOT NULL,
  ПЕРВИЧНЫЙ КЛЮЧ (`id`),
  КЛЮЧ `fk_visits_variations_visitors1` (`variation_visitor_id`),
  ОГРАНИЧЕНИЕ `fk_visits_variations_visitors1` ВНЕШНИЙ КЛЮЧ (`variation_visitor_id`) ССЫЛКИ `variations_visitors` (`id`) НА УДАЛЕНИЕ НЕТ ДЕЙСТВИЙ НА ОБНОВЛЕНИЕ НЕТ ДЕЙСТВИЙ
) ДВИГАТЕЛЬ = InnoDB НАБОР ШИМОВ ПО УМОЛЧАНИЮ = utf8;
УСТАНОВИТЬ FOREIGN_KEY_CHECKS = 1;
УСТАНОВИТЬ UNIQUE_CHECKS = 1;
ОШИБКА 1005 (HY000) в строке 26: не удается создать таблицу "db. visits" (номер ошибки: 121)
mysql> SHOW ENGINE INNODB STATUS;
Ошибка при создании ограничения внешнего ключа для таблицы `db`.`visits`.
Ограничение внешнего ключа с именем `db`.`fk_visits_variations_visitors1`
уже существует. (Обратите внимание, что внутренне InnoDB добавляет «имя базы данных»
перед определяемым пользователем именем ограничения.)
Обратите внимание, что системные таблицы FOREIGN KEY InnoDB хранят
имена ограничений нечувствительны к регистру, с
Стандартная сортировка MySQL latin1_swedish_ci. Если вы
создавать таблицы или базы данных, имена которых отличаются только
> регистр символов, затем коллизии в ограничении
имена могут встречаться. Обходной путь: назовите свои ограничения
явно с уникальными именами.
 

В конце концов я использовал новое имя внешнего ключа. Я не ожидал, что это сработает, но это позволило создать таблицу.

 MySQL>
УСТАНОВИТЬ UNIQUE_CHECKS = 0;
УСТАНОВИТЬ FOREIGN_KEY_CHECKS = 0;
CREATE TABLE `посещения` (
  `id` INT(11) НЕ NULL AUTO_INCREMENT ,
  `variation_visitor_id` INT(11) NOT NULL,
  ПЕРВИЧНЫЙ КЛЮЧ (`id`),
  KEY `fk_visits_variations_visitors2` (`variation_visitor_id`),
  ОГРАНИЧЕНИЕ `fk_visits_variations_visitors2` ВНЕШНИЙ КЛЮЧ (`variation_visitor_id`) ССЫЛКИ `variations_visitors` (`id`) НА УДАЛЕНИЕ НЕТ ДЕЙСТВИЙ НА ОБНОВЛЕНИЕ НЕТ ДЕЙСТВИЙ
) ДВИГАТЕЛЬ = InnoDB НАБОР ШИМОВ ПО УМОЛЧАНИЮ = utf8;
УСТАНОВИТЬ FOREIGN_KEY_CHECKS = 1;
УСТАНОВИТЬ UNIQUE_CHECKS = 1;
 

Простое удаление таблицы после удаления ошибочной записи в INFORMATION_SCHEMA. INNODB_SYS_FOREIGN, что позволяет импортировать исходное имя внешнего ключа.

Как получить размер таблицы в MySQL

Как и большинство реляционных баз данных, MySQL предоставляет полезные метаданные о самой базе данных. В то время как большинство других баз данных относятся к этой информации как к каталогу , официальная документация MySQL ссылается на метаданные INFORMATION_SCHEMA как таблицы .

Независимо от названия, важна информация, предоставляемая этими таблицами INFORMATION_SCHEMA . Все, от представлений и user_privilieges до столбцов и таблиц , можно найти в INFORMATION_SCHEMA . Для наших целей нас особенно интересуют метаданные таблиц , которые мы можем запросить, чтобы фактически извлечь размер различных таблиц в системе.

Как видно из официальной документации, INFORMATION_SCHEMA.TABLES содержит около 20 столбцов, но для определения объема дискового пространства, используемого таблицами, мы сосредоточимся, в частности, на двух столбцах: DATA_LENGTH и INDEX_LENGTH .

  • DATA_LENGTH — длина (или размер) всех данных в таблице (в байтах ).
  • INDEX_LENGTH — это длина (или размер) индексного файла для таблицы (также в байтах ).

Вооружившись этой информацией, мы можем выполнить запрос, который выведет список всех таблиц в определенной базе данных вместе с дисковым пространством (размером) каждой из них. Мы можем даже немного поизобретать и преобразовать значения нормального размера из байт во что-то более полезное и понятное для большинства людей, например мегабайта .

 ВЫБЕРИТЕ
  TABLE_NAME КАК `Таблица`,
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Размер (МБ)`
ОТ
  information_schema.TABLES
ГДЕ
  TABLE_SCHEMA = "книжный магазин"
СОРТИРОВАТЬ ПО
  (DATA_LENGTH + INDEX_LENGTH)
ДЕСК;
 

В этом примере, используя базу данных книжного магазина , мы объединяем DATA_LENGTH и INDEX_LENGTH как байта , а затем дважды делим их на 1024 . , чтобы преобразовать в килобайта , а затем мегабайта . Наш результирующий набор будет выглядеть примерно так:

 +----------------------------------+--- --------+
| Таблица | Размер (МБ) |
+----------------------------------+------------+
| книга | 267 |
| автор | 39|
| сообщение | 27 |
| кеш | 24 |
...
 

Если вас не интересуют все таблицы в базе данных и вам нужен только размер конкретной таблицы, вы можете просто добавить AND TABLE_NAME = "your_table_name" к предложению WHERE . Здесь нам нужна информация только о таблице book :

 SELECT
  TABLE_NAME КАК `Таблица`,
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Размер (МБ)`
ОТ
  information_schema.TABLES
ГДЕ
    TABLE_SCHEMA = "книжный магазин"
  И
    TABLE_NAME = "книга"
СОРТИРОВАТЬ ПО
  (DATA_LENGTH + INDEX_LENGTH)
ДЕСК;
 

Результат, как и ожидалось, сейчас:

 +-------+-----------+
| Таблица | Размер (МБ) |
+-------+-----------+
| книга | 267 |
+-------+-----------+
1 ряд в наборе (0,00 сек)
 

Список всех размеров таблиц из ВСЕХ баз данных

Если вы столкнулись с проблемой, когда ваша база данных увеличивается в размере, но вы не знаете, какая таблица является виновником, может быть полезно запросить размер всех таблицы в пределах всех баз данных во всей системе.