Tipos de datos básicos de Mysql y CRUD

Tabla de contenido

tipo de datos básicos

comando de base de datos

Crear tablas y restricciones

construir mesa

restricción

Manipulación básica de datos (CRUD)


tipo de datos básicos

Entero: modificación opcional sin firmar

intyint    8 bits (-128 - 127)
smallint    16 bits (-32768 - 32767)
mediumint     24 bits (-8388608 - 8388607)
int     32 bits aproximadamente más o menos 2100 millones
bigint     64 bits 

Números reales (con punto decimal): cálculos aproximados usando aritmética de punto flotante estándar

float    4 bytes
double    8 bytes
decimal    permite hasta 65 dígitos
Ejemplo: decimal(5,2), descripción: longitud de 5 dígitos, 2 dígitos de precisión decimal, si la parte entera + 2 dígitos de decimales es demasiado larga, se producirá un error informado, si Solo si la parte decimal excede de 2, se redondeará a dos decimales

cuerda

char : longitud fija: msql asigna suficiente espacio a la vez de acuerdo con la longitud de la cadena definida
          Escenarios aplicables: cadenas más cortas y todos los valores están cerca de la misma longitud

cadena de longitud variable varchar

  • ​​​​​​Ahorra espacio en comparación con los tipos de longitud fija
  • Pero ROW_FOMAT=FIXED usa una longitud fija para cada fila
  • Escenarios aplicables: la longitud máxima de la cadena es mucho mayor que la longitud de evaluación y la columna se actualiza menos
  • Desventajas: la división de la página puede ocurrir cuando se realizan modificaciones frecuentes y grandes cambios en la longitud de la cadena.
  • No le dé a ciegas una longitud excesiva
  • Puede encontrar problemas de memoria de asignación de longitud máxima en tablas temporales o clasificación

Texto, Mancha

1. Ambos están diseñados para almacenar datos grandes
2. A diferencia de otros datos, se almacenan como objetos independientes
3. Cuando el valor es demasiado grande, use el área de almacenamiento externo para almacenar, solo use 1-4 bytes para almacenar cada fila un puntero

el texto almacena datos de caracteres : texto
                               pequeño
                               texto
                               pequeño texto medio texto
                               largo


Los blobs almacenan datos binarios : tinyblob
                                    smallblob
                                    blob
                                    mediumblob
                                    longblob

fecha y hora


    precisión de fecha y hora: segundos independientes
    de la zona horaria,
    rango de almacenamiento de 8 bytes: 1001 a 9999 años

timestamp
    guarda la cantidad de segundos desde la medianoche del 1 de enero de 1970,
    ocupa 4 bytes de espacio de almacenamiento
    . El rango: 1970 a 2038
    está relacionado con la zona horaria.
    El valor predeterminado es NOT NULL .
    Por lo general, intente usar la
    precisión de la marca de tiempo: segundos

fecha
    aaaa-MM-dd

tiempo
    HH:mm:ss

seleccionar identificador

  1. solía asociar
  2. como clave foránea en otra tabla
  3. Los números enteros suelen ser la mejor opción para las columnas de identidad.
  4. Usar el mismo tipo de datos en tablas relacionadas
  5. Trate de evitar las cadenas como columnas de identidad, especialmente las cadenas generadas aleatoriamente (como: uuid) hacen que tanto la inserción como la selección sean lentas
  6.     Los valores insertados se escriben aleatoriamente en diferentes posiciones del índice. Las inserciones son lentas y conducen fácilmente a divisiones de página y lecturas de disco aleatorias.
  7.     Lógicamente, las filas adyacentes se distribuyen en diferentes lugares en el disco y en la memoria, y la selección es lenta
  8.     Invalidar caché de consultas mysql
  9.     Si necesita almacenar uuid, debe eliminar "-"

(Los valores de inserción se escriben aleatoriamente en diferentes posiciones en el índice, la inserción es lenta y es fácil causar divisiones de página, las lecturas aleatorias del disco
    lógicamente las filas adyacentes se distribuyen en diferentes lugares en el disco y la memoria, la selección lenta
    hace que mysql consulte el caché inválido .
    Si necesita almacenar uuid, "-" debe eliminarse)

comando de base de datos

Crear la base de datos:

create database 数据库名

create database if not exists 数据库名 default charset utf8 collate utf8_general_ci;
//默认的数据库编码集:utf8
//collate表示校验规则为utf8_general_ci
	//常用排序类型
		//utf8_general_cs(区分大小写)
		//utf8_genera_ci(不区分大小写)

Ver todas las bases de datos:

show databases

Eliminar la base de datos:

drop database 数据库名

Nota: Eliminar la base de datos es una operación peligrosa, si desea eliminarla, se recomienda hacer una copia de seguridad primero

Crear tablas y restricciones

construir mesa

Formato de comando: crear tabla nombre de tabla (
                       nombre de columna 1 tipo de datos no nulo,
                       nombre de columna 2 tipo de datos,
                       nombre de columna 3 tipo de datos,
                       único (nombre de columna 1 [, nombre de columna 2,..., nombre de columna N])
                    )

Ejemplo:

create table t_student
(
   sid int not null comment '学号',
   sname varchar(60) not null comment '姓名',
   sex tinyint not null default 1 comment '性别:1男, 2女',
   age tinyint not null comment ' 年龄',
   icard varchar(18) not null comment '身份证,唯一约束',
   primary key (sid),
   unique key AK_Key_2 (icard)
) comment '学生信息表';

restricción

Restricción de clave principal : clave principal
                   agregar clave principal (alterar nombre de tabla de tabla agregar clave principal (nombre de clave principal))
                  eliminar clave principal (llave de alerta de nombre de tabla eliminar clave principal)

restricción no vacía:

 sid int not null comment'学号',

Restricciones de clave externa:

create table t_score
(
   id int not null comment'记录流水号',
   sid int not null comment'学号',
   cid int not null comment'课程ID',
   score float comment'成绩',
   primary key(id),
   foreign key(sid) references t_student (sid) on delete restrict on update redtrict ,
   unique key ak_key_2(sid, cid)
);
//说明: sid为本表的外键,关联t_student表中的的sid主键,on delete restrict on update redtrict说明在本表有数据的情况下,主表的关联键不能删除或更新。

               Agregar clave principal (nombre de la tabla de la tabla de alerta agregar clave externa (nombre de la clave externa) hace referencia al nombre de la tabla principal (nombre de la clave principal))

                Elimine la clave principal (nombre de la tabla de la tabla de alertas, nombre de la restricción de la clave externa)

Restricción única : nombre de restricción de clave única  (campo)

                  Cree una restricción única: nombre de tabla de tabla de alerta agregar único (nombre de columna 1 [, nombre de columna 2, ..])

                                           crear un índice único UserNameIndex en 't_user' ('username')

                  Eliminar restricción única: tabla de alerta nombre de tabla índice de caída restricción única nombre epítome

Restricción de valor predeterminado: predeterminado

Manipulación básica de datos (CRUD)

preparación de datos

create database db_t281
use db_t281

-- 1.学生表-t_student
-- sid 学生编号,sname 学生姓名,sage 学生年龄,ssex 学生性别
create table t_student 
(
	sid int not null  auto_increment comment '学号',
	sname varchar(40) not null comment '名称',
	birthday date not null comment '年龄',
	ssex tinyint not null default 1 comment '1男,2女',
	primary key (sid)
);

INSERT INTO t_student VALUES(1, '赵雷' , '1990-01-01' , 1);
INSERT INTO t_student VALUES(2 , '钱电' , '1990-12-21' , 1);
INSERT INTO t_student VALUES(3 , '孙风' , '1990-12-20' , 1);
INSERT INTO t_student VALUES(4 , '李云' , '1990-12-06' , 1);
INSERT INTO t_student VALUES(5 , '周梅' , '1991-12-01' , 2);
INSERT INTO t_student VALUES(6 , '吴兰' , '1992-01-01' , 2);
INSERT INTO t_student VALUES(7 , '郑竹' , '1989-01-01' , 2);
INSERT INTO t_student VALUES(9 , '张三' , '2017-12-20' , 2);
INSERT INTO t_student VALUES(10 , '李四' , '2017-12-25' , 2);
INSERT INTO t_student VALUES(11 , '李四' , '2012-06-06' , 2);
INSERT INTO t_student VALUES(12 , '赵六' , '2013-06-13' , 2);
INSERT INTO t_student VALUES(13 , '孙七' , '2014-06-01' , 2);


-- 2.教师表-t_teacher
-- tid 教师编号,tname 教师名称
CREATE TABLE t_teacher 
(
	tid INT NOT NULL AUTO_INCREMENT COMMENT '教师ID',
	tname VARCHAR(40) NOT NULL COMMENT '教师名称',
	PRIMARY KEY (tid)
);
INSERT INTO t_teacher VALUES(1 , '张五哥');
INSERT INTO t_teacher VALUES(2 , '李卫');
INSERT INTO t_teacher VALUES(3 , '年羹尧');

-- 3.课程表-t_course
-- cid 课程编号,cname 课程名称,tid 教师名称
CREATE TABLE t_course 
(
	cid INT NOT NULL COMMENT '课程ID',
	cname VARCHAR(50) COMMENT '课程名称',
	tid INT COMMENT '教师id',
	PRIMARY KEY (cid)
);
INSERT INTO t_course VALUES(1 , '语文' , 2);
INSERT INTO t_course VALUES(2 , '数学' , 1);
INSERT INTO t_course VALUES(3 , '英语' , 3);

-- 4.成绩表-t_score
-- sid 学生编号,cid 课程编号,score 成绩
CREATE TABLE t_score 
(
	sid INT NOT NULL COMMENT '学号,外键',
	cid INT NOT NULL COMMENT '课程id',
	score decimal(5,2) COMMENT '成绩',
	UNIQUE KEY ak_key_sid_cid (sid, cid)
);
INSERT INTO t_score VALUES(1 , 1 , 80);
INSERT INTO t_score VALUES(1 , 2 , 90);
INSERT INTO t_score VALUES(1 , 3 , 99);
INSERT INTO t_score VALUES(2 , 1 , 70);
INSERT INTO t_score VALUES(2 , 2 , 60);
INSERT INTO t_score VALUES(2 , 3 , 80);
INSERT INTO t_score VALUES(3 , 1 , 80);
INSERT INTO t_score VALUES(3 , 2 , 80);
INSERT INTO t_score VALUES(3 , 3 , 80);
INSERT INTO t_score VALUES(4 , 1 , 50);
INSERT INTO t_score VALUES(4 , 2 , 30);
INSERT INTO t_score VALUES(4 , 3 , 20);
INSERT INTO t_score VALUES(5 , 1 , 76);
INSERT INTO t_score VALUES(5 , 2 , 87);
INSERT INTO t_score VALUES(6 , 1 , 31);
INSERT INTO t_score VALUES(6 , 3 , 34);
INSERT INTO t_score VALUES(7 , 2 , 89);
INSERT INTO t_score VALUES(7 , 3 , 98);

select * from t_student;
select * from t_teacher;
select * from t_course;
select * from t_score;

La tabla de datos es la siguiente:

t_student tabla de estudiantes t_teacher tabla de profesores

t_course currículum t_score tabla de puntuación

  

 1) Consultar la información y puntajes del curso de los estudiantes cuyas calificaciones en el curso "1" son más altas que las del curso "2"

 SELECT stu.sid,stu.sname,stu.ssex,c1.cid, c1.score, c2.cid, c2.score
   FROM t_student stu
        INNER JOIN  (SELECT t1.sid, t1.cid, t1.score FROM t_score t1 WHERE t1.cid = 1 ) c1 ON stu.sid = c1.sid
        INNER JOIN  (SELECT t2.sid, t2.cid, t2.score FROM t_score t2 WHERE t2.cid = 2) c2 ON stu.sid = c2.sid 
 WHERE c1.score > c2.score

2) Consultar la información de los alumnos que cursan tanto los cursos "1" como los cursos "2"

//方法一
SELECT stu.sid,stu.sname,stu.ssex,c1.cid, c1.score, c2.cid, c2.score
   FROM t_student stu
        INNER JOIN  (SELECT t1.sid, t1.cid, t1.score FROM t_score t1 WHERE t1.cid = 1 ) c1 ON stu.sid = c1.sid
        INNER JOIN  (SELECT t2.sid, t2.cid, t2.score FROM t_score t2 WHERE t2.cid = 2) c2 ON stu.sid = c2.sid

//方法二
SELECT stu.`sid`,stu.`sname`, stu.`ssex`, tmp.c1num, tmp.c2num FROM t_student stu INNER JOIN 
   (
     SELECT t.`sid`, 
            SUM(CASE WHEN t.cid = 1 THEN t.`score` ELSE 0 END) c1num, 
            SUM(CASE WHEN t.cid = 2 THEN t.`score` ELSE 0 END) c2num FROM t_score t GROUP BY t.`sid`
   ) tmp ON stu.sid = tmp.sid AND tmp.c1num > 0 AND tmp.c2num > 0;

3) Infórmese sobre los cursos electivos "1" pero no sobre los cursos electivos "2"

SELECT stu.* FROM t_student stu 
  WHERE stu.sid IN(SELECT t1.sid FROM t_score t1 WHERE t1.cid = 1)
	AND stu.sid NOT IN (SELECT t1.sid FROM t_score t1 WHERE t1.cid = 2)

SELECT stu.`sid`,stu.`sname`, stu.`ssex`, tmp.c1num, tmp.c2num FROM t_student stu INNER JOIN 
   (
     SELECT t.`sid`, 
            SUM(CASE WHEN t.cid = 1 THEN t.`score` ELSE 0 END) c1num, 
            SUM(CASE WHEN t.cid = 2 THEN t.`score` ELSE 0 END) c2num FROM t_score t GROUP BY t.`sid`
   ) tmp ON stu.sid = tmp.sid AND tmp.c1num > 0 AND tmp.c2num = 0;

4) Consultar el caso donde el curso "1" no existe pero existe el curso "2"

 SELECT t1.sid,t1.cid,t1.score 
    FROM t_score t1 
  WHERE t1.cid = 2 AND t1.sid NOT IN (SELECT t2.sid FROM t_score t2 WHERE t2.cid = 1);

Consulte el puntaje más alto, el puntaje más bajo y el puntaje promedio de cada materia:
1) Columna de visualización: ID del curso, nombre del curso, puntaje más alto, puntaje más bajo, puntaje promedio, número de asignaturas optativas, índice de aprobación, índice promedio, índice excelente
2) El índice excelente la tasa es >=60, media: 70-80, excelente: 80-90, excelente: >=90
3) Los resultados de la consulta deben ordenarse en orden descendente por número de personas.

SELECT t2.cid '课程ID', 
       t2.cname '课程名称',
       MAX(t1.score) '最高分',
       MIN(t1.score) '最低分',
       ROUND(AVG(t1.score), 2) '平均分',
       COUNT(t1.sid) '选修人数',
       ROUND(SUM(CASE WHEN t1.score >= 60 THEN 1 ELSE 0 END) / COUNT(t1.sid), 2) '及格率',
       ROUND(SUM(CASE WHEN t1.score >=70 AND t1.score < 80 THEN 1 ELSE 0 END)/COUNT(t1.sid),2) '中等率',
       ROUND(SUM(CASE WHEN t1.score >=80 AND t1.score < 90 THEN 1 ELSE 0 END)/COUNT(t1.sid),2) '优良率',
       ROUND(SUM(CASE WHEN t1.score >= 90 THEN 1 ELSE 0 END)/COUNT(t1.sid), 2) '优秀率'
 FROM t_score t1
      INNER JOIN t_course t2 ON t1.cid = t2.cid
  GROUP BY t2.cid, t2.cname
  ORDER BY COUNT(t1.sid) DESC, t2.cid ASC;

Supongo que te gusta

Origin blog.csdn.net/qq_64001795/article/details/125939431
Recomendado
Clasificación