使用“艺术家”上的COUNT汇总可查看NameOfArtist的行数。将计数存储在一个名为artist_count的变量中。
如果artist_count为零,则在Artists中插入新行。选择LAST_INSERT_ID()到变量中。
如果artist_count为1,则查找ArtistID并将其存储在变量中。
在“专辑”表中插入新行。




CREATE PROCEDURE AddAlbum (
  NameOfArtist varchar(50),
  AlbumName varchar(50)
)
BEGIN
  DECLARE artist_count INT;
  DECLARE artist_id INT;

  SELECT COUNT(ArtistName) INTO artist_count
  FROM Artists WHERE ArtistName = NameOfArtist;

  IF artist_count = 0
    THEN INSERT INTO Artists (ArtistName)
       VALUES(NameOfArtist);

       SELECT LAST_INSERT_ID() INTO artist_id;
  ELSEIF artist_count = 1
    THEN SELECT ArtistID INTO artist_id FROM Artists
         WHERE ArtistName = NameOfArtis;
  END IF;

  INSERT INTO Albums (Title)
    VALUES (AlbumName);
END;
//


这是我调用过程时遇到的错误。我不知道。

ERROR 1364 (HY000): Field 'ArtistID' doesn't have a default value

最佳答案

该错误应该是不言自明的。 Artists表的ArtistID列没有任何默认值,因此尝试仅在其中插入ArtistName(对于artist_count = 0情况)会失败。

您可能应该将ArtistID列配置为AUTO_INCREMENT,因为您不必担心值是什么,只要它们是唯一的即可。

关于mysql - 错误1364(HY000):使用存储过程时,字段“ArtistID”没有默认值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14509651/

10-13 02:12