У SQLite наступне твердження було б успішним, і рядок буде вставлено / оновлено у SALARY
стовпчик типу INTEGER
:
update employee set salary='TOO MUCH' where emp_id=1;
Зауважте, що нуль не буде вставлено / оновлено, а фактична рядок "TOO MUCH" , тому мова не йде про автоматичне перетворення типу.
FAQ задає:
Це особливість , а не помилка. SQLite використовує динамічне введення тексту. Він не застосовує обмежень типу даних. Дані будь-якого типу можна (як правило) вставляти в будь-який стовпець. Ви можете розмістити рядки довільної довжини в цілі стовпці, числа з плаваючою точкою в булевих стовпцях або дати в стовпці символів. Тип даних, який ви призначаєте стовпцю в команді CREATE TABLE, не обмежує, які дані можна ввести у цей стовпець. Кожен стовпець може містити довільну довжину рядка. (Є один виняток: стовпці типу INTEGER PRIMARY KEY можуть містити лише 64-розрядне ціле число, підписане. Помилка виникла, якщо ви спробуєте вставити що-небудь, крім цілого числа, у стовпець INTEGER PRIMARY KEY.)
Тож ця поведінка явно навмисна, проте мені цікаво, чому SQLite має таку поведінку, оскільки більшість інших баз даних SQL, про які я знаю, поводяться зовсім інакше, вони підняли б помилку або перетворили рядок 0, намагаючись вставити нечисловий рядок у числовий стовпчик.
Чи була б бібліотека SQLite менш корисною без такої поведінки?
Це зроблено так, щоб зробити бібліотеку маленькою і швидкою?
Чи буде бібліотека SQLite значно повільнішою чи більшою, щоб наробити помилки під час спроби вставити рядок у числовий стовпець?