Почему машинописный шрифт имеет типы «заглавные буквы» и «нижний регистр»? [Дубликат]

У меня была та же проблема с ALTER TABLE ADD FOREIGN KEY.

Через час я обнаружил, что эти условия должны быть выполнены, чтобы не получить ошибку 150:

  1. Родитель таблица должна существовать до того, как вы определите внешний ключ для ее ссылки. Вы должны определить таблицы в правильном порядке: сначала родительскую таблицу, затем таблицу «Дети». Если обе таблицы ссылаются друг на друга, вы должны создать одну таблицу без ограничений FK, затем создать вторую таблицу, а затем добавить ограничение FK в первую таблицу с помощью ALTER TABLE.
  2. Обе таблицы должны поддерживать ограничения внешнего ключа, т. е. ENGINE=InnoDB. Другие механизмы хранения молча игнорируют определения внешних ключей, поэтому они не возвращают никаких ошибок или предупреждений, но ограничение FK не сохраняется.
  3. Обозначенные столбцы в родительской таблице должны быть самыми левыми столбцами ключа. Лучше, если ключ в родительском элементе PRIMARY KEY или UNIQUE KEY.
  4. Определение FK должно ссылаться на столбцы PK в том же порядке, что и определение PK. Например, если FK REFERENCES Parent(a,b,c), то PK родителя не должен быть определен в столбцах в порядке (a,c,b).
  5. Столбец PK в таблице родителя должен быть тем же типом данных, что и FK (столбцы) в таблице «Дети». Например, если столбец PK в родительской таблице равен UNSIGNED, обязательно определите UNSIGNED для соответствующего столбца в поле Child table. Исключение: длина строк может быть разной. Например, VARCHAR(10) может ссылаться на VARCHAR(20) или наоборот.
  6. Любые столбцы (строки) FK строкового типа должны иметь одинаковый набор символов и сопоставление в качестве соответствующих столбцов (столбцов) PK.
  7. Если в таблице «Дети» есть данные, каждое значение в столбце (столбцах) FK должно соответствовать значению в столбце (столбцах) столбца «Родительская таблица». Проверьте это с помощью запроса типа:
    SELECT COUNT(*) FROM Child LEFT OUTER JOIN Parent ON Child.FK = Parent.PK 
    WHERE Parent.PK IS NULL;
    
    Это должно возвращать ноль (0) непревзойденные значения. Очевидно, что этот запрос является общим примером; вы должны подставить свои имена таблиц и имена столбцов.
  8. Таблица родительских элементов и таблица «Дети» могут быть таблицей TEMPORARY.
  9. Ни родительская таблица, ни таблица «Дети» не могут быть a PARTITIONED.
  10. Если вы объявляете FK с опцией ON DELETE SET NULL, то столбец FK должен быть нулевым.
  11. Если вы объявляете имя ограничения для внешний ключ, имя ограничения должно быть уникальным во всей схеме, а не только в таблице, в которой определено ограничение.

Надеюсь, что это поможет.

40
задан MiMo 19 March 2013 в 02:53
поделиться

2 ответа

В JavaScript есть понятие типов primitive типов (число, строка и т. д.) и object (число, строка и т. д., которые проявляются во время выполнения). Тип TypeScript number и Number относятся к ним, соответственно. JavaScript обычно принуждает тип объекта к его примитивному эквиваленту или наоборот:

var x = new Number(34);
> undefined
x
> Number {}
x + 1
> 35

Системные правила типа TypeScript относятся к этому (раздел 3.7) следующим образом:

. Для определения отношений совместимости подтипов, супертипов и присваивания примитивные типы Number, Boolean и String рассматриваются как типы объектов с теми же свойствами, что и интерфейсы «Number», «Boolean» и «String» соответственно.

26
ответ дан T.J. Crowder 4 September 2018 в 09:08
поделиться

Чтобы увеличить ответ Райана с помощью руководства TypeScript Do's and Don'ts :

Никогда не используйте типы Number, String, Boolean или Object , Эти типы относятся к не примитивным объектам в коробке, которые почти никогда не используются надлежащим образом в JavaScript-коде.

/* WRONG */
function reverse(s: String): String;

Используйте типы, число и логические типы.

/* OK */
function reverse(s: string): string;
43
ответ дан Shaun Luttin 4 September 2018 в 09:08
поделиться
Другие вопросы по тегам:

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