2

次のようなテーブルがあります。

ALTER TABLE `MW_Locations`  CHANGE COLUMN `ID` `ID` INT(20) NULL DEFAULT NULL FIRST,    CHANGE COLUMN `UDID` `UDID` INT(20) NULL DEFAULT NULL AFTER `ID`,   CHANGE COLUMN `IDACCOUNT` `IDACCOUNT` INT(20) NULL DEFAULT NULL AFTER `UDID`,   CHANGE COLUMN `Name` `Name` VARCHAR(50) NULL DEFAULT NULL AFTER `IDACCOUNT`,    CHANGE COLUMN `Lat` `Lat` DOUBLE NULL DEFAULT NULL AFTER `Name`,    CHANGE COLUMN `Lon` `Lon` DOUBLE NULL DEFAULT NULL AFTER `Lat`,     CHANGE COLUMN `IDMWDevice` `IDMWDevice` INT(50) NULL DEFAULT NULL AFTER `Lon`,  CHANGE COLUMN `Desc` `Desc` VARCHAR(50) NULL DEFAULT NULL AFTER `IDMWDevice`,   CHANGE COLUMN `IDAction` `IDAction` INT(20) NULL DEFAULT NULL AFTER `Desc`,     CHANGE COLUMN `Status` `Status` VARCHAR(50) NULL DEFAULT NULL AFTER `IDAction`,     ADD PRIMARY KEY (`IDACCOUNT`);

問題は、更新を行うことができないことです。次のように:

UPDATE `MW_Locations` SET `IDACCOUNT`=1 WHERE  `ID`=0 AND `UDID`=0 AND `IDACCOUNT`=0 AND `Name`='Panteon' AND `Lat`=25.6789521128695 AND `Lon`=100.336310863495 AND `IDMWDevice`=0 AND `Desc`='' AND `IDAction`=0 AND `Status`='' LIMIT 1;

サーバーに接続するheidisqlを使用しています私が作成した行は次のとおりです。ここに画像の説明を入力

列 IDACCOUNT のすべての行を値「1」で作成したいので、データベースのユーザー 1 に割り当てられ、後でデータの配列を json に取り込んでいくつかのタスクを作成します。また、IDをインクリメントしたいのですが、エラーになります。

4

1 に答える 1

1

DOUBLEフィールドLatとが完全に等しいことを要求しているため、このクエリは失敗しますLon。これらの列は、行を識別するために必要ありません。SQL ステートメントを次のように書き換えます。

UPDATE `MW_Locations` 
   SET `IDACCOUNT`=1 
 WHERE `Name`='Panteon';

この列のこの値は、行を識別するのに十分です。

MySQLマニュアルから引用します:

浮動小数点値は近似値であり、正確な値として格納されないため、比較で正確な値として処理しようとすると問題が発生する可能性があります。

于 2014-05-13T16:22:53.500 に答える