将计数存储在变量中,插入到行中,以及在 MySQL 中使用 IF 语句

Dyl*_*ann 1 mysql stored-procedures

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

 IF condition THEN ... do something ... END IF;
Run Code Online (Sandbox Code Playgroud)

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

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

 SELECT LAST_INSERT_ID() into artist_id;
Run Code Online (Sandbox Code Playgroud)

对于这个项目,创建一个名为 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;
//
Run Code Online (Sandbox Code Playgroud)

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

Geo*_*scu 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; //
Run Code Online (Sandbox Code Playgroud)