Может кто-то объяснять внешние ключи MySQL

Если Вы хотите такую гранулярность, Вы находитесь в неправильном месте (в пространстве пользователя).

Помнят, что, если Вы находитесь в пространстве пользователя, Ваше время не всегда точно.

планировщик может запустить Ваш поток (или приложение) и запланировать его, таким образом, Вы зависите планировщиком ОС.

при поиске чего-то точного необходимо пойти: 1) В пространстве ядра (как драйверы) 2) Выбирают RTOS.

Так или иначе, если Вы ищете некоторую гранулярность (но помнят проблему с пространством пользователя) смотрят на функцию Функции и QueryPerformanceFrequency QueryPerformanceCounter в MSDN.

5
задан Ross 13 November 2009 в 17:45
поделиться

5 ответов

Как выполнить преобразование? Возможно, вы забыли связать таблицу стилей XSLT с XML-документом, используя:

<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>

в начале XML-документа. Подробнее здесь .

Это можно сделать во время создания таблицы или с помощью оператора ALTER. Подробности смотрите в документации. Как указывали другие, обратите внимание, что обе таблицы должны быть таблицами InnoDB (ограничения внешнего ключа не поддерживаются механизмом хранения MyISAM, который их игнорирует).

С или без ограничения FK запрос может выглядеть примерно так:

SELECT * 
FROM CUSTOMER C, ORDER O
WHERE C.ID = O.CUSTOMER_ID
AND O.ID = ...

Ограничение FK «просто» гарантирует, что столбец CUSTOMER_ID таблицы ORDER не может содержать значений, которых нет в таблице CUSTOMER (кроме потенциально NULL), и, таким образом, обеспечивает ссылочную целостность.

7
ответ дан 18 December 2019 в 13:15
поделиться

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

Внешний ключ (FK) - это поле в ТаблицеB, которое содержит то же значение, что и поле, обычно первичный ключ (PK), в TableA. Итак, в псевдокоде:

Create TableA:
A_id is PK,
somefield,
anotherfield

Create TableB:
B_id is PK,
A_id is FK to TableA,
farmfield,
outstandingfield

Create constraint on TableB:
In TableB A_id references TableA(A_id),
Don't allow updates to TableA(A_id),
Delete records from TableB that have the same A_id as deleted records in TableA

Затем, когда вы выполняете запрос, который включает обе таблицы, вы можете присоединиться к своему FK:

SELECT a.somefield, b.farmfield FROM TableA a JOIN TableB b ON (a.A_id=B.A_id);

И когда вы удаляете из TableA, вам не нужно удалять из TableB. Это произойдет автоматически, потому что в ограничении сказано: «Удалите записи из TableB, которые имеют тот же A_id, что и удаленные записи в TableA».

И когда вы вставляете в TableB, вам нужно будет либо указать действительный A_id, либо, в зависимости от как вы определили столбец, оставьте A_id = NULL .

3
ответ дан 18 December 2019 в 13:15
поделиться

Внешние ключи в mysql доступны только для определенных механизмов баз данных. MyISAM не является одним из них.

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

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

select * from customer, order where order.customer_id = customer.id and order.id = 5

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

Мои общие мысли о внешних ключах заключаются в том, что они хороши, но не могут использоваться в MySQL, и что Postgres обрабатывает их намного лучше.

1
ответ дан 18 December 2019 в 13:15
поделиться

http: // dev .mysql.com / doc / refman / 5.1 / ru / innodb-foreign-key-constraints.html

Первый результат при поиске «внешнего ключа mysql» в Google. В комплекте с примерами.

-1
ответ дан 18 December 2019 в 13:15
поделиться

Внешние ключи , а не автоматически связываются общими именами. Одна вещь, которая часто сбивает людей с толку относительно внешних ключей MySQL, заключается в том, что механизм таблиц MyISAM (по умолчанию) вообще не поддерживает внешние ключи. Вместо того, чтобы выдавать сообщение об ошибке при добавлении внешнего ключа в таблицу MyISAM, MySQL молча игнорирует определение внешнего ключа. Внешние ключи поддерживаются механизмом таблиц InnoDB, поэтому вы должны убедиться, что все таблицы, в которые вы хотите добавить внешние ключи, относятся к типу таблиц InnoDB. Чтобы добавить внешний ключ, вы делаете что-то вроде этого:

alter table fk_table add foreign key (fk_column) references pk_table (pk_column);
4
ответ дан 18 December 2019 в 13:15
поделиться
Другие вопросы по тегам:

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