私は3つのテーブルを作成しようとしています:
ユーザー
- ユーザー名
- ユーザーID
カテゴリー
- カテゴリー
- カテゴリID
- userID (ユーザー テーブルを参照)
経費
- 額
- 日にち
- 経費ID
- カテゴリ ID (カテゴリ テーブルを参照)は機能し ません!
- userID (ユーザーテーブルを参照)動作してい ません!
これが私のcreateステートメントのコードです。「ON DELETE ...」句を経費テーブルに追加するまで、すべてがうまくいきました。
private final static String createUsersTable =
"CREATE TABLE users ("+
"userID INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), "+
"username VARCHAR(255) NOT NULL UNIQUE " +
")";
private final static String createCategoriesTable =
"CREATE TABLE categories ("+
"categoryID INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), "+
"category VARCHAR(255) NOT NULL, " +
"userID INTEGER NOT NULL, " +
"FOREIGN KEY (userID) REFERENCES users (userID) ON DELETE CASCADE"+
")";
private final static String createExpensesTable =
"CREATE TABLE expenses ("+
"expenseID INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), "+
"amount INTEGER NOT NULL, "+
"date VARCHAR(255) NOT NULL, "+
"categoryID INTEGER, "+
"userID INTEGER NOT NULL, "+
"FOREIGN KEY (categoryID) REFERENCES categories (categoryID) ON DELETE SET NULL, "+
"FOREIGN KEY (userID) REFERENCES users (userID) ON DELETE CASCADE"+
")";
これは、テーブルを作成しようとしたときに発生する例外です。
java.sql.SQLSyntaxErrorException: 外部キー 'SQL110915104641092' は無効です。'削除規則の制限により、テーブルをテーブル ME.USERS の従属として定義できません。(リレーションシップにより、テーブルは複数のリレーションシップを介して指定されたテーブルに削除接続され、既存のリレーションシップの削除規則は SET NULL になります。) '。
SQL データベースに関する基本的な何かが欠けているに違いありません。何?