2016-08-17 23 views
2

据我所知,低于column默认为signed intmysql中的AUTO_INCREMENT可以默认签名吗?

id INT(6); 

以下指定的auto increment column可以在默认情况下进行签名吗? Mysql从1开始为自动增量列设置值。

id INT(6) AUTO_INCREMENT PRIMARY KEY 
+0

为什么你不试试? – Jens

回答

1

是的,你可以创建一个带有符号整数的自动递增主键。试试这个:

CREATE TABLE mytable(id int(6) AUTO_INCREMENT PRIMARY KEY); 

那么下面的查询都是有效

INSERT INTO mytable values(); 
INSERT INTO mytable values(-10); 

这将导致有一排-10,另一个为1值的表。但是,你会遇到的问题,如果你试试这个:

ALTER TABLE mytable AUTO_INCREMENT=-10; 

是的,你不能是负数自动增量值。

+0

那么如何使一个TRIGGER采用ID并在INSERT之后添加减号呢?可能吗 ? – Meloman

+0

是的,可能但你正在玩火。如果你打算将生成的id乘以-1,那么这将是安全的@Meloman – e4c5

+0

Mutiply by -1比CONCAT更安全(' - ',id)?有趣的...我在这里根据https://stackoverflow.com/a/44802856/2282880做了一个例子为我工作,你在想什么? – Meloman

0

经过大量的搜索......我找了一个叫做BEFORE INSERT的TRIGGER解决方案!我发现这一点:https://stackoverflow.com/a/43441586/2282880

这里是我的变种:

CREATE TRIGGER `invertID` 
BEFORE INSERT ON `<table>` 
    FOR EACH ROW SET NEW.id=CONCAT("-", (
     SELECT `auto_increment` 
     FROM INFORMATION_SCHEMA.TABLES  
     WHERE table_name = '<table>') 
    ) 

它为我工作的罚款。

这是我发现在两个方向上同步两个具有相同模式的数据库的最佳方式,在我的表中没有相同的ID。

相关问题