1

さて、私はここで私が取り組んでいるデータベースのいくつかの制約を書いています、そして私は私が次のことをすることができるかどうか疑問に思っていました:

ALTER TABLE Course
ADD CONSTRAINT cs_level
CHECK (clevel in ('P','I','II','III'))

...これの代わりに:

ALTER TABLE Course
ADD CONSTRAINT cs_level
CHECK (clevel = 'P' OR clevel = 'I' OR clevel = 'II' OR clevel = 'III')
4

3 に答える 3

2

残念ながら、MySQLはCHECK制約をサポートしていません。それらは解析されますが、無視されます。

リファレンスマニュアルから

CHECK句は解析されますが、すべてのストレージエンジンで無視されます。

行を挿入する前に、このチェック制約をビジネスロジックに配置してみてください。

Joe Celkoが彼の著書で述べているように、JoeCelkoのSQLfor Smarties

小さな「疑似SQL」製品がオープンソースの分野に登場しました。MySQLなどの言語は、構文とセマンティクスが標準SQLとは大きく異なり、多くの場合、借用された予約語を使用するファイルシステムインターフェイスにすぎません。

確かに少し厳しいですが、MySQLは一連の標準SQL機能をサポートしていないため、ある意味で彼は正しいです。

于 2010-03-06T23:05:48.303 に答える
2

MySQLがCHECK制約を強制したとしても、私はまだCOURSE_LEVELテーブルを作成しています:

  • COURSE_LEVEL_CODE、VARCHAR(3)、主キー
  • COURSE_LEVEL_DESCRIPTION、VARCHAR(120)

COURSE...そして、テーブル、clevel列にFOREIGNKEY制約を作成します。

ALTER TABLE COURSE
ADD FOREIGN KEY (clevel) REFERENCES COURSE_LEVEL(COURSE_LEVEL_CODE)
于 2010-03-06T23:23:20.570 に答える
0

MySQLは外部キー制約のみをサポートし、チェック制約はサポートしません。その構文をどこから入手したとしても、それはMySQLのマニュアルではありませんでした。

于 2010-03-06T23:05:22.747 に答える