Создать таблицу — онлайн 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 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 сек)
Список всех размеров таблиц из ВСЕХ баз данных
Если вы столкнулись с проблемой, когда ваша база данных увеличивается в размере, но вы не знаете, какая таблица является виновником, может быть полезно запросить размер всех таблицы в пределах всех баз данных во всей системе.