mysql图书(书号,书名,作者编号,价格,出版社编号) 作者(编号,姓名,电话) 出版社(编号,出版社名称,地址) 建立作者的delete 触发器,只有当此作者没有任何作品才可删除,若有出书的记录不能删除。
时间: 2023-07-31 18:08:36 浏览: 168
您可以使用以下的 SQL 语句创建一个名为 `authors_delete_trigger` 的触发器,实现在删除作者的时候检查是否有此作者的作品记录,若有则不能删除,若没有则可以删除:
```sql
CREATE TRIGGER authors_delete_trigger
BEFORE DELETE ON authors
FOR EACH ROW
BEGIN
DECLARE num_books INT;
SELECT COUNT(*) INTO num_books FROM mysql图书 WHERE 作者编号 = OLD.编号;
IF num_books > 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = '该作者有出版的书籍,不能删除!';
END IF;
END;
```
该触发器在每次执行 `DELETE` 操作前会被触发,使用 `SELECT COUNT(*)` 统计该作者的作品记录数量,如果数量大于 0 ,则使用 `SIGNAL` 抛出一个自定义的异常信息,阻止删除操作继续执行。同时,使用 `OLD` 来引用被删除的作者记录。
相关问题
图书(书号,书名,作者编号,价格,出版社编号) 作者(编号,姓名,电话) 出版社(编号,出版社名称,地址) 建立作者的delete 触发器,只有当此作者没有任何作品才可删除,若有出书的记录不能删除。
好的,针对这个问题,我可以给出一个 MySQL 数据库的解决方案。
首先,我们需要创建三张表:`books`,`authors` 和 `publishers`。具体的 SQL 代码如下:
```sql
CREATE TABLE books (
book_id INT PRIMARY KEY AUTO_INCREMENT,
book_name VARCHAR(255) NOT NULL,
author_id INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
publisher_id INT NOT NULL,
FOREIGN KEY (author_id) REFERENCES authors (author_id),
FOREIGN KEY (publisher_id) REFERENCES publishers (publisher_id)
);
CREATE TABLE authors (
author_id INT PRIMARY KEY AUTO_INCREMENT,
author_name VARCHAR(255) NOT NULL,
phone VARCHAR(20) NOT NULL
);
CREATE TABLE publishers (
publisher_id INT PRIMARY KEY AUTO_INCREMENT,
publisher_name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL
);
```
接下来,我们需要创建一个名为 `check_author_books` 的存储过程,用于检查某个作者是否有任何作品。具体的 SQL 代码如下:
```sql
DELIMITER //
CREATE PROCEDURE check_author_books(IN author_id INT, OUT can_delete BOOL)
BEGIN
DECLARE book_count INT DEFAULT 0;
SELECT COUNT(*) INTO book_count FROM books WHERE author_id = author_id;
IF book_count > 0 THEN
SET can_delete = FALSE;
ELSE
SET can_delete = TRUE;
END IF;
END//
DELIMITER ;
```
最后,我们需要创建一个名为 `authors_delete_trigger` 的触发器,用于在删除作者时自动调用 `check_author_books` 存储过程。具体的 SQL 代码如下:
```sql
CREATE TRIGGER authors_delete_trigger
BEFORE DELETE ON authors
FOR EACH ROW
BEGIN
DECLARE can_delete BOOL;
CALL check_author_books(OLD.author_id, can_delete);
IF NOT can_delete THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Cannot delete author with books';
END IF;
END;
```
现在,当你尝试删除一个有作品的作者时,MySQL 会抛出异常并阻止删除操作。只有当此作者没有任何作品时才可删除。
SQL server,向表图书 (含有书号, 书名, 价格,出版社4个元素)用代码添加6行数据
可以使用以下 SQL 代码向表 `图书` 中添加 6 行数据:
```sql
INSERT INTO 图书 (书号, 书名, 价格, 出版社)
VALUES
('1001', 'Java编程思想', 99.00, '机械工业出版社'),
('1002', 'Python基础教程', 59.80, '电子工业出版社'),
('1003', 'C++ Primer Plus', 89.00, '人民邮电出版社'),
('1004', '数据结构与算法分析', 78.00, '清华大学出版社'),
('1005', '深入浅出MySQL', 69.90, '电子工业出版社'),
('1006', '计算机网络', 69.00, '人民邮电出版社');
```
其中,`INSERT INTO` 语句用于向表中插入数据,`VALUES` 后面跟着需要插入的每一行数据,数据之间用逗号分隔,每个数据的顺序需要与表中列的顺序相对应。
阅读全文