前提・実現したいこと
go言語でgo-sqlite3を用いてデータベースの任意のテーブルの最新のレコードを任意の数残して、それ以外のレコードをそのテーブルから削除すること。
テーブルは
Go
1cmd := fmt.Sprintf(` 2 CREATE TABLE IF NOT EXISTS %s ( 3 time DATETIME PRIMARY KEY NOT NULL, 4 name STRING, tableName) 5DbConnection.Exec(cmd)
のように作成しています。
発生している問題・エラーメッセージ
http://blog.kumacchi.com/2008/03/30/590
を参考に、下記のソースコードのように、レコードをtimeで降順にソートして、上から1500個を除いてselectしてdeleteするようにしてみたのですが、削除前も削除後もレコードの数が変わりません。
にも関わらず、なにもエラーが出ないので困っています。
該当のソースコード
Go
1func(c *params) Delete() error{ 2 //削除前のc.TableName()のレコード数の確認 3 countCmd:=fmt.Sprintf("SELECT COUNT(*) FROM %s",c.TableName()) 4 count,_:=DbConnection.Exec(countCmd) 5 realCount,_:=count.LastInsertId() 6 log.Println(c.TableName,"'s DataCount:",realCount) 7 8 //最新のレコード1500個を残して削除 9 deleteCmd := fmt.Sprintf("DELETE FROM %s WHERE time IN (SELECT time FROM %s ORDER BY time DESC LIMIT -1 OFFSET ?)",c.TableName(),c.TableName()) 10 _, err := DbConnection.Exec(deleteCmd,1500) 11 if err != nil { 12 log.Println("Could not delete sql data:",err) 13 return err 14 } 15 16 //削除後のc.TableName()のレコード数の確認 17 count,_=DbConnection.Exec(countCmd) 18 realCount,_=count.LastInsertId() 19 log.Println(c.TableName,"'s DataCount:",realCount) 20 21 return nil 22}
回答1件
あなたの回答
tips
プレビュー