Mysql更新多条记录

时间:2017-10-19 08:46:02

标签: c# mysql

我有很多客户创建了很多票,这些票等待结果,这些功能类似于宾果游戏,一旦你知道结果就会创建很多票(大约20000)等待最终结果,我有一个程序验证,票证,并询问票证是否等于结果,然后票证被标记为赢家或输家,问题是,当记录很少,一切正常,但现在需要太久更新那些20000票,最糟糕的是我连续多次发生事件,然后例如我应该更新50000~10000条记录,这可能需要几个小时。有没有办法在块中更新这个?

门票的结构就像这样

CREATE TABLE `Ticket` (
  `ClientID` int(10) NOT NULL,
  `TicketID` int(15) NOT NULL AUTO_INCREMENT,
  `BetAmmount` int(20) NOT NULL,
  `Gain` int(20) DEFAULT NULL,
  `Status` int(15) NOT NULL COMMENT '1=Simple ;2=Combinado',
  `Date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `Choice`varchar(20) NOT NULL,
  `EventID`int(10) NOT NULL,
  PRIMARY KEY (`TicketID`),
  KEY `idx_ClientID` (`ClientID`),
  KEY `idx_status` (`Status`),
  KEY `idx_EventID` (`EventID`),
  KEY `idx_Date` (`Date`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=14455815 ;

结果表

CREATE TABLE `Event` (
      `EventID` int(10) NOT NULL,
      `Result` varchar(25) NOT NULL,
      `Date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,

      PRIMARY KEY (`EventID`),     
      KEY `idx_Date` (`Date`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

然后我的程序(使用c#开发)运行,如果结果正确,则每张票询问票据

首先我加载具有相同eventID的所有票证,然后将其存储在datagridview中,然后我暂停0.1秒,然后我加载此事件的结果,并且我每行运行一行,并且我更新记录

在C#程序中

//MYSQL Connection
DbTicketsRecords=mysql.select('select * from Ticket where idEvent="xxxx"');
dgvTickets.DataSource = DbTicketsRecords;

DbResult=mysql.select('select * from Event where idEvent="xxxx"');

Thread.sleep(100);

foreach(DataGridViewRow row in dgvTickets.Rows)
  {
    string Choice = row.Cells[6].Value.ToString();
    string TicketID=row.Cells[1].Value.ToString();
    if(Choice== DbResult.fields('Result'){
         DbTicketsRecords=mysql.select("update Ticket set status='win' where TicketID='" + TicketID+"'");
     }else{
         DbTicketsRecords=mysql.select("update Ticket set status='Loss' where TicketID='" +TicketID+"'");
     }
  }

注意:程序执行一些额外的操作,但在综合中,这些是主要功能。

然后我的问题是,我可以更高效地完成这项操作,我可以做些什么来改善这个过程?

0 个答案:

没有答案