-2

嗨,我想为我的案例研究创建一个 php-sql 应用程序,其中我有以下属性:

图书 ID、图书名称、作者、编辑、ISBN

用户将输入书名、书号、作者和编者,并且每次用户输入时都会自动输入 ISBN 号。这可能吗?好吧,提前感谢您的帮助。

4

4 回答 4

1

是的,您可以将ISBN字段设为自动增量,从确定的数字开始

于 2013-08-04T06:48:43.153 回答
0

目前尚不清楚您为什么需要这个,但您可以使用BEFORE INSERT触发器和单独的排序表来实现您的目标

-- A sequencing table
CREATE TABLE book_seq 
(
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
-- Set initial value
ALTER TABLE book_seq AUTO_INCREMENT = 9000;

CREATE TABLE books
(
  book_id   INT,
  book_name VARCHAR(256), 
  author    VARCHAR(256),
  editor    VARCHAR(256),
  isbn      VARCHAR(12)
);

触发器

DELIMITER $$
CREATE TRIGGER tg_book_seq
BEFORE INSERT ON books
FOR EACH ROW
BEGIN
  INSERT INTO book_seq VALUES(NULL);
  SET NEW.isbn = CONCAT('8000-', LAST_INSERT_ID());
END$$
DELIMITER ;

现在您可以简单地插入行

INSERT INTO books (book_id, book_name, author, editor) VALUES
(1, 'Book1 Title', 'Author1', 'Editor1'),
(2, 'Book2 Title', 'Author2', 'Editor1');

您的伪 ISBN 号码将自动生成

| BOOK_ID | 书名 | 作者 | 编辑 | 国际标准书号 |
-------------------------------------------------- --------
| 1 | Book1 标题 | 作者1 | 编辑1 | 8000-9000 |
| 2 | Book2 标题 | 作者2 | 编辑1 | 8000-9001 |

这是SQLFiddle演示


另一种更简单的方法是INSERT ... SELECT在插入时使用语法并计算下一个伪 ISBN 编号,如下所示

INSERT INTO books (book_id, book_name, author, editor, isbn) 
SELECT 1, 'Book1 Title', 'Author1', 'Editor1',
       CONCAT('8000-', COALESCE(SUBSTRING_INDEX(MAX(isbn), '-', -1), '8999') + 1) new_value
  FROM books

这是SQLFiddle演示

注意:这种方法的主要缺点是,当两个或多个并发用户可能获得相同的MAX(isbn)值从而产生具有重复 isbn 编号的行时,它可能会在并发环境中的重负载下失败。

于 2013-08-04T07:52:54.470 回答
0

就像 Trung-Hieu Le 在他的评论中写道:
ISBN 不应该是自动输入,但如果你真的想要,你应该看看
Auto Increment

于 2013-08-04T06:45:40.290 回答
0

如果您正在为特定项目处理您赢得的 ISBN 号码,那么是的,您可以设置一个字段以从您想要的号码开始自动递增,

但如果它不仅是您赢得的 ISBN 号码,而且您需要真实的书籍 ISBN 号码,那么您将需要一个包含书籍 ISBN 号码的 ISBN 号码数据库,那么每当用户输入书籍名称和其他详细信息时,ISBN 将自动根据与图书信息的匹配查询插入您的 ISBN 字段...

希望这有帮助

于 2013-08-04T07:05:05.227 回答