[Operação e manutenção front-end] Abra os dois canais de Ren e Du! (Nenhuma versão absurda do comando mysql)

ORM

Alguns alunos que não conhecem ORM podem entender que é equivalente a usar low code para construir uma interface. Low code é uma ferramenta mais abstrata para fazer js, html e css. Aqui, significa ferramentas mais abstratas para fazer coisas nativas do MySQL.

Algumas pessoas dirão que eu uso ORM para escrever SQL quando uso nodejs. Não preciso aprender SQL nativo. Isso é completamente errado. Você pode acessar o github para ver a ferramenta ORM. Há muitos problemas que ela não tem resolvido. Esse tipo de coisa você Se você não conhece SQL nativo, é muito difícil solucionar problemas primeiro. Então você descobre, você espera que outros resolvam o problema antes de ficar online?

Existem também tabelas conjuntas um pouco mais complicadas e o desempenho do SQL escrito pelo ORM é ruim.

Classificação e características das declarações SOL

No início não prestei muita atenção a essa classificação e características. Mais tarde, fiquei confuso ao aprender SQL. Achei que seria mais fácil memorizar instruções SQL depois de ter a classificação.

A linguagem SQL é dividida em quatro categorias: Linguagem de Consulta de Dados (DQL), Linguagem de Manipulação de Dados (DML), Linguagem de Definição de Dados (DDL) e Linguagem de Controle de Dados (DCL).

Veja, todos são DxL, apenas o x no meio é diferente. D refere-se a Dados, que significa dados, e L refere-se a Linguagem.

DQL

Então, vamos examinar primeiro o DQL. Q refere-se à consulta. Consulta

Nossos SELECT, FORM e WHERE comuns são todas tabelas de consulta. Podemos simplesmente entendê-los como instruções DQL.

SELECT select_list [ INTOnew_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUPBY group_by_expression ] 

DDL

O D do meio refere-se à Definição, que entendemos simplesmente como a linguagem usada para criar bibliotecas e tabelas.

CREATE创建 
ALTER修改 
DROP删除COMMENT 注释 

DML

M significa manipulação. Nós simplesmente entendemos isso como operações de adição, atualização e exclusão para cada dado na tabela de dados.

INSERT添加 
UPDATE 更新 
DELETE删除 

DCL

C significa controle, que significa simplesmente transações no mysql.

COMMIT提交 
ROLLBACK 回滚 
SET TRANSACTION设置当前事务的特性,它对后面的事务没有影响 

login mysql

por exemplo:

Digite o seguinte comando na interface da linha de comando para fazer login no MySQL:

mysql -u username -p 

Entre eles, “nome de usuário” é o seu nome de usuário MySQL e “-p” significa que você precisa inserir uma senha.

Em seguida, será solicitada sua senha. Após inserir a senha e pressionar Enter, se o login for bem-sucedido, você verá o prompt do MySQL, indicando que efetuou login com sucesso no servidor MySQL.

Se você não estiver efetuando login nesta máquina, o parâmetro -h será necessário.

"-h" é uma opção no login da linha de comando do MySQL, usada para especificar o nome do host ou endereço IP do servidor de banco de dados MySQL.

DDL

Criar banco de dados

Crie banco de dados diretamente

Sintaxe: Observe que as declarações entre colchetes são opcionais

CREATE DATABASE [IF NOT EXISTS] 数据库名 

Embora seja opcional, recomendo adicioná-lo, caso contrário será relatado um erro se os dados não existirem.

Comparado com js, é na verdade um novo banco de dados orientado a objetos.

Crie um banco de dados especificando o conjunto de caracteres

Na versão 5.7, o conjunto de caracteres padrão do MySQL suporta apenas inglês, então o conjunto de caracteres geralmente é definido como utf8 para suportar todos os idiomas. O padrão do MySQL 8 é utf8mb4. Devemos usar 8. As pessoas desistiram oficialmente de manter 5.7.

Aqui está uma breve conversa sobre a diferença entre utf8 e utf8mb4:

UTF-8 e UTF8MB4 são dois conjuntos de caracteres no MySQL.

  • UTF-8: Este é um conjunto de caracteres Unicode comum que pode representar a maioria dos caracteres, mas não pode representar alguns caracteres especiais (como caracteres Emoji).
  • UTF8MB4: Este é um conjunto estendido de caracteres UTF-8 que pode representar todos os caracteres Unicode, incluindo caracteres Emoji.

Quando você precisar armazenar mais caracteres, especialmente caracteres Emoji, é recomendado usar o conjunto de caracteres UTF8MB4. Ao usar o conjunto de caracteres UTF8MB4, você precisa usar 4 bytes para armazenar um caractere, mas com o conjunto de caracteres UTF-8, você só precisa usar 3 bytes. Portanto, se o seu armazenamento de dados precisar armazenar mais caracteres, o uso do conjunto de caracteres UTF8MB4 poderá gerar mais sobrecarga de espaço.

gramática:

CREATE DATABASE [IF NOT EXISTS] 数据库名 CHARACTER 字符集 

Comparado com js, na verdade é um novo banco de dados orientado a objetos, e então qual é o conjunto de caracteres de parâmetro?

Regras de classificação

Vamos ilustrar as regras de classificação de dados de utf8_general_ci e utf8_bin especificadas pelo conjunto de caracteres utf8:

  • utf8_general_ci refere-se ao sentido pouco claro de maiúsculas e minúsculas, a e A serão considerados consistentes no conjunto de caracteres.
  • utf8_bin precisa ser diferenciado

gramática:

CREATE DATABASE [IF NOT EXISTS] 数据库名 CHARACTER 字符集 COLLATE utf8_bin 

Comparado com js, isso serve para passar o conjunto de caracteres e as regras de classificação como parâmetros.

Ver banco de dados

Ver todos os bancos de dados

SHOW databases 

Ver o banco de dados especificado

Você pode ver informações como instruções de criação de tabela e métodos de codificação.

SHOW CREATE DATABASE 数据库名 

Modificar banco de dados

Isso raramente é usado e acho que mudar isso é importante.

Você só pode modificar o conjunto de caracteres e o agrupamento do banco de dados, mas não o nome do banco de dados.

gramática:

ALTER DATABASE 数据库名 CHARACTER SET 字符集 [COLLATE 排序规则] 

Comparado com js, você altera o valor do objeto, que é um método setter para alterar o valor interno.

Excluir banco de dados

gramática:

DROP DATABASE 数据库名 

Comparado com js, é para permitir que o lixo do sistema colete os objetos de instância que você cria.

Usar banco de dados

Veja o banco de dados em uso

gramática

SELECT DARAVASE() 

Alternar banco de dados

USE 数据库名 

Folha de operação

Criar a tabela

CREATE TABLE 表名 (字段名1 数据类型,字段名2 数据类型,....) 

Comparado com js, é semelhante à criação orientada a objetos de uma instância de uma tabela.Os parâmetros passados ​​​​para a instância são o nome do campo e o tipo de dados.

Por exemplo:

CREATE TABLE student {id INT,name VARCHAR(20),birthday date
} 

Aqui classificamos todos os tipos de dados:

inteiro

Vamos começar com o tipo de dados mais básico, inteiro. Primeiro, use uma tabela para resumir:

tipo de dados Número de bytes mínimo assinado máximo assinado mínimo não assinado valor máximo não assinado
TINYINT 1 -128 127 0 255
PEQUENO 2 -32768 32767 0 65535
MÉDIO 3 -8388608 8388607 0 16777215
INT 4 -2147483648 2147483647 0 4294967295
GRANDE 8 -9223372036854775808 9223372036854775807 0 18446744073709551616

Por padrão, os números inteiros são positivos e negativos. Se você precisar de um número positivo puro, adicione a palavra-chave unsigned.

ponto flutuante

tipo de dados Número de bytes Observação
flutuador 4 Ponto flutuante de precisão única
dobro 8 Ponto flutuante de dupla precisão

Observe aqui que o tipo de ponto flutuante pode indicar quantas

CREATE TABLE test_float (num float(5, 2)
) engine=innodb charset=utf8; 

A partir deste resultado, resumimos as regras de uso de float(M,D) e double(M,D):

  • D representa a precisão após o ponto decimal dos dados de ponto flutuante. Se exceder os dígitos D, será arredondado, ou seja, 1,233 será arredondado para 1,23 e 1,237 será arredondado para 1,24.
  • M representa o número total de dígitos em dados de ponto flutuante. D=2 significa que um total de cinco dígitos são suportados, ou seja, apenas três dígitos são suportados antes do ponto decimal.

Tipo de ponto fixo

O tipo de ponto fixo é decimal e seu uso é igual ao número de ponto flutuante acima.

  • As regras de decimal(M,D) são as mesmas de float/double, mas a diferença é que float/double tem como padrão a precisão real quando M e D não são especificados, enquanto decimal tem como padrão decimal(10, 0) quando M e D não são especificados.

tipo de data

A seguir, vamos dar uma olhada nos tipos de data no MySQL. O MySQL oferece suporte a cinco formas de tipos de data: data, hora, ano, data e hora e carimbo de data/hora. Use uma tabela para resumir esses cinco tipos de data:

tipo de dados Número de bytes Formatar Observação
data 3 aaaa-MM-dd Valor da data de armazenamento
tempo 3 HH:mm:ss Armazene horas, minutos e segundos
ano 1 aaaa Anos de armazenamento
data hora 8 aaaa-MM-dd HH:mm:ss Armazenar data+hora
carimbo de data/hora 4 aaaa-MM-dd HH:mm:ss Armazenar data + hora, pode ser usado como carimbo de data/hora

Tipos de caracteres: tipos char e varchar

Char é complicado, armazena bytes, mas um caractere chinês não corresponde a um byte. Varchar é baseado em caracteres, então geralmente usamos varchar

1.char é uma string de comprimento fixo e seu intervalo de comprimento é de 0 a 255 e não tem nada a ver com o método de codificação. Não importa qual seja o comprimento real do caractere, ele será armazenado de acordo com o comprimento especificado. Se não é suficiente, será preenchido com espaços; varchar é uma string de comprimento variável. O intervalo de comprimento no banco de dados codificado em utf8 é 0-21844
2. O número real de bytes ocupados por char é o número de bytes ocupados por os caracteres armazenados, e o número real de bytes ocupados por varchar são os caracteres armazenados +1 ou +2 ou + 3
3.O MySQL processará todos os espaços finais ao processar dados do tipo char, mas não dados do tipo varchar.

Ver tabela

Ver todas as tabelas

show tables 

Ver estrutura da tabela

DESC 表名 

Veja a instrução de criação de tabela

SHOW CREATE TABLE 表名; 

O mecanismo padrão para criação de tabela é innodb, os dados padrão são preenchidos com nulos e a classificação padrão não diferencia maiúsculas de minúsculas.

Copiar estrutura da tabela

gramática:

CREATE TABLE 新表名 LIKE 旧表名 

Excluir tabela

DROP TABLE 表名 

DML

Inserir registro

INSERT INTO 表名 (字段名1,字段名2...) VALUES (值1,值2...) 

Observe que, exceto para tipos numéricos, os valores de outros tipos de campos devem ser colocados entre aspas.

replicação de worm

Com base nos dados existentes, copie os dados originais e insira-os na tabela correspondente.

Observe que você precisa criar uma tabela com a mesma estrutura da tabela de origem para copiar.

INSERT INTO 表名1 SELECT * FROM 表名2 

Atualizar registro da tabela

Atualizações incondicionais

UPDATE 表名 SET 字段1=值1[字段2=值2...] 

O valor de toda a coluna mudará

Atualizar com condições

UPDATE 表名 SET 字段1=值1[字段2=值2...][WHERE 条件] 

Apagar registro

Excluir condicionalmente

Exclua determinadas linhas de dados:

DELETE FROM 表名 WHERE 条件 

Excluir sem condições

gramática

DELETE FROM 表名 

Todos os dados da tabela serão excluídos

Linguagem de consulta de dados DQL

Consulta de tabela única

Consulta simples

Consultar todos os dados da tabela

gramática

SELECT * FROM 表名 

Comparado com js, esta é a instrução do loop for

const result = [];
for(let i = 0; i < 学生表数组.length; i++) {result.push(学生表数组[i])
}
return result; 

Consultar todos os dados de uma coluna específica da tabela

Claro, você pode consultar campos específicos:

SELECT 字段名1,字段名2,...字段名n FROM 表名 

Comparado com js, esta é a instrução do loop for

// 下面的pick函数,就是从一个对象里取对应属性名的函数
// 很多工具库都有,比如loadash,自己写一个也很简单
const result = [];
for(let i = 0; i < 学生表数组.length; i++) {result.push(pick(学生表数组[i], ...所有字段))
}
return result; 

Consulta de alias

Aliasing é dar um nome personalizado ao nome da coluna. Geralmente usamos a palavra-chave AS para conseguir isso.

declaração

SELECT 字段名1 AS 别名,字段2 AS 别名... FROM 表名 AS 表的别名 

Remover valores duplicados

Ao consultar a coluna especificada, se houver dados duplicados na coluna especificada, eles serão exibidos por padrão.

SELECT DISTINCT 字段名 FROM 表名 

Por exemplo, os dados que você consulta:

SELECT DISTINCT name FROM student 

irá filtrar todas as linhas com o mesmo campo de nome

Os resultados da consulta participam dos cálculos

Na instrução de consulta, a coluna consultada pode realizar operações matemáticas (adição, subtração, multiplicação e divisão) com outros valores. Os resultados da operação afetarão apenas a exibição e não afetarão os dados da tabela.

gramática

SELECT 列名1 + 固定值 FROM 表名
SELECT 列表1 + 列名2 FROM 表名 

O acima é limitado à adição de números. Por exemplo, temos uma tabela que é

Depois adicionamos 5 anos na coluna de idade, então será exibido

Claro, você também pode usar aliases para melhorar a aparência dos nomes das colunas.

A propósito, colunas e adição de colunas também estão entre elas

operador de comparação

Nas condições de consulta, você pode usar vários operadores de comparação para expressar condições de consulta.

Por exemplo:

  • = igual a -> maior que
  • < menos que
  • <= menor ou igual a ->= maior ou igual a
  • <> ou
  • != não é igual a

Operadores lógicos

  • e ou && múltiplas condições são atendidas ao mesmo tempo
  • ou ou || uma das múltiplas condições é atendida
  • não ou! insatisfeito

Consulta dentro do intervalo especificado em

gramática

SELECT 字段名 FROM 表名 WHERE 字段 [not] in (数据1,数据2...) 

consulta difusa

gramática

SELECT * FROM 表名 WHERE 字段名 like “通配符字符串” 
  • % significa 0 ou mais caracteres (qualquer número de caracteres)
  • _ representa um personagem

A consulta é nula

Para consultar dados para os quais um campo está vazio (nulo), em vez de usar = null (null não é igual a nenhum valor), use is null.

Por exemplo:

SELECT * FROM student WHERE english IS null 

organizar

A instrução sort é executada após a instrução SELECT

gramática

SELECT 字段名 FROM 别名 [WHERE 条件] ORDER BY 字段名 [ASC|DESC] 
  • Ordem crescente padrão ASC
  • Ordem decrescente DESC

função de linha única

Uma função de linha única refere-se ao cálculo de cada linha de dados e à obtenção de uma linha de resultados de saída.

Função numérica

abdômen (x)

Encontre o valor absoluto

Por exemplo

SELECT ABS(-1) -- 返回1 

teto (x)

Arredondado

Por exemplo

SELECT CEIL(1.5) --返回2 

chão (x)

Arredondar para baixo

rodada (x)

Arredondamento

Funções de string

concat(s1, s2,…sn)

Strings s1, s2 e outras strings são combinadas em uma string

localizar (s1, s)

Obtenha a posição inicial de s1 da string s

inferior(es)

Altere todas as letras da string s para letras minúsculas

superiores

Converter string em maiúscula

substituir(s, s1, s2)

Substitua a string s2 pela string s e encontre a string s1

substr(s, início, comprimento)

Interceptar uma substring de comprimento comprimento da posição inicial da string s

guarnição(ões)

Remover espaços iniciais e finais

função agregada

A consulta da função de agregação é uma consulta vertical. Ela calcula o valor de uma coluna e retorna um valor de resultado. A função agregada ignora valores nulos.

contar

Conte o número de registros na coluna especificada. Os registros NULL não serão contados.

SOMA

Calcule a soma numérica da coluna especificada. Se não for do tipo numérico, o resultado do cálculo será 0

MÁX.

Calcule o valor máximo da coluna especificada

MÍNIMO

Calcule o valor mínimo da coluna especificada

Média

Calcule a média da coluna especificada. Se não for do tipo numérico, o resultado do cálculo será 0

Consulta de grupo

Consulta de grupo refere-se ao uso da instrução GROUP BY para agrupar informações de consulta, com os mesmos dados de um grupo.

A ordem de execução da instrução GROUP BY é após a instrução WHERE e antes da instrução SELECT.

gramática

SELECT 字段1,字段2...FROM 表名 GROUP BY 分组字符安 [HAVING 条件] 

GROUP BY agrupa o mesmo conteúdo nos resultados do campo de grupo como um grupo

Exemplo

SELECT * FROM student3 GROUP BY age 

Agrupe a mesma idade em um grupo

O uso acima está errado. O propósito do agrupamento é para estatísticas e geralmente é usado em conjunto com funções agregadas.

Por exemplo:

SELECT SUM(math), sex FROM student GROUP BY sex; 

Comparação entre WHERE e HAVING

  • tendo é filtrar os dados após o agrupamento, e onde está antes do agrupamento
  • Funções agregadas podem ser usadas na instrução tendo, mas funções agregadas não podem ser usadas depois de onde.

limite

LIMIT serve para limitar o número de registros de consulta e deve ser colocado no final da instrução SQL.

gramática:

LIMIT offset, length;或者 limit length 

offset é o deslocamento, que pode ser considerado como o número de registros ignorados

Resuma a ordem de escrita e a ordem de execução das instruções de consulta

Ordem de escrita

SELECT campo FROM nome da tabela WHERE condição GROUP BY campo HAVING condição ORDER BY campo LIMIT deslocamento, comprimento

Ordem de execução

  • do nome da tabela
  • onde condição
  • agrupar por campo
  • tendo condição
  • selecione o campo
  • ordenar por campo
  • limite

restrições e estratégias

restrições de chave primária

O papel da chave primária

Usado para identificar exclusivamente um registro, como o número de identificação de uma pessoa. Cada tabela deve ter uma chave primária e cada tabela só pode ter uma chave primária.

Normalmente, o campo comercial não é usado como chave primária. Um campo de id é projetado para cada tabela separadamente, e o id é usado como chave primária. A chave primária é usada pelo banco de dados e pelo programa, não pelo cliente final, então não importa se a chave primária não tem significado. O principal é não repeti-la. , ela só precisa estar não vazia.

Adicione chave primária ao criar tabela

create table stu1 (id int primary key,name varchar(20)
) 
create table stu1 {id int,name varchar(20),primary key(id)
} 

Estratégia de incremento automático de chave primária

create table stu1 (id int primary key auto_increment,name varchar(20)
) 

restrição não nula

NOT NULL, indicando que esta coluna é obrigatória ao adicionar dados

mysql> CREATE TABLE tb_dept4-> (-> id INT(11) PRIMARY KEY,-> name VARCHAR(22) NOT NULL,-> location VARCHAR(50)-> ); 

restrição única

A coluna à qual uma restrição exclusiva é adicionada não pode ser repetida, mas pode ser nula

CREATE TABLE Employees
( employee_name CHAR(50) NOT NULL, social_num INTEGER, phone INTEGER, UNIQUE (social_num)
) 

restrições padrão

A sintaxe é padrão

mysql> CREATE TABLE tb_dept3-> (-> id INT(11) PRIMARY KEY,-> name VARCHAR(22),-> location VARCHAR(50) DEFAULT 'Beijing'-> ); 

relacionamento de tabela

Na vida real, existe uma relação entre entidades, como: marido e mulher, departamento e funcionário, professor e aluno, etc. A mesa que desenhamos é uma descrição da entidade na realidade, portanto, quando desenhamos a mesa, nós Esta relacionamento deve ser refletido.

Os relacionamentos entre tabelas incluem principalmente: um para muitos (muitos para um), um para um e muitos para muitos.

Um para muitos (muitos para um)

Por exemplo: turmas e alunos, departamentos e funcionários, clientes e pedidos, categorias e produtos, etc.

Princípios de criação de tabela:

Não precisa ser uma chave estrangeira, esse relacionamento pode ser formado por uma coluna da tabela A correspondente à chave primária da tabela B.

muitos para muitos

Por exemplo: professores e alunos, alunos e cursos, usuários e funções

Relacionamento muitos-para-muitos, princípio de criação de tabela: você precisa criar uma terceira tabela, com pelo menos dois campos na tabela intermediária

Consulta multi-tabela

produto cartesiano

O produto cartesiano no MySQL refere-se a quando se executa uma operação JOIN entre múltiplas tabelas sem especificar condições, os resultados retornados são todas combinações possíveis nessas tabelas.

Por exemplo, suponha que temos duas tabelas A e B, onde A contém duas linhas (1 e 2) e B contém três linhas (A, B e C),

 SELECT * FROM A, B; 

Então o conjunto de resultados retornado conterá 6 linhas, a saber:

1 A
1 B
1 C
2 A
2 B
2 C 

Convertido para javascript é um loop for entre duas tabelas

const result = [];
for(let i = 0; i < A表.length; i++){ for(let j = 0; j < B表.length; j++){result.push(A[i], B[j])} 
} 

Consulta multi-tabela

Para limpar o produto cartesiano, você precisa usar uma consulta de junção. As consultas de junção são divididas em junções internas e junções externas.

Introdução à instrução JOIN

1.INNER JOIN INNER JOIN é o tipo JOIN mais comumente usado, ele retorna apenas linhas comuns às duas tabelas. Ele procura valores existentes em ambas as tabelas e combina os valores em um conjunto de resultados.

Por exemplo, suponha que você tenha duas tabelas, uma é “pedidos” e a outra é “clientes”. Há uma coluna "customer_id" em ambas as tabelas, e os dados dessas duas tabelas podem ser mesclados usando INNER JOIN:

SELECT *
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.customer_id; 

Na verdade, esta é uma triagem baseada no produto cartesiano acima.

Convertido para javascript é um loop for entre duas tabelas

const result = [];
for(let i = 0; i < orders.length; i++){  for(let j = 0; j < customers.length; j++){if(orders[i].customer_id === customers[j].customer_id){result.push(orders[i], customers[j])}} 
} 

2.LEFT JOIN LEFT JOIN retorna todas as linhas da tabela da esquerda, mesmo que não haja linhas correspondentes na tabela da direita. Se não houver linhas correspondentes, as colunas da tabela à direita aparecerão como NULL.

Por exemplo, suponha que você tenha duas tabelas, uma é “pedidos” e a outra é “clientes”. Use LEFT JOIN para listar todos os pedidos e as informações do cliente ao qual o pedido pertence:

SELECT *
FROM orders
LEFT JOIN customers
ON orders.customer_id = customers.customer_id; 

Convertido para javascript é um loop for entre duas tabelas

const result = [];
for(let i = 0; i < orders.length; i++){ for(let j = 0; j < customers.length; j++){if(orders[i].customer_id === customers[i].customer_id) {result.push(A[i], B[j])}} 
} 

3.RIGHT JOIN RIGHT JOIN é semelhante a LEFT JOIN, mas retorna todas as linhas da tabela da direita, mesmo que não haja linhas correspondentes na tabela da esquerda. Se não houver linhas correspondentes, as colunas da tabela esquerda aparecerão como NULL.

Por exemplo, suponha que você tenha duas tabelas, uma é “pedidos” e a outra é “clientes”. Use RIGHT JOIN para listar todas as informações dos clientes junto com seus pedidos:

SELECT *
FROM orders
RIGHT JOIN customers
ON orders.customer_id = customers.customer_id; 

4.FULL OUTER JOIN O MySQL não suporta FULL OUTER JOIN, mas você pode usar o operador UNION para combinar LEFT JOIN e RIGHT JOIN para obter o mesmo resultado.

Por exemplo, suponha que você tenha duas tabelas, uma é “pedidos” e a outra é “clientes”. Use UNION, LEFT JOIN e RIGHT JOIN para implementar FULL OUTER JOIN:

SELECT *
FROM orders
LEFT JOIN customers
ON orders.customer_id = customers.customer_id
UNION
SELECT *
FROM orders
RIGHT JOIN customers
ON orders.customer_id = customers.customer_id; 

UNIÃO

UNIONÉ um operador usado para mesclar duas ou mais instruções SELECT no banco de dados MySQL. Ele pode mesclar os conjuntos de resultados de duas ou mais instruções SELECT em um conjunto de resultados. UNIONAs linhas duplicadas serão removidas automaticamente e poderão ser usadas se for necessário incluir linhas duplicadas UNION ALL.

Por exemplo

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2; 
  • SELECT column_name(s) FROM table1e SELECT column_name(s) FROM table2representam respectivamente as duas instruções SELECT a serem mescladas.
  • UNIONO operador é usado para mesclar conjuntos de resultados. Ele retorna a união de dois conjuntos de resultados, removendo automaticamente linhas duplicadas.
  • Se quiser manter linhas duplicadas, você pode usar UNION ALLo operador.

subconsulta

Para exercícios detalhados, leia este artigo: juejin.cn/post/708368…

O resultado de uma instrução SELECT como parte de outra sintaxe SELECT

gramática

SELECT 字段 ...FROM 表 WHERE 字段 运算符 (SELECT 字段... FROM 表) 

O resultado de uma subconsulta de linha única é um valor.

Operadores de linha única =, >, >=, <, <=, !=

Operadores multilinha em qualquer, todos

Subconsulta de múltiplas colunas

O resultado da subconsulta é uma única coluna, que é usada como resultado da subconsulta condicional após WHERE. O resultado da subconsulta são múltiplas colunas, que devem ser usadas como uma tabela após FROM.

gramática

SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件 

Backup e restauração de dados

Quando realizamos transmissão de dados, armazenamento de dados e troca de dados no servidor, podem ocorrer falhas de dados, como desligamentos inesperados ou danos à mídia de armazenamento. Sem medidas da CIA para fazer backup e restaurar dados, os dados podem ser perdidos.

mysqldump -u 用户名 -p 密码 数据库 > 文件的路径/文件名.sql 

Observe que este backup é um backup em nível de tabela e você precisa criar o banco de dados primeiro ao restaurar.

romances

O que é uma transação de banco de dados

Uma transação de banco de dados é uma operação de banco de dados (adicionar, excluir, modificar) que acessa e possivelmente manipula itens de dados. Essas operações são todas executadas ou não são executadas. Elas são uma unidade de trabalho indivisível.

finalidade da transação

  • Fornece uma maneira para que as operações do banco de dados se recuperem de uma falha para um estado normal
  • Quando vários aplicativos acessam o banco de dados simultaneamente, um método de isolamento pode ser fornecido entre esses aplicativos para evitar que as operações uns dos outros interfiram entre si.

transações operacionais

Existem duas maneiras de realizar operações de transação no MySQL:

  • Confirmar transações automaticamente* Cada instrução de adição, exclusão e modificação do mysql é uma transação separada. Por padrão, o mysql iniciará automaticamente uma transação ao executar cada instrução e enviará automaticamente a transação após a execução.
  • Confirmar manualmente a transação* Instruções SQL relacionadas à transação* iniciar transação; Abrir a transação* commit; Enviar a transação* rollback; Reverter a transação

Exemplo:

start transaction;
update xxx -- 因为这里没有提交事务,所以数据库的数据不会发生变化 

princípios de negócios

Após o início da transação, todas as operações serão salvas temporariamente no log de transações. O log de transações só será sincronizado com a tabela de dados após receber o comando commit. Em outros casos, o log de transações será limpo (reversão, desconexão)

Exceção de simultaneidade de transação

Problemas que podem surgir durante operações de transações simultâneas

  • Rollback perdido (problema com transações simultâneas)

"Rollback perdido" significa que ao realizar uma operação de rollback em uma transação MySQL, se algumas modificações tiverem sido confirmadas antes do rollback, essas modificações serão perdidas, o que significa que a operação de rollback não pode desfazer essas modificações enviadas.

Por exemplo, suponha que em uma transação MySQL, algumas operações de inserção ou atualização sejam executadas primeiro, mas uma operação de reversão seja executada antes da transação ser confirmada. Se outras conexões ou transações já tiverem confirmado algumas modificações antes da reversão, essas modificações não serão revertidas e os dados finais no banco de dados conterão essas modificações confirmadas.

  • cobertura perdida

"Perda de substituição" significa que ao realizar uma operação de atualização no MySQL, se duas ou mais conexões ou transações simultâneas modificarem a mesma linha de dados ao mesmo tempo, uma das modificações substituirá os resultados de outras modificações, fazendo com que os resultados de outras modificações modificações serão perdidas.

Por exemplo,suponha que existam duas conexões ou transações simultâneas tentando atualizar a mesma linha de dados ao mesmo tempo.Se ambas as conexões ou transações realizarem operações de atualização, os resultados da última operação de atualização substituirão os resultados da operação de atualização anterior. Desta forma, os resultados da operação de atualização anterior são sobrescritos, ou seja, ocorre “perda de sobregravação”.

  • leitura suja

Uma transação lê dados não confirmados de outra transação

  • leitura não repetível

"Leitura não repetível" refere-se à situação no MySQL onde a mesma linha de dados é lida várias vezes na mesma transação, mas outras transações modificam a linha de dados durante este período, resultando em resultados diferentes das duas leituras anteriores.

Por exemplo, suponha que as seguintes operações sejam executadas em uma transação:

1. Leia uma determinada linha de dados;
2. Outra transação modifica a linha de dados;
3. Leia a mesma linha de dados novamente.

Se outra transação modificar a linha de dados antes da segunda leitura, os dados obtidos na segunda leitura serão diferentes dos dados lidos na primeira vez, resultando em uma leitura não repetível.

  • leitura fantasma

"Leitura fantasma" refere-se a uma situação no MySQL onde a mesma instrução de consulta é executada várias vezes na mesma transação, mas durante esse período outras transações inserem ou excluem linhas que atendem às condições de consulta, resultando em resultados de consulta diferentes entre os dois tempos anteriores .

Por exemplo, suponha que as seguintes operações sejam executadas em uma transação:

1. Execute uma determinada instrução de consulta e retorne um conjunto de linhas qualificadas;
2. Outra transação insere algumas novas linhas qualificadas;
3. Execute a mesma instrução de consulta novamente.

Se outra transação inserir novas linhas qualificadas antes de executar a instrução de consulta pela segunda vez, a segunda consulta retornará mais linhas do que a primeira consulta, resultando em leituras fantasmas.

nível de isolamento

Acho que o nível de isolamento padrão do mecanismo de armazenamento InnoDb no Mysql é Leitura Repetível, então vamos dar uma olhada em quais exceções de simultaneidade esse nível de isolamento pode resolver.

  • Reversão perdida* ok
  • Leitura suja* ok
  • Leitura não repetível* ok
  • Cobertura perdida* ok
  • Leitura fantasma* Logicamente falando, isso não está certo, mas o mysql também pode lidar com isso.

Visualize e modifique níveis de isolamento

Verificar

SELECT @@transacation_isolation 

Rever

SELECT @@session.tx_isolation='隔离级别' 

Criar usuário

gramática

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码' 

alterar a senha

ALTER USER USER() IDENTIFIED BY `new_password` 
  • Nome de usuário: O nome de usuário que será criado
  • Nome do host: Especifique o host no qual o usuário pode efetuar login. Se for um usuário local, localhost poderá ser usado. Se desejar que o usuário efetue login a partir de qualquer host remoto, você poderá usar o caractere curinga %.
  • Senha: A senha de login do usuário. A senha pode estar vazia. Se estiver vazia, o usuário pode efetuar login no servidor sem senha.

índice

Simplificando, um índice é um diretório que pode nos ajudar rapidamente a encontrar os dados correspondentes.

De modo geral, o índice em si também é muito grande e não pode ser armazenado inteiramente na memória; portanto, o índice geralmente é armazenado no disco na forma de um arquivo de índice.

Embora o índice melhore muito a velocidade da consulta, ele também reduz a velocidade das atualizações da tabela, como INSERT, UPDATE e DELETE na tabela. Porque ao atualizar a tabela, o Mysql não só precisa salvar os dados, mas também salvar o arquivo de índice.Cada vez que um campo que adiciona uma coluna de índice for atualizado, as informações do índice após as alterações do valor-chave causadas pela atualização serão ajustadas.

Índice comum

Não há restrições ao seu uso, pode ser criado em todos os tipos de dados, podendo ter valores duplicados e valores nulos. Um índice contém apenas uma única coluna e uma tabela pode ter vários índices de coluna única.

Criado ao criar tabela

gramática

INDEX 索引名 (列名) 

Exemplo

create table student (id int primary key,name varchar(20),age int,index student_name_index(name)
) 

Crie diretamente

CREATE INDEX 索引名 ON 表名(列名) 

Teste se a criação foi bem-sucedida

show index from student2 

índice único

Semelhante a um índice normal, a diferença é que o valor da coluna do índice deve ser único, mas valores nulos são permitidos. No caso de um índice composto, a combinação dos valores da coluna deve ser única.

gramática

UNIQUE INDEX 索引名 (列名) 

afinal

Preparamos um pacote de informações iniciais para todos. Contém 54 e-books relacionados ao front-end 2.57G, "Guia de entrevista de front-end (com respostas e análises)", tutoriais em vídeo sobre conhecimentos difíceis e importantes (conjunto completo).



Amigos necessitados podem clicar no cartão abaixo para recebê-lo e compartilhá-lo gratuitamente

Acho que você gosta

Origin blog.csdn.net/web2022050901/article/details/129379571
Recomendado
Clasificación