Experimento de base de datos 1: creación de una base de datos

Experimento 1 Crear una base de datos

uno. Objetivo

1. Aprenda a crear tablas de datos;

2. Profundice su comprensión de la relación entre tablas;

3. Comprender métodos simples de consulta y aplicaciones de datos en la base de datos.

2. Contenido experimental

  1. Cree una base de datos y asígnele el nombre de su identificación de estudiante.

(1) Proceso experimental:

Utilice la declaración SQL: CREAR BASE DE DATOS `111111111111`

Utilice herramientas visuales: cree una nueva base de datos: ingrese el nombre de la base de datos, el juego de caracteres y la clasificación

(2) Resultados experimentales:

Modo de declaración SQL :

 

Herramientas de visualización:

 

(3) Análisis de resultados:

Cuando MySQL crea una base de datos puramente numérica, debe usar comillas invertidas `` (haga doble clic en la tecla ESC dos veces en el modo de entrada en inglés) para ajustar el número antes de que la creación pueda tener éxito. De lo contrario, si crea una base de datos exclusivamente con números, Aparecerá "Tiene un error en su SQL". Consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta a utilizar cerca del error '61' en la línea 1", se deben incluir comillas invertidas y la base de datos puede ser creado correctamente.

2. Utilice declaraciones SQL y el entorno visual para crear cuatro tablas en la aplicación en la base de datos establecida, incluidos los nombres de atributos y tipos de datos, y cree correctamente las claves primarias y externas de las tablas.

(1) Proceso experimental:

Ingrese la declaración SQL:

-- S表

CREATE TABLE S (

    SNO CHAR (2) PRIMARY KEY,

    SNAME CHAR (3),

    STATUS CHAR (2),

    CITY CHAR (2)

);

-- P表

CREATE TABLE P (

    PNO CHAR (2) PRIMARY KEY,

    PNAME CHAR (3),

    COLOR CHAR (1),

    WEIGHT SMALLINT

);

 -- J表

CREATE TABLE J (

    JNO CHAR (7)PRIMARY KEY,

    JNAME CHAR (8),

    CITY CHAR (2)

);

-- SPJ表

CREATE TABLE SPJ (

    SNO CHAR (2),

    PNO CHAR (2),

    JNO CHAR (7),

    QTY INT,

    PRIMARY KEY (SNO, PNO, JNO),

    FOREIGN KEY (SNO) REFERENCES s (SNO),

    FOREIGN KEY (PNO) REFERENCES p (PNO),

    FOREIGN KEY (JNO) REFERENCES j (JNO)

);

Entorno visual: cree una nueva tabla: ingrese el nombre del campo correspondiente, el tipo de datos, las restricciones de integridad, etc. y guárdela.

(2) Resultados experimentales:

Modo de declaración SQL :

Entorno visual:

 

 

(3) Análisis de resultados:

Tanto la declaración SQL como el entorno visual pueden crear correctamente estas cuatro tablas y crear correctamente las claves primarias y externas de las tablas.

Al establecer una clave externa para una tabla, solo puede establecer una, no varias. Si desea establecer varias, debe usar restricciones a nivel de tabla para poner varios campos entre corchetes. Si la clave principal solo involucra un campo. Si es así , puede utilizar restricciones a nivel de tabla y restricciones a nivel de columna. Al establecer restricciones de clave externa, preste atención a los campos referenciados y a los campos referenciados.

3. Agregue registros del tamaño adecuado a la Lista de piezas J (al menos 1000 registros, preferiblemente decenas de miles, el nombre del proyecto se puede nombrar simplemente con "proyecto + número de serie", cada nombre de proyecto es único); luego cree una columna única basada en el índice del atributo del nombre del proyecto y escriba declaraciones de consulta para verificar si el índice creado es válido. (Consejo: las condiciones en la declaración de consulta deben usar el atributo de nombre del proyecto; ejecute la declaración antes de crear el índice, ejecútela después de crear el índice y luego compare los dos tiempos de ejecución).

(1) Proceso experimental:

Declaración SQL para insertar 100.000 datos mediante procedimiento almacenado:

---5个城市的循环输入

DROP PROCEDURE IF EXISTS proc_insert_J;

DELIMITER $$

CREATE PROCEDURE proc_insert_J (IN args INT)

BEGIN

    DECLARE i INT DEFAULT 0 ; DECLARE

           flag INT DEFAULT 0 ; DECLARE

              city CHAR (2) ; START TRANSACTION ;

           REPEAT

           SET i = i + 1 ; CASE flag

           WHEN 0 THEN

           SET city = '北京' ;

           WHEN 1 THEN

           SET city = '长春' ;

           WHEN 2 THEN

           SET city = '天津' ;

           WHEN 3 THEN

           SET city = '唐山' ;

           ELSE

           SET city = '南京' ;

           END CASE ;

           SET flag = (flag + 1) % 5 ; INSERT INTO J ()

           VALUES

              (

                  concat('J', i),

                  CONCAT('项目', i),

                  city

              ) ; UNTIL i >= args

           END

           REPEAT

              ; COMMIT ;

           END$$



DELIMITER ;

    CALL proc_insert_J (100000) ;

Pruebe el proceso de ejecución con la siguiente declaración:

-- 查询J表所有数据

SELECT * FROM J;

-- 查询项目96666 

SELECT JNAME FROM J WHERE JNAME='项目96666';

-- 添加索引再进行测试查询时间

ALTER TABLE J ADD UNIQUE INDEX  MYJNAME (JNAME);

-- 查询J表所有数据

SELECT * FROM J;

-- 查询项目96666 

SELECT JNAME FROM J WHERE JNAME='项目96666';

(2) Resultados experimentales:

Inserte 100.000 datos:

Sin agregar índice:

 

Agregar índice:

 

(3) Análisis de resultados:

 Cuando el procedimiento almacenado insertó 100.000 datos, indicó que los datos eran demasiado largos. Más tarde, se descubrió que la longitud del campo original era menor que la longitud de los datos, por lo que se amplió la longitud del campo de la tabla J. Actualmente, la longitud de la tabla J es suficiente para insertar 100.000 datos. ¿Cómo insertar varias ciudades en un bucle? Como no entiendo la sintaxis, utilicé la idea de la estructura de rama if en Java para implementar las ramas en el procedimiento almacenado de MySQL. Más tarde, el profesor me recordó que usara el caso cuando declaración para hacer que el código sea más hermoso y fácil de operar. Todavía estoy pensando si hay algún método de implementación como datos, etc.

 Del análisis de la velocidad de ejecución del índice, podemos encontrar que existe una diferencia significativa en la velocidad de ejecución de la consulta JNAME='Project 96666' antes y después de agregar el índice. Para consultar todos los datos, podemos encontrar que no hay gran diferencia en la velocidad de ejecución de agregar el índice y no agregar el índice. Consultar datos Se puede ver que el índice no es válido al consultar todos los datos. A través de la declaración ''EXPLAIN SELECT * FROM J;'', puede encontrar que el valor del campo de tipo consultado es TODO, lo que significa que la consulta es una consulta global en lugar de una consulta de índice. Para la declaración ' 'EXPLAIN SELECT JNAME FROM J WHERE JNAME='Project 96666';'' se puede encontrar que type=const indica que la consulta utiliza el índice. De hecho, hay muchas fallas en el índice de consulta, como consultas difusas.

3. Vuelque la base de datos en el directorio raíz de la unidad D y asígnele el nombre de ID de estudiante. Haga clic derecho y seleccione "Volcar archivo SQL" y seleccione "Estructura y datos".

(1) Proceso experimental:

Seleccione una tabla en el entorno Navicat, haga clic derecho en "Volcar archivo SQL" ---> haga clic en "Estructura y datos" ---> seleccione la ubicación y haga clic en "Guardar".

(2) Resultados experimentales:

(3) Análisis de resultados:

Tenga en cuenta que si elige exportar estructura y datos, no habrá datos. Después de exportar, ábralo con el Bloc de notas para ver la declaración SQL correspondiente y los datos correspondientes.

4. Complete la copia de seguridad y restauración de la base de datos. Primero, cree una nueva copia de seguridad para la base de datos creada, luego copie la copia de seguridad y trabaje con sus compañeros para restaurar la copia de seguridad en otra computadora. Después de la restauración, verifique si la información en la base de datos original existe.

(1) Proceso experimental:

Proceso de copia de seguridad:

Abra la base de datos "111111111111" ---> "haga clic derecho" y seleccione copia de seguridad ---> haga clic en "Nueva copia de seguridad" ---> haga clic en copia de seguridad. Puede ver que hay un archivo de copia de seguridad adicional debajo de la copia de seguridad y cambiarle el nombre. a "Copia de seguridad de la base de datos del Experimento 1". Esto puede copiarlo a otra computadora u otra cuenta para realizar una copia de seguridad y restauración.

Proceso de copia de seguridad y restauración:

En otra cuenta, primero cree una base de datos "Experimento 1" sin ningún dato. En este momento, cópiela y restaure la copia de seguridad. Después de la restauración, podrá ver los mismos datos.

(2) Resultados experimentales:

Crea una nueva copia de seguridad:

 

Restaurar copia de seguridad:

Proceso de restauración:

Después de la restauración, puedes ver estas tablas:

Abra la tabla y podrá ver los datos normalmente:

 

(3) Análisis de resultados:

La copia de seguridad y la restauración se pueden completar normalmente

tres. Resumen del experimento

Pregunta 1: Cuando utilice instrucciones SQL para crear una base de datos con nombre numérico, se informará un error: Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta que debe usar cerca de '61' en línea 1.

En este momento, debe agregar comillas invertidas al nombre de la base de datos, es decir, "111111111111", y no se informará ningún error. Método de entrada de comillas invertidas: haga doble clic en la tecla debajo de ESC en el modo de entrada en inglés.

Pregunta 2: Es muy conveniente crear tablas de datos utilizando el entorno visual. También puede generar automáticamente declaraciones SQL a través de la opción de vista previa de SQL. Durante el proceso de aprendizaje, aún se recomienda programar declaraciones SQL usted mismo para mejorar las capacidades de diseño de su base de datos.

Pregunta 3: Problema al insertar 1000 datos. Sentencias SQL proporcionadas por el profesor.

DELIMITER $$

CREATE PROCEDURE proc_insert_J(in args int)

BEGIN

DECLARE i INT DEFAULT 0;

--  开启事务,不开的话100w条按天算

start transaction;

REPEAT

set i=i+1;

insert into J values(concat('J',i),CONCAT('',i),'济南');

UNTIL i >= args END REPEAT;

commit;

END

$$

DELIMITER ;

call proc_insert_J(100000);

Pregunta 4: Agregar un índice. Parece que al consultar todos los datos, la función del índice no es obvia. Cuando simplemente se consulta un determinado dato, la indexación puede acortar significativamente el tiempo.

Supongo que te gusta

Origin blog.csdn.net/pzcxl/article/details/130312458
Recomendado
Clasificación