Требуется ли чтение после обновления, а затем проверка обновленных данных при работе с SQLite через PHP или Android?

#php #android #sqlite

#php #Android #sqlite

Вопрос:

Требуется ли чтение после обновления, а затем проверка обновленных данных при работе с SQLite через PHP или Android?

Например,
если следующий код возвращает TRUE, означает ли это, что все в порядке и проверка с помощью считанных данных и сравнения с исходными данными не требуется?

 public function updateRecord($C_ID,$C_Data) 
{
    try 
    {
        $sql = "UPDATE C "
        . "SET C_Data = :C_Data "
        . "WHERE C_ID = :C_ID";

        $stmt = $this->pdo->prepare($sql);

        $stmt->bindValue(':C_ID', $C_ID);
        $stmt->bindValue(':C_Data', $C_Data);

        $stmt->execute();
        return TRUE;
   } 
   catch (PDOException $e) 
   {
       return FALSE;
   }
}
 

Ответ №1:

SQLite гарантирует принципы ACID, из которых A — атомарность, а C — согласованность.

Атомарность относится к идее, что запись либо полностью завершается неудачей и выполняется откат, либо полностью завершается изменением состояния базы данных (db).

Согласованность относится к идее о том, что до тех пор, пока вы следуете принципам транзакционной записи в БД, гарантируется, что она будет записана (до тех пор, пока операция возвращает успех) таким образом, чтобы она поддерживала «состояние» базы данных, т. Е. Удовлетворяются все определенные вами отношения.

Из официальной документации — SQLite реализует сериализуемые транзакции, которые являются атомарными, согласованными, изолированными и долговечными, даже если транзакция прервана из-за сбоя программы, сбоя операционной системы или сбоя питания компьютера.

Конечно, вы можете в конечном итоге неправильно записывать транзакции, поэтому вам следует реализовать тестовые примеры и обрабатывать исключения для ваших записей в БД, поскольку согласованность данных не гарантирует правильность данных.

Комментарии:

1. Я не понимаю «согласованность данных не гарантирует правильность данных», если он возвращает true, это означает, что все в порядке, закончено и правильно, хорошо?

2. Да, если он возвращает true, это означает, что транзакция успешно изменила состояние БД. Согласованность подразумевает, что данные были успешно вставлены в вашу базу данных. Правильность подразумевает, что данные верны в соответствии с вашим вариантом использования — надуманным примером может быть — вы вставляете данные строки, которые являются неполными, но поскольку вы определили столбцы как обнуляемые, база данных примет транзакцию и вставит строку. В этом случае данные БД являются согласованными, но неверными, и на них нельзя полагаться. следовательно, вам придется обнулять данные в вашем коде при их извлечении

3. итак, если я буду уверен, что вставляю истинные и полные данные, гарантируется, что данные будут вставлены верно и нет необходимости в проверке?

4. да, но вы сами можете вставлять неправильные данные, вам следует спроектировать базу данных так, чтобы она не вставляла неправильные данные / распространяла, удаляла правильно и обрабатывала исключения sqlite