【发布时间】:2016-05-03 17:52:19
【问题描述】:
我将 MySQL 与 NodeJS 一起使用,并且我有一个如下所示的表:
CREATE TABLE IF NOT EXISTS `keycomponent`.`Transaction` (
`TransactionID` INT NOT NULL,
`TransactionDate` DATE NOT NULL,
`Amount` MEDIUMTEXT NOT NULL,
`CreationDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`TransactionDescriptionPK` INT NOT NULL,
`FilePK` VARCHAR(255) NOT NULL,
PRIMARY KEY (`TransactionID`),
UNIQUE INDEX `TransactionID_UNIQUE` (`TransactionID` ASC),
INDEX `FilePK_idx` (`FilePK` ASC),
INDEX `TransactionDescriptionPK_idx` (`TransactionDescriptionPK` ASC),
CONSTRAINT `TransactionDescriptionPK`
FOREIGN KEY (`TransactionDescriptionPK`)
REFERENCES `keycomponent`.`TransactionDescription` (`TransactionDescriptionPK`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `FilePK`
FOREIGN KEY (`FilePK`)
REFERENCES `keycomponent`.`File` (`Filename`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
它包含两个外键,当我尝试将值插入另一个表时出现此错误
Error: ER_NO_DEFAULT_FOR_FIELD: Field 'TransactionDescriptionPK' doesn't have a default value
该列不应该自动从另一个表中获取主键吗?
我的查询'
'INSERT INTO Transaction '+
'SET TransactionID = ?, TransactionDate = ?, Amount = ?, TransactionDescriptionPK = ?, FilePK = ?',
[transId,date,amount,"primary key to the TransactionDescription table","primary key to the File table"]
【问题讨论】:
-
这样不行。约束不是为了向程序提供数据,它们是为了防止程序/用户将无效数据插入表中。这就是为什么它们被称为约束。您需要拉取、插入或更新代码中的值。