Không hiểu tại sao bạn cần hai cột tự động tăng giá trị, không có ý nghĩa gì ... nhưng nếu bạn nhấn mạnh -
Bạn có thể thực hiện điều đó trong UDF hoặc SP theo cách này, bạn có nhiều cột tự động tăng một giá trị.
VÍ DỤ # 1:QUY TRÌNH LƯU TRỮ (SP)
Bảng
CREATE TABLE tests (
test_id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
test_num INT(10) NULL,
test_name VARCHAR(10) NOT NULL
);
Quy trình được lưu trữ
DELIMITER $$
CREATE PROCEDURE autoInc (name VARCHAR(10))
BEGIN
DECLARE getCount INT(10);
SET getCount = (
SELECT COUNT(test_num)
FROM tests) + 1;
INSERT INTO tests (test_num, test_name)
VALUES (getCount, name);
END$$
DELIMITER ;
Gọi SP
CALL autoInc('one');
CALL autoInc('two');
CALL autoInc('three');
Tra bảng
SELECT * FROM tests;
+---------+----------+-----------+
| test_id | test_num | test_name |
+---------+----------+-----------+
| 1 | 1 | one |
| 2 | 2 | two |
| 3 | 3 | three |
+---------+----------+-----------+
VÍ DỤ # 2:CHỨC NĂNG DO NGƯỜI DÙNG ĐỊNH NGHĨA (UDF)
Bảng
CREATE TABLE tests (
test_id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
test_num INT(10) NULL,
test_name VARCHAR(10) NOT NULL
);
Chức năng do người dùng xác định
DELIMITER $$
CREATE FUNCTION autoInc ()
RETURNS INT(10)
BEGIN
DECLARE getCount INT(10);
SET getCount = (
SELECT COUNT(test_num)
FROM tests) + 1;
RETURN getCount;
END$$
DELIMITER ;
Chèn bằng UDF
INSERT INTO tests (test_num, test_name) VALUES (autoInc(), 'one');
INSERT INTO tests (test_num, test_name) VALUES (autoInc(), 'two');
INSERT INTO tests (test_num, test_name) VALUES (autoInc(), 'three');
Tra bảng
SELECT * FROM tests;
+---------+----------+-----------+
| test_id | test_num | test_name |
+---------+----------+-----------+
| 1 | 1 | one |
| 2 | 2 | two |
| 3 | 3 | three |
+---------+----------+-----------+
Những điều này đã được thử nghiệm và xác minh. Cá nhân tôi muốn sử dụng chức năng này, nó linh hoạt hơn.