2016-12-10 12 views
0

私はこの回答を見つけるためにウェブサイトを調査しましたが、そのほとんどは私の質問に近いですが、特定の行だけを探します。私はデフォルトのIDを1にしたいが、行はすでに使用されていると言う。新しいIDを持つ新しい行が作成されるまで行を検索したい。 IDを独自のインデックスにする必要はありますか?ID行が存在するかどうかを確認します。作成していない場合は、

例:(検索列は、行を作成できるようになるまで)

ID (PK, AI) 
(row 1) ID: 1 admin 
(row 2) ID: 2 guest 
(row 3) ID: 3 user 
(row 4) *id is not created so create* 

テーブル

CREATE TABLE IF NOT EXISTS `accounts` (
    `id` int(4) NOT NULL AUTO_INCREMENT, 
    `username` varchar(65) NOT NULL DEFAULT '', 
    `password` varchar(100) NOT NULL DEFAULT '', 
    `access` int(1) NOT NULL DEFAULT '0', 
    `hwid` varchar(100) NOT NULL DEFAULT '', 
    `ip` varchar(15) NOT NULL DEFAULT '0.0.0.0', 
    `pcname` varchar(100) NOT NULL, 
    `info` varchar(255) NOT NULL DEFAULT 'None', 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

CREATE TABLE IF NOT EXISTS `keys` (
    `key` varchar(30) NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

CREATE TABLE IF NOT EXISTS `log` (
    `Date` varchar(200) NOT NULL, 
    `UID` varchar(150) NOT NULL, 
    `IP` varchar(30) NOT NULL, 
    `Action` varchar(100) NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

Iはまた、ID列を省略する試みた

public MySqlDataReader InsertInto(string tableName, string[] values) 
     { 
      string query = ""; 
      try 
      { 
       query = "INSERT INTO `" + tableName + "` (username, password, access, hwid, ip, pcinfo, info) VALUES(" + "'" + values[0] + "'"; 
       for (int i = 1; i < values.Length; ++i) 
        query += ", '" + values[i] + "'"; 
        query += ")"; 
      } 
      catch { } 
      return ExecuteQuery(query); 
     } 
+0

としてあなたINSERT文を書くことができauto_incrementコラムですされて参照してポストされたテーブル定義にIDの一意性は一意であるため、固有である必要があります。ただし、自動インクリメントに設定する必要はありません。 – aguertin

+0

@aguertinはい私は知っているが、私はINSERT TOクエリをデータベースに送ることができる唯一の方法は文字列であり、私はそれを行うことはできないが、私は一意にチェックするだろう。 – varProjects

+0

すべての主キーが一意であることを確認してください – aguertin

答えて

2

あなたの質問はあまり明確ではありませんが、ID列は固有である必要がありますので、プライマリキーまたはユニークキーのいずれかにする必要があります。あなたのID値が繰り返されず、一意であることを確認します。

auto_incrementの列にすると、ID値がすべての挿入時に自動的に増分されますが、それは必須ではありません。あなたから

私はあなたのID列がすでにPKとしてマークされ、それはそれで

CREATE TABLE IF NOT EXISTS `accounts` (
    `id` int(4) NOT NULL AUTO_INCREMENT, 

の下に指摘したように、あなたが

insert into `accounts`(`username`,`password`,`access`,`hwid`,`ip`,`pcname`,`info`) 
values('bla','bla',1,'bla','bla','bla','bla'); 
+0

私はINSERTクエリを送ることができる唯一の方法は文字列であり、INTは文字列を受け入れないことを知っています。 – varProjects

+0

@PunishSulky、ok ...まだ大丈夫です。答え/コメントを正しく読んでください。 ID列を 'auto_increment'と定義することができます。したがって、挿入文にID列を含める必要はありません。 – Rahul

+0

@PunishSulkyテーブルを確認し、IDがプライマリキーでNULLでないことを確認してください。この回答はあなたの要件 – aguertin

関連する問題