En SQLite, la siguiente instrucción sería exitosa y la cadena se insertaría / actualizaría en la SALARY
columna que es de tipo INTEGER
:
update employee set salary='TOO MUCH' where emp_id=1;
Tenga en cuenta que no se insertará / actualizará cero, sino la cadena "DEMASIADO" real , por lo que no se trata de la conversión de tipo automática.
Las preguntas frecuentes dicen:
Esta es una característica , no un error. SQLite utiliza la tipificación dinámica. No aplica restricciones de tipo de datos. Los datos de cualquier tipo pueden (generalmente) insertarse en cualquier columna. Puede colocar cadenas de longitud arbitrarias en columnas enteras, números de coma flotante en columnas booleanas o fechas en columnas de caracteres. El tipo de datos que asigna a una columna en el comando CREATE TABLE no restringe qué datos se pueden poner en esa columna. Cada columna puede contener una cadena de longitud arbitraria. (Hay una excepción: las columnas de tipo INTEGER PRIMARY KEY solo pueden contener un entero con signo de 64 bits. Se producirá un error si intenta colocar algo distinto de un entero en una columna INTEGER PRIMARY KEY).
Por lo tanto, este comportamiento es claramente intencional, sin embargo, me pregunto por qué SQLite tiene este comportamiento, ya que la mayoría de las otras bases de datos SQL que conozco se comportan de manera muy diferente, generarían un error o convertirían la cadena 0 al intentar insertar una cadena no numérica en Una columna numérica.
¿La biblioteca SQLite sería menos útil sin este comportamiento?
¿Está hecho así por diseño para mantener la biblioteca pequeña y rápida?
¿La biblioteca SQLite sería significativamente más lenta o más grande para generar errores al intentar insertar una cadena en una columna numérica?