Spec-Zone .ru
спецификации, руководства, описания, API
|
MyISAM
кInnoDB
AUTO_INCREMENT
Обработка в InnoDB
InnoDB
и FOREIGN KEY
ОграниченияInnoDB
Сжатые ТаблицыInnoDB
Управление формата файлаInnoDB
Столбцы Переменной длины хранилищ Создать InnoDB
таблица, используйте CREATE TABLE
оператор без любых специальных пунктов. Прежде, Вы нуждались ENGINE=InnoDB
пункт, но не больше теперь, когда InnoDB
механизм хранения значения по умолчанию. (Вы могли бы все еще использовать тот пункт, если Вы планируете
использовать mysqldump или репликацию, чтобы воспроизвести CREATE TABLE
оператор на сервере рабочий MySQL 5.1 или ранее, где механизм
хранения значения по умолчанию MyISAM
.)
-- Default storage engine = InnoDB.CREATE TABLE t1 (a INT, b CHAR (20), PRIMARY KEY (a));-- Backwards-compatible with older MySQL.CREATE TABLE t2 (a INT, b CHAR (20), PRIMARY KEY (a)) ENGINE=InnoDB;
В зависимости от установки файла на таблицу, InnoDB
составляет каждую таблицу, и
связанный первичный ключ индексируют или в системной табличной области, или в
отдельной табличной области (представленный.ibd
файлом) для каждой таблицы. MySQL создает t1.frm
и t2.frm
файлы в test
каталог в соответствии с каталогом базы данных MySQL. Внутренне,
InnoDB
добавляет запись для таблицы к ее собственному словарю данных. Запись
включает имя базы данных. Например, если test
база данных в который t1
таблица составляется, запись для 'test/t1'
. Это
означает, что можно составить таблицу того же самого имени t1
в некоторой другой
базе данных, и именах таблиц не сталкиваются внутри InnoDB
.
Видеть свойства этих таблиц, проблемы a SHOW
TABLE STATUS
оператор:
SHOW TABLE STATUS FROM test LIKE 't%';
В выводе состояния Вы видите, что свойство формата строки этих первых таблиц Compact
. Хотя та установка прекрасна для основного экспериментирования, чтобы
использовать в своих интересах самое мощное InnoDB
технические характеристики, Вы
быстро дипломируете к использованию других форматов строки такой как Dynamic
и Compressed
. Используя те значения требует
немного установки сначала:
set global innodb_file_per_table=1;set global innodb_file_format=barracuda;CREATE TABLE t3 (a INT, b CHAR (20), PRIMARY KEY (a)) row_format=dynamic;CREATE TABLE t4 (a INT, b CHAR (20), PRIMARY KEY (a)) row_format=compressed;
Всегда устанавливайте первичный
ключ для каждого InnoDB
таблица, определяя столбец или столбцы, что:
Ссылаются самыми важными запросами.
Никогда не оставляются незаполненные.
Никогда не имейте двойные значения.
Редко, если когда-либо изменяют значение, однажды вставленное.
Например, в таблице, содержащей информацию о людях, Вы не создали бы первичный ключ на (firstname,
lastname)
потому что больше чем у одного человека может быть то же самое имя, у некоторых людей есть
пустые фамилии, и иногда люди меняют свои имена. С очень многими ограничениями часто нет очевидного набора
столбцов, чтобы использовать в качестве первичного ключа, таким образом, Вы создаете новый столбец с числовым
ID, чтобы служить всеми или частью первичного ключа. Можно объявить столбец
автоприращения так, чтобы возрастающие значения были заполнены в автоматически, поскольку строки
вставляются:
-- The value of ID can act like a pointer between related items in different tables.CREATE TABLE t5 (id INT AUTO_INCREMENT, b CHAR (20), PRIMARY KEY (id));-- The primary key can consist of more than one column. Any autoinc column must come first.CREATE TABLE t6 (id INT AUTO_INCREMENT, a INT, b CHAR (20), PRIMARY KEY (id,a));
Хотя таблица работает правильно без Вас определяющий первичный ключ,
первичный ключ связан со многими аспектами производительности и является решающим аспектом проекта для любой
большой или часто используемой таблицы. Сделайте привычку ко всегда определению того в CREATE TABLE
оператор. (Если Вы составляете таблицу, данные загрузки, и затем
делаете ALTER TABLE
чтобы добавить первичный ключ позже, та работа намного медленнее
чем определение первичного ключа, составляя таблицу.)