爲什麼當我這樣做時發生以下異常,我犯了什麼錯誤? 將元組插入帶AUTO_INCREMENT字段的表的正確方法是什麼? 如何刪除,是否可以更新ID?在MYSQL中使用AUTO_INCREMENT
string connStr = "server=localhost;user=root;database=test;port=3306;password=XXX;";
MySqlConnection conn = new MySqlConnection(connStr);
try{
MessageBox.Show("Hello");
conn.Open();
string s0 = "CREATE TABLE school.student (id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(45) NOT NULL, PRIMARY KEY (id))";
string s1 = "INSERT INTO school.student VALUES (LAST_INSERT_ID(), \'john\')";
string s2 = "INSERT INTO school.student VALUES (LAST_INSERT_ID(), \'mary\')";
MySqlCommand cmd = new MySqlCommand(s0, conn);
cmd.ExecuteNonQuery();
cmd = new MySqlCommand(s1, conn);
cmd.ExecuteNonQuery();
cmd = new MySqlCommand(s2, conn);
cmd.ExecuteNonQuery();
conn.Close();
}catch(Exception ex){
TextWriter tw = new StreamWriter("C:\\test.txt");
MessageBox.Show(ex.ToString());
tw.WriteLine(ex.ToString());
}
MySql.Data.MySqlClient.MySqlException: Duplicate entry '1' for key 'PRIMARY'
at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
at MySql.Data.MySqlClient.NativeDriver.ReadResult()
at MySql.Data.MySqlClient.ResultSet.NextResult()
at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
at ProjectInfo.Connect.Exec(String commandName, vsCommandExecOption executeOption, Object& varIn, Object& varOut, Boolean& handled)
THX。我後來發現你也可以這樣做: string s1 =「INSERT INTO projectinfo.student VALUES(NULL,\'john \')」; string s2 =「INSERT INTO projectinfo.student VALUES(NULL,\'mary \')」; – yeeen 2010-01-02 16:59:03
是的,你也可以這樣做,你甚至可以通過執行SELECT * FROM [tab] WHERE [auto inc column] IS NULL來選擇新插入的記錄。 但是,爲了清晰明瞭,我建議不要這樣做。國際海事組織只是奇怪你明確地分配NULL,但實際上得到一個新生成的值,而不是。 – 2010-01-02 19:02:45