У меня есть этот код MySQL для создания двух таблиц, которые будут иметь однонаправленные отношения для многих (настроенных с помощью hybernate):
DROP SCHEMA IF EXISTS 'msmail-database';
CREATE SCHEMA 'msmail-database';
use 'msmail-database';
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS 'mail';
CREATE TABLE 'mail' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'usertoken' varchar(128) DEFAULT NULL,
'send_to' varchar(128) DEFAULT NULL,
'subject' varchar(128) DEFAULT NULL,
'content' varchar(128) DEFAULT NULL,
PRIMARY KEY ('id'),
UNIQUE KEY 'TITLE_UNIQUE' ('title'),
ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS 'review';
CREATE TABLE 'file' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'name' varchar(256) DEFAULT NULL,
'path' varchar(256) DEFAULT NULL,
'mail_id' int(11) DEFAULT NULL,
PRIMARY KEY ('id'),
KEY 'FK_MAIL_ID_idx' ('mail_id'),
CONSTRAINT 'FK_MAIL'
FOREIGN KEY ('mail_id')
REFERENCES 'mail' ('id')
ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
SET FOREIGN_KEY_CHECKS = 1;
Тем не менее, я получаю сообщение об ошибке при попытке выполнить это из почты CREATE Table, где он говорит в строке с сообщением ON DELETE NO ACTION ON UPDATE NO ACTION - что это не допустимый ввод, и он не должен быть в этой строке.
Вы можете пропустить указание ON DELETE NO ACTION, а также ON UPDATE NO ACTION, поскольку это не требуется вообще, если вы не хотите никаких действий для этих событий.
Значение по умолчанию: NO ACTION, если оно не указано для события ON DELETE или ON UPDATE, поэтому вы можете опустить его и проверить.
Вы использовали Tab или любой другой символ между этими двумя? В качестве другой возможности, я думаю, она читает как одну команду, так и не понимает ее. Поместите оба на отдельные линии и снова проверьте.
Я думаю, что конечная запятая вызывает ошибку, попробуйте удалить ее:
UNIQUE KEY 'TITLE_UNIQUE' ('title'), <-- remove comma
ON DELETE NO ACTION ON UPDATE NO ACTION