MySQL - 如何在数据库中创建自动压缩字段?

问题描述:

我在MySQL DB中输入记录。现在,我希望有一个“Serial_Number”字段,只要记录输入到数据库中,字段就会自动放大。MySQL - 如何在数据库中创建自动压缩字段?

我不希望这个“Serial_Number”字段成为数据库的主键。

如何创建此字段(需要设置属性)。

我使用“SQL YOG”来访问MySQL。如果您知道SQL YOG,那么请告诉我如何通过SQL YOG来实现。

AUTO_INCREMENT列必须有与之相关联的一个UNIQUE KEY约束。

例如,这会工作得很好:

CREATE TABLE AutoNotId 
(
    Id INTEGER PRIMARY KEY, 
    Auto INTEGER AUTO_INCREMENT, 
    UNIQUE (Auto) 
); 

编辑:

ALTER声明看起来有点像这样:

ALTER TABLE AutoNotId 
    MODIFY COLUMN Auto INTEGER AUTO_INCREMENT, 
    ADD UNIQUE (Auto); 

我推荐的,但是使用指定UNIQUE约束的名称的长手语法;但您可以随时参考MySQL's Reference Manual了解具体规格。

+0

谢谢Zxpro ...你的查询工作正常。 您可以告诉我alter命令来更改我的现有“orkut”表中的“sr_no”字段以将此字段设置为auto_increment和唯一。 – 2009-09-13 08:29:51

创建表MYTABLE( ID INT IDENTITY(1,1)PRIMARY KEY,

SN INT IDENTITY(1,1)

+0

是一个mysql语句吗? – 2009-09-13 08:18:14

+0

MySQL不使用IDENTITY。 – 2009-09-13 08:18:43

+0

这不是MySQL声明。 – 2009-09-14 10:07:55

我不认为你可以有一个自动递增领域:

CREATE TABLE `t` (`dd` int(11) NOT NULL) 
ALTER TABLE `t` CHANGE `dd` `dd` INT(11) NOT NULL AUTO_INCREMENT 

MySQL said: Documentation 
#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key 
+0

你能建议我怎样才能做到这一点的任何其他选择。我通过JDBC驱动程序通过java保存记录。 – 2009-09-13 08:18:45

+0

人们已经指出你可以使用唯一索引。这是可以的,因为它不是主键。 (您如何访问数据库与您的问题无关)。 – 2009-09-13 08:47:15

在MySQL表中只能有一个自动增量字段,它们必须被索引。

每个表只能有一个AUTO_INCREMENT列,它必须被索引,并且它不能有DEFAULT值。

难道你不想让它成为主键吗?

如果你想要一个递增值,你可以通过每次插入后运行更新掰过来:

SELECT MAX(serial) + 1 FROM myTable; 

UPDATE myTable SET serial = <that number> WHERE id = ... 

在MySQL你不能做到这一点。从DOC:

只能有一个每个表AUTO_INCREMENT 列,它必须被索引, 并且它不能有默认值。如果仅包含正数 值,则 AUTO_INCREMENT列正常工作 。插入一个负数是 被视为插入一个非常大的正数的 。这样做是为了避免 精度问题,当数在从正到负和 也“包装” ,以确保你不小心 得到一个AUTO_INCREMENT 列包含0

对于MyISAM和BDB表,您可以使用 在多列键中指定AUTO_INCREMENT次 列。请参阅 第3.6.9节“使用AUTO_INCREMENT”。