#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