Q
數據庫自動增加列
2
A
回答
0
上的SQL Server,這稱爲identity列
5
是的,當然是可以的。只需將此列作爲唯一鍵(不是主鍵),並且必須使用特殊屬性(SQL Server的「IDENTITY」)和MySQL的 「AUTO_INCREMENT」(請參見下面的示例)來聲明。另一列可以是主鍵。
在MySQL數據庫中的表可以聲明如下:
CREATE TABLE `mytable` (
`Name` VARCHAR(50) NOT NULL,
`My_autoincrement_column` INTEGER(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`Name`),
UNIQUE KEY `My_autoincrement_column` (`My_autoincrement_column`)
);
4
是的,你可以做到這一點。下面是使用IDENTITYSQL服務器樣本:
CREATE TABLE MyTable (
PrimaryKey varchar(10) PRIMARY KEY,
IdentityColumn int IDENTITY(1,1) NOT NULL,
DefaultColumn CHAR(1) NOT NULL DEFAULT ('N')
)
INSERT INTO MyTable (PrimaryKey) VALUES ('A')
INSERT INTO MyTable (PrimaryKey) VALUES ('B')
INSERT INTO MyTable (PrimaryKey, DefaultColumn) VALUES ('C', 'Y')
INSERT INTO MyTable (PrimaryKey, DefaultColumn) VALUES ('D', 'Y')
INSERT INTO MyTable (PrimaryKey, DefaultColumn) VALUES ('E', DEFAULT)
--INSERT INTO MyTable (PrimaryKey, DefaultColumn) VALUES ('F', NULL) -- ERROR
--> Cannot insert the value NULL into column 'DefaultColumn', table 'tempdb.dbo.MyTable'; column does not allow nulls. INSERT fails.
SELECT * FROM MyTable
下面是一個使用功能滾你自己的遞增列使用SQL Server的實例。這意味着沒有容錯或者我會這樣做。 (我會使用身份識別功能。)但是,知道您可以使用函數返回默認值。
DROP TABLE MyTable
GO
DROP FUNCTION get_default_for_mytable
GO
CREATE FUNCTION get_default_for_mytable
()
RETURNS INT
AS
BEGIN
-- Declare the return variable here
DECLARE @ResultVar int
-- Add the T-SQL statements to compute the return value here
SET @ResultVar = COALESCE((SELECT MAX(HomeBrewedIdentityColumn) FROM MyTable),0) + 1
-- Return the result of the function
RETURN @ResultVar
END
GO
CREATE TABLE MyTable (
PrimaryKey varchar(10) PRIMARY KEY,
IdentityColumn int IDENTITY(1,1) NOT NULL,
DefaultColumn CHAR(1) NOT NULL DEFAULT ('N'),
HomeBrewedIdentityColumn int NOT NULL DEFAULT(dbo.get_default_for_mytable())
)
GO
INSERT INTO MyTable (PrimaryKey) VALUES ('A')
INSERT INTO MyTable (PrimaryKey) VALUES ('B')
INSERT INTO MyTable (PrimaryKey, DefaultColumn) VALUES ('C', 'Y')
INSERT INTO MyTable (PrimaryKey, DefaultColumn) VALUES ('D', 'Y')
INSERT INTO MyTable (PrimaryKey, DefaultColumn) VALUES ('E', DEFAULT)
--INSERT INTO MyTable (PrimaryKey, DefaultColumn) VALUES ('F', NULL) -- ERRROR
--> Cannot insert the value NULL into column 'DefaultColumn', table 'tempdb.dbo.MyTable'; column does not allow nulls. INSERT fails.
SELECT * FROM MyTable
結果
PrimaryKey IdentityColumn DefaultColumn HomeBrewedIdentityColumn
---------- -------------- ------------- ------------------------
A 1 N 1
B 2 N 2
C 3 Y 3
D 4 Y 4
E 5 N 5
2
我認爲你可以爲每個表中只有1身份自動增量列,此列不必是主鍵,但它意味着你必須插入主鍵你自己。
如果你已經有一個主鍵是自動增量,那麼我會盡量使用這個如果可能的話。
如果您試圖獲取一個行ID進行查詢範圍然後我會看看創建一個視圖,其中有行ID(不是SQL 2000或以下)。
你能在你打算使用自動增量列你的主鍵是什麼增加,並可能有助於想出了一個解決方案
0
Oracle和DB2有序列,但我認爲你正在尋找身份和所有主要的dbms(mysql,sql server,db2,oracle)都支持它。
相關問題
- 1. 未提交的數據庫事務和自動增加列
- 2. 如何在Java derby中自動增加數據庫列?
- 3. 自動增加數據庫表中的自定義ID
- 4. 增加來自php的數據庫值?
- 5. 表(數據庫)中的自動增量
- 6. 數據庫方案,自動增量
- 7. SQL數據庫中的自動增量列
- 8. 數據庫中的自動序列增量器
- 9. 使用自動增量將值添加到數據庫Id
- 10. 如何啓用PowerDesigner 16.5自動增加MySQL數據庫主鍵?
- 11. 如何自動增加數據庫中的值? (LIVE)
- 12. 數據庫自動增加主鍵與企業登錄
- 13. 使用java在oracle數據庫中自動增加RowID
- 14. 如何在mysql數據庫中自動編號(自動增加)guid字段
- 15. 如何根據codeigniter中的數據庫行數來自動增加行數?
- 16. 點燃數據表的自動遞增字段添加列
- 17. CodeIgniter和自動加載數據庫庫
- 18. Magento - 數據未插入數據庫,但ID是自動增加的
- 19. 自動增量列不會增加mysql表中的數字
- 20. 自動遞增列
- 21. mysql插入自動增加列
- 22. 添加自動增量_id列
- 23. 'rowid'列不是自動增加的
- 24. 顯示數據庫數組行,同時每行自動增加id
- 25. 增加數據庫中的計數器
- 26. MySQL自動增加加上一列中的字母數字
- 27. 自動更新數據庫列
- 28. 自動加載數據庫類
- 29. 將自動增量列修改爲全局自動增量列
- 30. 根據PostgreSQL中列的值自動增加
執行此操作的方法是DBMS相關的。你正在使用哪個DBMS? – Rob 2009-05-02 00:13:19