Prefacio
Los datos se utilizan ampliamente en el trabajo práctico y existen muchos productos de bases de datos, como Oracle, DB2, SQL2000 y mySQL; las bases de datos basadas en Linux integrado incluyen principalmente SQLite, Firebird, Berkeley DB y eXtremeDB.
Este artículo explica principalmente la base de datos SQLite. A través de esta pequeña base de datos integrada de código abierto, lo guiaremos para que domine algunas operaciones básicas de la base de datos. Estas operaciones son comunes en muchos sistemas. Se puede decir que puede aprenderlo todo.
SQLite
SQLite es una base de datos liviana y un sistema de administración de bases de datos relacionales compatible con ACID que está contenido en una biblioteca C relativamente pequeña.
AutorD.RichardHipp
En enero de 2000, Hipp comenzó a discutir con un colega la idea de crear una base de datos SQL integrada simple que usaría la biblioteca hash GNU DBM (gdbm) como backend y no requeriría instalación ni soporte administrativo. Posteriormente, cuando tenía tiempo libre, Hipp comenzó a implementar este trabajo y en agosto de 2000 se lanzó la versión 1.0 de SQLite.
[¡Aquí ofrezco mis rodillas a Dios! 】
Su objetivo de diseño es integrado y se ha utilizado en muchos productos integrados. Consume muy pocos recursos. En dispositivos integrados, sólo unos pocos cientos de K de memoria pueden ser suficientes. Puede admitir sistemas operativos convencionales como Windows/Linux/Unix y se puede combinar con muchos lenguajes de programación, como Tcl, C#, PHP, Java, etc., así como con la interfaz ODBC. También se compara con los dos. programas de código abierto Mysql y PostgreSQL Para los sistemas de gestión de bases de datos más famosos del mundo, su velocidad de procesamiento es más rápida que todos ellos.
Características de SQLite
-
Configuración cero: no es necesario instalar ni gestionar la configuración;
-
Una base de datos completa almacenada en un único archivo de disco;
-
Los archivos de bases de datos se pueden compartir libremente entre máquinas con diferente orden de bytes;
-
Admite un tamaño de base de datos de hasta 2 TB;
-
Lo suficientemente pequeño, el código fuente completo tiene aproximadamente 30.000 líneas de código C, 250 KB;
-
Opera con datos más rápido que las bases de datos más populares en la actualidad.
Instalar
La versión principal que se ejecuta ahora es sqlite3 y es muy conveniente instalarla en ubuntu.
sudo apt-get install sqlite sqlite3 安装应用程序
sudo apt-get install libsqlite3-dev 安装库+头文件,用代码操作数据库必须安装
Ver el número de versión: ingrese el comando sqlite3 para ingresar a la interfaz de operación, ingrese el comando .version para ver el número de versión detallado.
También puede utilizar el siguiente comando para instalar la herramienta de operación gráfica:
sudo apt-get install sqlitebrowser 图形化工具建立数据库
Además, también se puede implementar en Windows. Este artículo solo analiza el método de línea de comando para operar la base de datos en ubtuntu.
tipo de datos
Operar la base de datos implica principalmente operar tablas. Cada columna de la tabla tiene un determinado tipo de datos, como valores enteros, cadenas, booleanos, etc.
Los principales tipos de datos de Sqlite3 son los siguientes:
tipo de datos | definición |
---|---|
Tipo de datos NULO | Indica que el valor es NULL. |
ENTERO | Valor entero sin signo. |
REAL | Valor de punto flotante. |
TEXTO | Cadenas de texto, los métodos de codificación utilizados para el almacenamiento son UTF-8, UTF-16BE y UTF-16LE. |
GOTA | Almacena datos de Blob. Este tipo de datos es exactamente el mismo que los datos de entrada. 1 significa verdadero y 0 significa falso. |
Al mismo tiempo, sqlite3 también acepta los siguientes tipos de datos:
tipo de datos | definición |
---|---|
pequeño | Entero de 16 bits. |
entero | Entero de 32 bits. |
decimal(p,s) | El valor exacto p se refiere a cuántos dígitos decimales hay en total y s se refiere a cuántos decimales puede haber después del punto decimal. Si no se especifica, el sistema utilizará de forma predeterminada p=5 s=0. |
flotar | Número real de 32 bits. |
doble | Número real de 64 bits. |
carácter(n) | Cadena de longitud n, n no puede exceder 254. |
varchar(n) | Una cadena cuya longitud no es fija y cuya longitud máxima es n. n no puede exceder 4000. |
gráfico(n) | Igual que char(n), pero su unidad es dos bytes, n no puede exceder 127. Este formulario admite fuentes de dos bytes de longitud, como los caracteres chinos. |
vargráfico(n) | Una cadena de dos caracteres de longitud variable con una longitud máxima de n, n no puede exceder 2000 |
fecha | Contiene año, mes, fecha. |
tiempo | Contiene horas, minutos y segundos. |
marca de tiempo | Contiene año, mes, día, hora, minuto, segundo, milésima de segundo. |
restricción
Cada columna de la tabla tiene algunos atributos restrictivos. Por ejemplo, los datos de algunas columnas no se pueden repetir y algunas limitan el rango de datos. Las restricciones se utilizan para describir con más detalle los atributos de datos de cada columna. Las restricciones comunes en las bases de datos SQLite son las siguientes:
nombre | definición |
---|---|
NO NULO | - no vacío |
ÚNICO | solo |
CLAVE PRIMARIA | Clave primaria |
CLAVE EXTERNA | clave externa |
CONTROLAR | verificación de condición |
POR DEFECTO | por defecto |
NO NULO
Hay algunos campos que quizás no sepamos qué completar en este momento y no hay un valor predeterminado establecido para ellos. Al agregar datos, dejamos dichos campos en blanco y el sistema los considera valores NULL. Pero hay otro tipo de campo que se debe llenar con datos, si no se llena el sistema reportará un error. Estos campos se denominan campos NO NULOS y deben declararse con anticipación al definir la tabla.
ÚNICO
Además de la columna principal, también hay algunas columnas que no pueden tener valores duplicados.
CLAVE PRIMARIA
Generalmente es un número entero o una cadena, siempre que sea único. En SQLite, si la clave principal es de tipo entero, el valor de la columna puede crecer automáticamente.
CLAVE EXTERNA
Ya existe una tabla de Profesores en nuestra base de datos, si creamos otra tabla de Estudiantes, cada alumno de la tabla de Estudiantes debe corresponder a un profesor de la tabla de Profesores. Es muy sencillo, sólo necesitas crear un campo TeacherId en la tabla Students y guardar el número de Id del profesor correspondiente, de esta forma se establece una relación entre alumnos y profesores. El problema es: podemos almacenar un valor TeacherId para los estudiantes que no está en la tabla Teachers y no se encontrará el error. En este caso, puede declarar el campo TeacherId en la tabla Students como clave externa para que su valor corresponda al campo Id en la tabla Teachers. De esta manera, una vez que se almacena una identificación de maestro inexistente en la tabla Alumnos, el sistema informará un error.
Valor predeterminadoDEFAULT
Hay algunas columnas de campos especiales cuyos valores son básicamente los mismos en todos los registros. Solo se cambia a otros valores en casos individuales. Podemos establecer un valor predeterminado para dicha columna de campo.
Comprobación de estado VERIFICAR
Ciertos valores deben cumplir ciertas condiciones antes de que se les permita almacenarlos, lo que requiere el uso de esta restricción CHECK.
Comandos comunes
A continuación se presenta el uso de comandos comunes en el modo Shell.
Orden | Función |
---|---|
.ayuda | Muestra una lista de todos los comandos disponibles en el modo Shell |
.base de datos | Muestra información de la base de datos; contiene la ubicación de la base de datos actual |
columna .modo | Hace que los resultados del procesamiento de sentencias SQL se muestren alineados con columnas. |
lista de modos | columna |
.encabezados activados/desactivados | Active el interruptor de visualización del título de la columna para que los resultados de la consulta tengan títulos de columna cuando se muestren en la pantalla. |
.mesas | Enumere cuántas tablas hay en la base de datos actualmente abierta |
.salida | Salir del entorno SQLite |
.esquema de alimentos | Mostrar la declaración SQL cuando se creó la tabla de alimentos. |
.esquema | Mostrar las declaraciones cuando se crearon todas las tablas. |
.nullvalue CADENA | Al realizar consultas, se utiliza la cadena especificada en lugar de la cadena NULL de salida. El valor predeterminado es .nullvalue '' |
.espectáculo | Mostrar algunas configuraciones relacionadas con la salida definidas en el modo shell |
.archivo de salida.csv | Establezca el formato del archivo de salida en CSV y el nombre del archivo es file.csv |
.separador , | Configure la salida de datos de la columna mediante la instrucción de selección para que esté separada por "," |
.salida estándar de salida | Restaurar el contenido de salida al dispositivo de salida estándar (pantalla) |
[Nota] Todos los comandos SQLite comienzan con ., y no hay . delante de la declaración de operación.
Ejemplos de uso
Las declaraciones de operación de la base de datos son principalmente agregar, eliminar, modificar y buscar. A continuación utilizaremos algunos ejemplos para que pueda comprender estas operaciones básicas de la base de datos.
tipo de tabla
Supongamos que queremos crear una base de datos de gestión de enseñanza jxgl.db y la tabla de estudiantes ESTUDIANTE debe almacenarse en la base de datos.
sno | despega | sexo | sabio | departamento |
---|---|---|---|---|
95001 | yikou | metro | 21 | cs |
95002 | peng | metro | 21 | cs |
Según nuestro sentido común, los datos de cada columna tienen las siguientes características:
-
sno ID de estudiante: un valor entero. La ID de cada estudiante es única. Las escuelas generalmente usan ID de estudiantes para distinguir a todos los estudiantes y, en general, las ID de estudiantes están aumentando, por lo que configuramos sno como clave principal;
-
nombre de nombre: generalmente una cadena, se puede repetir, pero no puede estar vacío;
-
ssex género: cadena, puede estar vacía;
-
edad sabia: valor entero, asumiendo que la edad es mayor que 14 años;
-
sdept major: cadena, puede estar vacía, aquí el valor predeterminado es 'CS'.
A continuación implementamos todas las operaciones de esta base de datos paso a paso.
Crear base de datos de gestión docente "jxgl"
Para abrir y salir de la base de datos, utilice los siguientes comandos.
Crear mesa:
CREATE TABLE IF NOT EXISTS STUDENT(Sno integer primary key, Sname text not null, Ssex text,Sage integer check(Sage>14),Sdept text default 'CS');
Los atributos de esta tabla son el resultado de ejecutar los atributos de la tabla en la sección anterior:
Ver tabla:
Ver ESTUDIANTE indica que la tabla ha sido creada. 【Aviso】
-
La declaración de operación no es un comando, así que no agregue . delante de ella;
-
La declaración de operación debe ir seguida de, al final, si falta, se debe agregar un punto y coma;
-
Las declaraciones de operación son muy sensibles al ancho completo y medio ancho de las letras, y todos los símbolos deben usar medio ancho.
Insertar datos
La inserción de datos se implementa mediante la instrucción insertar en, como se muestra a continuación:
INSERT INTO STUDENT VALUES('95001','李勇','M',20,'CS');
INSERT INTO STUDENT VALUES('95002','刘晨','F',19,'IS');
INSERT INTO STUDENT VALUES('95003','王敏','F',18,'MA');
INSERT INTO STUDENT VALUES('95004','张立','M',18,'IS');
Los resultados de la ejecución son los siguientes:
Los datos insertados solo inicializan parte del valor.
A la columna que está configurada como no nula se le debe asignar un valor y el nombre de la tabla no distingue entre mayúsculas y minúsculas.
insert into student(sname,sage) values ('一口',19);
Ver tabla
Utilice la instrucción SELECT para ver el contenido de la tabla:
SELECT * FROM STUDENT;
El * indica ver toda la información de datos.
¿Has visto que el resultado parece incómodo? Ajustemos el formato de visualización:
sqlite> .headers on 显示列名
sqlite> .mode column 列对齐
Eliminar una línea de información
delete from student where sname='一口';
Como se puede ver en la imagen de arriba, el registro denominado "One Mouth" ha sido eliminado.
Modificar un determinado contenido de un registro
UPDATE student SET sage=29 WHERE sname='张立';
Modificar la estructura de la tabla de datos.
Para modificar la estructura de la tabla, debe utilizar la declaración ALTER TABLE. A continuación, agregamos la columna "spwd" a la tabla ESTUDIANTE, cuyo tipo de datos es TEXTO, y usamos el comando SELECT para ver el contenido de la tabla.
ALTER TABLE STUDENT ADD spwd TEXT default '123456';
Modificar el nombre de la tabla
alter table student rename to stu;
Eliminar la tabla de datos.
DROP TABLE STUDENT;
Eliminar columna
SQLite3 no implementa el comando para eliminar una columna. Para lograr esta operación, primero debe copiar la tabla a una nueva tabla, pero solo se integran las columnas requeridas y las columnas que se eliminarán no se heredan. Puede eliminar una columna de las siguientes maneras:
sqlite> create table test as select sno, sname,ssex,sage,sdept from stu;
sqlite> drop table stu;
sqlite> alter table test rename to stu;
Como puede verse en la figura anterior, la columna spwd que acabamos de agregar se ha eliminado.
sqlite avanzado
donde cláusula infantil
¿Qué debo hacer si no quiero ver todos los datos, pero quiero ver la información de una persona específica? Tenemos que usar la cláusula donde para lograr esto. La cláusula donde se puede combinar con declaraciones de operación para procesar adiciones, eliminaciones, modificaciones y búsquedas, y es la cláusula más utilizada.
Buscar registros por nombre:
Select * from student where sname='一口';
Buscar registros según el número de estudiante:
Select * from student where sno=95001;
Encuentre registros basados tanto en el nombre como en la edad:
select *from student where sname='一口' and sage=19;
Mostrar datos de dos columnas
select sno,sname from student ;
Copia de seguridad y recuperación de bases de datos
Ahora asumimos que queremos hacer una copia de seguridad de los alimentos de la tabla como alimentosdb.sql y usar comandos para restaurar la base de datos. Simplemente sigue estos pasos.
sqlite>.dump --把创建表及向表中插入记录的所有SQL语句显示在屏幕上
sqlite>.output foodsdb.sql --指定dump命令输出到文件的文件名
sqlite>.dump --输出创建并插入数据到基本表的SQL语句到output指定的文件
sqlite>.output stdout --恢复输出内容到标准输出设备(屏幕)
sqlite>.dump --此时输出的SQL语句转回到屏幕
sqlite>Drop table foods; --删除foods表语句说明:
El Drop anterior es una declaración SQL que se utiliza para eliminar la tabla especificada. Como es una declaración SQL, termina con ";"
sqlite>.read foodsdb.sql --执行foodsdb.sql中的包含的所有SQL语句,用来重建刚删除的4张表及相关数据
Bien, sigamos la operación paso a paso de Yiyijun. Básicamente, no tendrá ningún problema con las operaciones de adición, eliminación, modificación y consulta de sqlite3. También hay algunas otras cláusulas y uso de funciones en sqlite, que se introducirán en el próximo artículo.