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