1

您可以在 MySQL 存储过程中使用 IF 语句来控制所采取的操作。语法如下:

 IF condition THEN ... do something ... END IF;

IF 语句中的条件可以类似于 CASE 语句中的条件。有关更多信息,请查看 MySQL 的网站。

您还可以在执行插入后检索自动增量 ID。只需使用以下查询:

 SELECT LAST_INSERT_ID() into artist_id;

对于这个项目,创建一个名为 AddAlbum 的新过程。它至少需要两个参数 - NameOfArtist 和 AlbumName(就像在上一个项目中一样)。

您的过程需要检查 Artists 表以查看 NameOfArtist 是否存在。如果它不存在,则需要添加一个新行。以下是步骤:

  1. 使用 Artists 上的 COUNT 聚合来查看 NameOfArtist 存在多少行。将计数存储在名为 artist_count 的变量中。
  2. 如果 Artist_count 为零,则在 Artists 中插入一个新行。

-- Select the LAST_INSERT_ID() into a variable.

  1. 如果 Artist_count 为 1,则查找 ArtistID 并将其存储在变量中。
  2. 在相册表中插入一个新行。

代码:

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 SELECT LAST_INSERT_ID(NameOfArtist) INTO artist_id
AND INSERT INTO Artists (ArtistName)
VALUES (NameOfArtist)
END IF;

IF artist_count = 1
THEN SELECT ArtistID INTO artist_id
FROM Artists
WHERE ArtistName = NameOfArtist
END IF;

INSERT INTO Albums (ArtistID, Title)
VALUES (artist_id, AlbumName);
END;
//

这就是我正在尝试的,对于我目前正在上课的课程。老实说,我不太了解如何编写代码。我完全理解需要做什么,我的大脑出于某种原因只是没有处理如何正确编写代码。我相当肯定我有很多错误,我一直在安静地工作一段时间,但似乎无法理解。一直在重新思考我正在学习的这个数据库管理课程。但是,我不会放弃。有没有人可以帮助我解决这个问题?

4

1 回答 1

5

如果您需要遵循确切的步骤,这将是您的代码:

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(NameOfArtist) INTO artist_id; 
  ELSE IF artist_count = 1 THEN 
    SELECT ArtistID INTO artist_id FROM Artists WHERE ArtistName = NameOfArtist; 
  END IF;

  INSERT INTO Albums (ArtistID, Title) VALUES (artist_id, AlbumName); 
END; //
于 2013-01-23T10:56:06.630 回答