У меня была та же проблема с ALTER TABLE ADD FOREIGN KEY
.
Через час я обнаружил, что эти условия должны быть выполнены, чтобы не получить ошибку 150:
ALTER TABLE
. ENGINE=InnoDB
. Другие механизмы хранения молча игнорируют определения внешних ключей, поэтому они не возвращают никаких ошибок или предупреждений, но ограничение FK не сохраняется. PRIMARY KEY
или UNIQUE KEY
. REFERENCES Parent(a,b,c)
, то PK родителя не должен быть определен в столбцах в порядке (a,c,b)
. UNSIGNED
, обязательно определите UNSIGNED
для соответствующего столбца в поле Child table. Исключение: длина строк может быть разной. Например, VARCHAR(10)
может ссылаться на VARCHAR(20)
или наоборот. SELECT COUNT(*) FROM Child LEFT OUTER JOIN Parent ON Child.FK = Parent.PK
WHERE Parent.PK IS NULL;
Это должно возвращать ноль (0) непревзойденные значения. Очевидно, что этот запрос является общим примером; вы должны подставить свои имена таблиц и имена столбцов. TEMPORARY
. PARTITIONED
. ON DELETE SET NULL
, то столбец FK должен быть нулевым. Надеюсь, что это поможет.
В 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» соответственно.
blockquote>
Чтобы увеличить ответ Райана с помощью руководства TypeScript Do's and Don'ts :
Никогда не используйте типы Number, String, Boolean или Object , Эти типы относятся к не примитивным объектам в коробке, которые почти никогда не используются надлежащим образом в JavaScript-коде.
/* WRONG */ function reverse(s: String): String;
Используйте типы, число и логические типы.
blockquote >/* OK */ function reverse(s: string): string;