2016-08-17 5 views
2

私が理解すると、columnはデフォルトでsigned intになります。mysqlのAUTO_INCREMENTはデフォルトで署名できますか?

id INT(6); 

以下に指定するauto increment columnにデフォルトで署名を付けることはできますか? Mysqlは、自動増分列の値を1から開始します。

+0

なぜあなたはそれを試していないのですか? – Jens

答えて

1

はい、自動インクリメントのプライマリキーを署名付きintで作成できます。これを試してください。

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

そして次のクエリは、これは-10の値として1を持つ相互に列を有するテーブルをもたらす有効

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

の両方です。しかし、これを試すと問題に遭遇します。

ALTER TABLE mytable AUTO_INCREMENT=-10; 

はい、負の数である自動増分値を持つことはできません。

+0

そして、INSERT後にidを取り、マイナスを追加するトリガを作るのはどうですか?出来ますか ? – Meloman

+0

はい、可能ですが火事で遊んでいます。生成されたIDに-1を乗じると安全です@Meloman – e4c5

+0

CONCAT( ' - '、id)より-1安全です。興味深い...私はここで私のために働いている例をhttps://stackoverflow.com/a/44802856/2282880の下で作ったのですか? – Meloman

0

多くの検索の後に...私は、前に呼ばれたトリガーで解決策を探しました!私はこれを見つけた:ここ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を持たない同じスキーマを持つ2つのデータベースを両方向で同期させるために見つけた最良の方法でした。

関連する問題