JQuery загружается, метод обеспечивают ajax функциональность, эквивалентную направляющим replace_html метод?

Воспроизведение ошибки:

mysql> create table dealers (dealer_id int primary key);
mysql> create table models (model_id int primary key);
mysql> create table my_table (dealer_id int, model_id int, model_year int, allocation_week int, primary key (dealer_id, model_id, model_year, allocation_week));

mysql> alter table my_table add foreign key (dealer_id) references dealers(dealer_id);

mysql> alter table my_table add foreign key (model_id) references models (model_id);

Теперь таблица выглядит следующим образом. Он неявно создал индекс для model_id, но не должен был делать это для dealer_id, потому что он был в состоянии «заимствовать» использование индекса PK для самого левого столбца.

mysql> show create table my_table\G

CREATE TABLE `my_table` (
  `dealer_id` int(11) NOT NULL DEFAULT '0',
  `model_id` int(11) NOT NULL DEFAULT '0',
  `model_year` int(11) NOT NULL DEFAULT '0',
  `allocation_week` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`dealer_id`,`model_id`,`model_year`,`allocation_week`),
  KEY `model_id` (`model_id`),
  CONSTRAINT `my_table_ibfk_1` FOREIGN KEY (`dealer_id`) REFERENCES `dealers` (`dealer_id`),
  CONSTRAINT `my_table_ibfk_2` FOREIGN KEY (`model_id`) REFERENCES `models` (`model_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

Поэтому, когда я уронил PK, он не может этого сделать, потому что это сломало бы FK:

mysql> alter table my_table drop primary key;
ERROR 1025 (HY000): Error on rename of './test/#sql-337_18' to './test/my_table' (errno: 150 - Foreign key constraint is incorrectly formed)

Решение: добавьте вторичный индекс для dealer_id, тогда вы можете бросьте ПК.

Вы можете сделать все эти изменения в одном ALTER:

mysql> alter table my_table 
    add key (dealer_id), 
    drop primary key, 
    add column id int auto_increment primary key first;

Результат:

mysql> show create table my_table\G

CREATE TABLE `my_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dealer_id` int(11) NOT NULL DEFAULT '0',
  `model_id` int(11) NOT NULL DEFAULT '0',
  `model_year` int(11) NOT NULL DEFAULT '0',
  `allocation_week` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `model_id` (`model_id`),
  KEY `dealer_id` (`dealer_id`),
  CONSTRAINT `my_table_ibfk_1` FOREIGN KEY (`dealer_id`) REFERENCES `dealers` (`dealer_id`),
  CONSTRAINT `my_table_ibfk_2` FOREIGN KEY (`model_id`) REFERENCES `models` (`model_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
6
задан pez_dispenser 15 May 2009 в 15:59
поделиться

1 ответ

Конечный результат во многом такой же, но они работают совсем по-другому. Метод загрузки означает, что ваш сервер возвращает фрагмент HTML, а jQuery вставляет его на страницу. Метод replace_html означает, что ваш сервер возвращает JavaScript вместо HTML, и этот JavaScript выполняется для вставки фрагмента HTML на страницу. Итоговый HTML-код будет таким же, но трафик между клиентом и сервером сильно отличается.

6
ответ дан 17 December 2019 в 02:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: