您好我想創建我的案例研究一個PHP-SQL應用程序,其中在我的這些屬性添加數據:PHP,SQL自動與增量
簿ID, 書名, 作者, 編輯器, ISBN
用戶將輸入書名,書ID,作者和編輯 ,並自動將有作爲每次用戶輸入時遞增的ISBN編號的輸入。 反正有可能嗎?非常感謝提前的幫助。
您好我想創建我的案例研究一個PHP-SQL應用程序,其中在我的這些屬性添加數據:PHP,SQL自動與增量
簿ID, 書名, 作者, 編輯器, ISBN
用戶將輸入書名,書ID,作者和編輯 ,並自動將有作爲每次用戶輸入時遞增的ISBN編號的輸入。 反正有可能嗎?非常感謝提前的幫助。
目前還不清楚爲什麼你需要這個,但你可以用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 | BOOK_NAME | AUTHOR | EDITOR | ISBN | --------------------------------------------------------- | 1 | Book1 Title | Author1 | Editor1 | 8000-9000 | | 2 | Book2 Title | Author2 | Editor1 | 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編號的行。
一樣的Trung-總管Hieu勒在他的評論中寫道:
的ISBN不應該是一個自動輸入,但如果你真的想,你應該看看
Auto Increment
,如果你在你贏得ISBN編號工作特定的項目則是你可以設置一個字段的自動增量開始爲你的期望數量,
但是,如果它不僅僅是你贏得的ISBN號碼,而且你需要真正的書籍ISBN號碼,那麼你需要有一個ISBN號碼數據庫,其中包含書籍ISBN號碼,然後每當用戶輸入書名和其他細節,那麼ISBN將是根據書籍信息的匹配查詢自動插入您的ISBN字段中...
希望這有助於
是的,我只需要書籍的ISBN爲一個特定的項目。 isbn號的獨創性根本不重要。但是如何做一個像8009-9000這樣的設定數字自動增量的字段<---最後一個數字會增加。 – Erkyy
我不認爲可以自動輸入ISBN屬性。 –
是的,這是可能的。你有什麼問題?你有沒有嘗試過什麼? – peterm
原因我希望它像8009-9000,所以結尾數字將增加。 – Erkyy