回答
如果您需要表中的記錄並且希望避免併發問題,請按照以下步驟操作。
首先您必須在其中存儲您的記錄
CREATE TABLE `incr` (
`Id` int(11) NOT NULL auto_increment,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
表其次創建這樣一個存儲過程:
DELIMITER ;;
CREATE PROCEDURE dowhile()
BEGIN
DECLARE v1 INT DEFAULT 5;
WHILE v1 > 0 DO
INSERT incr VALUES (NULL);
SET v1 = v1 - 1;
END WHILE;
END;;
DELIMITER ;
最後撥打SP:
CALL dowhile();
SELECT * FROM incr;
結果
Id
1
2
3
4
5
DECLARE i INT DEFAULT 0;
WHILE i < 6 DO
/* insert into table... */
SET i = i + 1;
END WHILE;
這裏有一種方法來做到基於set的沒有循環。這也可以作爲重複使用的視圖。這個例子顯示了從0到999的序列的生成,但是當然,它可以被修改以適合。
INSERT INTO
myTable
(
nr
)
SELECT
SEQ.SeqValue
FROM
(
SELECT
(HUNDREDS.SeqValue + TENS.SeqValue + ONES.SeqValue) SeqValue
FROM
(
SELECT 0 SeqValue
UNION ALL
SELECT 1 SeqValue
UNION ALL
SELECT 2 SeqValue
UNION ALL
SELECT 3 SeqValue
UNION ALL
SELECT 4 SeqValue
UNION ALL
SELECT 5 SeqValue
UNION ALL
SELECT 6 SeqValue
UNION ALL
SELECT 7 SeqValue
UNION ALL
SELECT 8 SeqValue
UNION ALL
SELECT 9 SeqValue
) ONES
CROSS JOIN
(
SELECT 0 SeqValue
UNION ALL
SELECT 10 SeqValue
UNION ALL
SELECT 20 SeqValue
UNION ALL
SELECT 30 SeqValue
UNION ALL
SELECT 40 SeqValue
UNION ALL
SELECT 50 SeqValue
UNION ALL
SELECT 60 SeqValue
UNION ALL
SELECT 70 SeqValue
UNION ALL
SELECT 80 SeqValue
UNION ALL
SELECT 90 SeqValue
) TENS
CROSS JOIN
(
SELECT 0 SeqValue
UNION ALL
SELECT 100 SeqValue
UNION ALL
SELECT 200 SeqValue
UNION ALL
SELECT 300 SeqValue
UNION ALL
SELECT 400 SeqValue
UNION ALL
SELECT 500 SeqValue
UNION ALL
SELECT 600 SeqValue
UNION ALL
SELECT 700 SeqValue
UNION ALL
SELECT 800 SeqValue
UNION ALL
SELECT 900 SeqValue
) HUNDREDS
) SEQ
這就是創新 – 2009-08-02 12:13:47
這裏有一個硬件工程師的版本的匹茲堡DBA的解決方案:
SELECT
(TWO_1.SeqValue + TWO_2.SeqValue + TWO_4.SeqValue + TWO_8.SeqValue + TWO_16.SeqValue) SeqValue
FROM
(SELECT 0 SeqValue UNION ALL SELECT 1 SeqValue) TWO_1
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 2 SeqValue) TWO_2
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 4 SeqValue) TWO_4
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 8 SeqValue) TWO_8
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 16 SeqValue) TWO_16;
很好,在那裏。 – 2012-05-19 03:57:56
比方說,你想通過100插入數字1到表。只要你有至少具有許多行(不要緊表的內容),其他一些表,那麼這是我的首選方法:
INSERT INTO pivot100
SELECT @ROW := @ROW + 1 AS ROW
FROM someOtherTable t
join (SELECT @ROW := 0) t2
LIMIT 100
;
要與比其他東西開始了一系列1?只需更改連接上設置的@ROW即可。
大家都明白了,這是相當哈克所以請小心
SELECT id % 12 + 1 as one_to_twelve FROM any_large_table group by one_to_twelve
「最短」的方式,我知道(在MySQL)用於創建一個表,一個長序列是(交叉)加入一個現有的表格。由於任何(公共)MySQL服務器有information_schema.COLUMNS
表我會用它:
DROP TABLE IF EXISTS seq;
CREATE TABLE seq (i MEDIUMINT AUTO_INCREMENT PRIMARY KEY)
SELECT NULL AS i
FROM information_schema.COLUMNS t1
JOIN information_schema.COLUMNS t2
JOIN information_schema.COLUMNS t3
LIMIT 100000; -- <- set your limit here
通常一個連接應該足以創造超過100萬行 - 但是,一個更加入不會傷害:-) - 不過不要忘記設定一個限制。
如果要包含0
,應該「刪除」AUTO_INCEMENT
屬性。
ALTER TABLE seq ALTER i DROP DEFAULT;
ALTER TABLE seq MODIFY i MEDIUMINT;
現在你可以插入0
INSERT INTO seq (i) VALUES (0);
數和負數以及
INSERT INTO seq (i) SELECT -i FROM seq WHERE i <> 0;
您可以
SELECT MIN(i), MAX(i), COUNT(*) FROM seq;
我想分享的想法驗證號碼並不是一個確切的答案回答這個問題,但可以對某些人有用,所以我想分享一下。
如果您經常只需要有限的一組數字,那麼創建一個包含您可能需要的數字的表格並且每次只使用該表格可能會有所幫助。例如:
CREATE TABLE _numbers (num int);
INSERT _numbers VALUES (0), (1), (2), (3), ...;
只有當你需要的數字低於某一合理的限度,所以不要用它來生成序列1 ... 1萬,但是可用於數字1這可應用於...例如10K。
如果你在_numbers
表號的這個名單,那麼你可以這樣寫查詢,獲得一個字符串的單個字符:
SELECT number, substr(name, num, 1)
FROM users
JOIN _numbers ON num < length(name)
WHERE user_id = 1234
ORDER BY num;
如果你需要比10K更大的數字,那麼你可以加入表格本身:
SELECT n1.num * 10000 + n2.num
FROM _numbers n1
JOIN _numbers n2
WHERE n1 < 100
ORDER BY n1.num * 10000 + n2.num; -- or just ORDER BY 1 meaning the first column
- 1. 在Excel中生成一系列數字
- 2. 生成一系列數字
- 3. 生成一系列字符
- 4. 我如何生成一系列數字?
- 5. 在Postgresql中生成一系列宿舍
- 6. 從JavaScript中的表單中生成一系列隨機數字
- 7. 在一系列數字之間生成組合。怎麼樣?
- 8. 在MySql中生成僞列
- 9. 生成一系列日期
- 10. 生成一系列1,1,2,2,3,3,
- 11. 生成一個5位數字,但從MySQL表列中除外
- 12. 如何在MySQL中生成唯一的字母數字內容?
- 13. 從postgres生成系列到mysql
- 14. 在一系列數字之間生成N個隨機數列表
- 15. 在MySQL表中生成唯一字符列表
- 16. 在SQL Server 2008中生成Alpha數字系列
- 17. 在列表中生成一個字典
- 18. 使用shell腳本生成一系列數字
- 19. jquery:在列表框中生成數字
- 20. 如何在PHP中以0.25的增量生成一系列數字?
- 21. 在SAP HANA中,如何生成一系列數字,例如1到10?
- 22. 如何在mysql中自動生成一個數字?
- 23. 生成系列1,2,1,3,2,1,4,3,2,1,5,4,3,2,1
- 24. 生成多個列系列計數
- 25. 在MySQL中存儲和訪問一系列數字/日期
- 26. 生成遞歸的一系列字母(如Excel列標題)
- 27. 如何在Haskell中隨機生成一個隨機生成的數字列表
- 28. 通過一個常數浮點值生成一系列遞增的數字
- 29. 在LINQ中生成下一個數字
- 30. 在mysql中生成月份列表
是否要將其添加到現有記錄或全新表格? – Sklivvz 2008-10-09 11:07:59
這將是新的記錄。 – nicudotro 2008-10-09 11:10:40
爲什麼你不能使用auto_increment列? – Rob 2008-10-09 14:10:26