0
  1. Artists の COUNT 集計を使用して、NameOfArtist に存在する行数を確認します。カウントを artist_count という変数に格納します。
  2. artist_count がゼロの場合、Artists に新しい行を挿入します。LAST_INSERT_ID() を変数に選択します。
  3. artist_count が 1 の場合、ArtistID を検索して変数に格納します。
  4. Albums テーブルに新しい行を挿入します。

.

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のデフォルト値がないため、(この場合) だけを挿入しようとすると失敗します。ArtistIDArtistNameartist_count = 0

値が一意である限り、値が何であるかは気にしないため、おそらくArtistID列を として構成する必要があります。AUTO_INCREMENT

于 2013-01-24T20:03:43.853 に答える