0
  1. 使用 Artists 上的 COUNT 聚合来查看 NameOfArtist 存在多少行。将计数存储在名为 artist_count 的变量中。
  2. 如果 Artist_count 为零,则在 Artists 中插入一个新行。选择 LAST_INSERT_ID() 到一个变量中。
  3. 如果 Artist_count 为 1,则查找 ArtistID 并将其存储在变量中。
  4. 在相册表中插入一个新行。

.

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
4

1 回答 1

1

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

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

于 2013-01-24T20:03:43.853 回答