Mysql Table Key - PullRequest
       6

Mysql Table Key

0 голосов
/ 09 декабря 2011

Может кто-нибудь сказать мне, в чем смысл строк KEY fk_pickup_method (pickup_method_id), KEY fk_deliv_method (delivery_method_id).Так как pickup_method и deliv_method не являются таблицами.Так что толку от этих строк.

CREATE TABLE `test` (
`idTest` int(11) NOT NULL AUTO_INCREMENT,
`Name` mediumtext NOT NULL,
`email` varchar(45) NOT NULL,
`password` varchar(45) NOT NULL,
`firstname` varchar(45) NOT NULL,
`lastname` varchar(45) NOT NULL,
`phone` bigint(20) unsigned NOT NULL,
`address_street` varchar(128) NOT NULL,
`address_apt` varchar(45) DEFAULT NULL,
`address_city` varchar(128) NOT NULL,
`address_state` varchar(2) NOT NULL,
`address_zip` int(11) NOT NULL,
`fax` bigint(20) unsigned DEFAULT NULL,
`account_balance` float NOT NULL DEFAULT '0',
`delivery_radius` float DEFAULT NULL,
`pickup_method_id` int(11) NOT NULL DEFAULT '0',
`delivery_method_id` int(11) NOT NULL,
`is_deleted` tinyint(1) NOT NULL DEFAULT '0',
`lat` float NOT NULL DEFAULT '0',
`lng` float NOT NULL DEFAULT '0',
`timezone` varchar(45) NOT NULL,
PRIMARY KEY (`idTest`),
UNIQUE KEY `phone_UNIQUE` (`phone`),
KEY `fk_pickup_method` (`pickup_method_id`),
KEY `fk_deliv_method` (`delivery_method_id`)
) 

Ответы [ 4 ]

4 голосов
/ 09 декабря 2011

Они являются ИНДЕКСАМИ в столбцах в (). Но поля не обязательно должны быть УНИКАЛЬНЫМИ.

Ищите {INDEX|KEY} в этой ссылке на документ MySQL .

3 голосов
/ 09 декабря 2011

Line KEY fk_pickup_method (pickup_method_id) определяет индекс с именем fk_pickup_method для столбца таблицы pickup_method_id.

Когда вы запустите EXPLAIN, в столбце possible_keys вы увидите имя индекса.

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

2 голосов
/ 09 декабря 2011

Это индексы в полях pickup_method_id и delivery_method_id.

Как mysql использует индексы: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

Имя fk_ указывает на намерение создателя создать внешний ключ. Но это не внешний ключ, и вам не нужно заботиться о ссылочной целостности.

Внешние ключи в MySQL (innodb): http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

0 голосов
/ 09 декабря 2011

Я предполагаю, что это были ограничения FOREIGN KEY и ссылки на другие таблицы.

Движок InnoDB создает индекс (если его нет), когда определено ограничение FOREIGN KEY.

Механизм MyISAM игнорирует ограничения FOREIGN KEY, но все равно создает индекс. Пример:

CREATE TABLE test 
( test_id int NOT NULL AUTO_INCREMENT,
  delivery_method_id int NOT NULL,
  PRIMARY KEY (test_id),
  FOREIGN KEY fk_deliv_method (delivery_method_id)
    REFERENCES delivery_method(delivery_method_id)
) ENGINE=MyISAM 
  DEFAULT CHARSET=utf8 ;

А потом:

SHOW CREATE TABLE test ;

CREATE TABLE `test` (
  `test_id` int(11) NOT NULL AUTO_INCREMENT,
  `delivery_method_id` int(11) NOT NULL,
  PRIMARY KEY (`test_id`),
  KEY `fk_deliv_method` (`delivery_method_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...