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. UNION
As 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 table1
eSELECT column_name(s) FROM table2
representam respectivamente as duas instruções SELECT a serem mescladas.UNION
O 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 ALL
o 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