2
我有一張包含藝術家名稱和流派作爲外鍵的表歌,但它們不是藝術家和流派表中的主鍵。我希望將數據輸入到歌曲表中並自動填充到另外兩個表中,除非我的邏輯錯誤。因此,這是歌曲表:MySQL將數據插入表中,其外鍵不是參考表的主鍵
CREATE TABLE IF NOT EXISTS `project`.`song` (
`idsong` INT(11) NOT NULL AUTO_INCREMENT ,
`artistname` VARCHAR(45) NULL DEFAULT NULL ,
`title` VARCHAR(45) NULL DEFAULT NULL ,
`genre` VARCHAR(15) NULL DEFAULT NULL ,
`year` INT(4) NULL DEFAULT NULL ,
`lyrics` TEXT NULL DEFAULT NULL ,
`url` VARCHAR(45) NULL DEFAULT NULL ,
PRIMARY KEY (`idsong`) ,
INDEX `title` (`title` ASC) ,
INDEX `genre_idx` (`genre` ASC) ,
INDEX `artistname_idx` (`artistname` ASC) ,
CONSTRAINT `genre`
FOREIGN KEY (`genre`)
REFERENCES `project`.`genres` (`genre`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `artistname`
FOREIGN KEY (`artistname`)
REFERENCES `project`.`artist` (`artistname`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
和其他兩個表:
CREATE TABLE IF NOT EXISTS `project`.`genres` (
`genre` VARCHAR(15) NOT NULL ,
PRIMARY KEY (`genre`))
ENGINE = InnoDB
CREATE TABLE IF NOT EXISTS `project`.`artist` (
`idartist` INT(11) NOT NULL AUTO_INCREMENT ,
`artistname` VARCHAR(45) NULL DEFAULT NULL ,
`bio` TEXT NULL DEFAULT NULL ,
PRIMARY KEY (`idartist`) ,
INDEX `artistname` (`artistname` ASC))
ENGINE = InnoDB
這是我的查詢是不工作:
INSERT INTO song (artist, title, genre, year, lyrics, url)
VALUES
('Jason Aldean', 'Night Train', 'Country', '2012', 'This is the song lyrics', '9ADpkg1dkDU');
任何想法有什麼不對?我是個新手,所以我敢肯定,這是用戶:)
那麼如何添加觸發器?我用MySQL Workbench創建了模型,直接將它導入到mysql服務器。或者我應該將查詢分解爲單獨的表格嗎?謝謝! – user1781482
您需要從MySQL文檔中研究觸發器,這很容易,只需考慮爲每個新行調用的存儲過程即可。如果你可以分解你的查詢,這也可以完成一些工作,但是你會遇到併發問題:想想兩個腳本可以同時插入同一個新的藝術家。 –
如何在歌曲表中插入值時,如何在藝術家表格中首先添加藝術家名稱的觸發器? – user1781482