Table des matières
Base de données relationnelle (SGBDR)
Aperçu
concept
- Base de données (DB) - un entrepôt où les données sont stockées
- Système de gestion de base de données (SGBD) - grand logiciel qui manipule et gère les bases de données
- Système de base de données (DBS) - est un système composé d'une base de données et de son logiciel de gestion.
- SQL - un langage de programmation pour exploiter des bases de données relationnelles, un ensemble de normes
MySQL démarre et s'arrête
démarrer
démarrage net mysql80
arrêt
arrêt net mysql80
connexion client
commande cmd
mysql [-h 127.0.0.1] [-P 3306] -u racine -p
Base de données relationnelle (SGBDR)
Une base de données basée sur un modèle relationnel et composée de plusieurs tables bidimensionnelles interconnectées.
Caractéristiques:
- Utilisez des tableaux pour stocker les données dans un format unifié pour une maintenance facile
- Utilisation du langage SQL, normes unifiées et facile à utiliser
SQL
type de données
Types numériques : principalement des entiers de différentes tailles.
Type de chaîne : clarifiez principalement la différence entre char (chaîne de longueur fixe) et varchar (chaîne de longueur variable).
Type de date : DATE couramment utilisé, notez que la date doit être écrite entre guillemets simples :
taper | décrire | taille | Format | portée |
---|---|---|---|---|
DATE | valeur de date | 3 | AAAA-MM-JJ | 1000-01-01 au 9999-12-31 |
DDL
Langage de définition de données | Langage de définition de données, utilisé pour définir des objets de données (bases de données, tables, champs) |
Opérations de base de données
1. Interroger toutes les bases de données : SHOW DATABASES ;
2. Interroger la base de données actuelle : SELECT DATABASE();
3. Créer : CREATE DATABASE IF NOT EXISTS nom de la base de données DEFAULT CHARSET jeu de caractères COLLATE collation ;
4. Supprimer : DROP DATABASE IF EXISTS nom de la base de données ;
5. Utiliser : UTILISER le nom de la base de données ;
Opérations sur les tables
1. Interrogez toutes les tables de la base de données actuelle
SHOW TABLES;
2. Structure de la table de requête
DESC 表名;
3. Interrogez l'instruction de création de table de la table spécifiée
SHOW CREATE TABLE 表名;
4.Créer un tableau
CREATE TABLE 表名(
字段1 字段1类型[COMMENT 字段1注释],
字段2 字段2类型[COMMENT 字段2注释],
字段3 字段3类型[COMMENT 字段3注释],
......
字段n 字段n类型[COMMENT 字段n注释]
)[COMMENT 表注释];
5. Ajouter des champs
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释];
6. Modifier le type de données
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
7. Modifier les noms de champs et les types de champs
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释];
8. Supprimer les champs
ALTER TABLE 表名 DROP 字段名;
9. Modifier le nom de la table
ALTER TABLE 表名 RENAME TO 新表名;
10. Supprimer le tableau
DROP TABLE [IF EXISTS] 表名;
11. Supprimez la table spécifiée et recréez la table
TRUNCATE TABLE 表名;
DML
Le nom anglais complet de DML est Data Manipulation Language (langage de manipulation de données), qui est utilisé pour ajouter, supprimer et modifier des enregistrements de données dans les tables de la base de données.
1. Ajoutez des données au champ spécifié :
INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...);
2. Ajoutez des données à tous les champs :
INSERT INTO 表名 VALUES(值1,值2,...);
3. Ajoutez des données par lots :
INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...),
(值1,值2,...),
(值1,值2,...),...;
INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),...;
4. Modifier les données :
UPDATE 表名 SET 字段名1=值1,字段名2=值2,... [WHERE 条件];
5. Supprimer les données :
DELETE FROM 表名 [WHERE 条件];
DQL
Le nom anglais complet de DQL est Data Query Language, qui est un langage de requête de données utilisé pour interroger les enregistrements dans les tables des bases de données.
- Requête de base
- Requête conditionnelle (OÙ)
- Fonctions d'agrégation (count, max, min, avg, sum)
- Requête de groupe (GROUP BY)
- Requête de tri (ORDER BY)
- Requête de pagination (LIMIT)
Mentionnez brièvement quelques points de connaissances faciles à oublier :
1. Mot-clé pour supprimer les enregistrements en double : distinct
SELECT DISTINCT 字段列表 FROM 表名;
2. La différence entre où et avoir (mot-clé de requête de groupe)
- Le timing d'exécution est différent : Where filtre avant le regroupement, si la condition Where n'est pas remplie, le regroupement ne participera pas ; tandis que Have filtre les résultats après le regroupement.
- Les conditions de jugement sont différentes : où ne peut pas juger la fonction globale, mais ayant le peut.
Ordre d'exécution : où > fonction d'agrégation > avoir
3. Dans une requête de tri : S'il s'agit d'un tri multi-champs, lorsque la valeur du premier champ est la même, le deuxième champ sera trié.
4. Requête de pagination :
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
L'index de départ commence à 0, index de départ = (numéro de page de requête-1) * nombre d'enregistrements affichés sur chaque page. La requête de pagination
est un dialecte de la base de données. Différentes bases de données ont des implémentations différentes. Dans MySQL, c'est LIMIT
si le premier page de données est interrogée. , l'index de départ peut être omis, directement abrégé en limite 10
5. Ordre d'écriture et ordre d'exécution de l'instruction de requête :
Ordre d'écriture :
SELECT
liste de champs
FROM
liste de noms de table
WHERE
liste de conditions
GROUP BY
liste de champs de regroupement
HAVING
liste de conditions de post-regroupement
ORDER BY
liste de champs de tri
LIMIT
paramètres de pagination-------------------------------------------------- ------------
Ordre d'exécution :
FROM
liste de noms de table
WHERE
liste de conditions
GROUP BY
liste de champs de regroupement
HAVING
liste de conditions de post-regroupement liste de champs
SELECT ORDER BY liste de champs de tri LIMIT paramètres de pagination
DCL
Le nom anglais complet de DCL est Data Control Language, qui est utilisé pour gérer les utilisateurs de la base de données et contrôler les autorisations d'accès à la base de données.
1. Interroger les utilisateurs
USE mysql;
SELECT * FROM user;
2.Créer un utilisateur
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
3. Modifier le mot de passe de l'utilisateur
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
4. Supprimer l'utilisateur
DROP USER '用户名'@'主机名';
Avis:
- Le nom d'hôte peut utiliser le caractère générique « % ».
- Ce type de développeur SQL l'exploite rarement, et est principalement utilisé par les DBA (Database Administrator). pour une brève compréhension
5. Autorisations de requête
SHOW GRANTS FOR '用户名'@'主机名';
6. Accorder des autorisations
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
7. Révoquer les autorisations
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
Avis:
- Utilisez des virgules pour séparer plusieurs autorisations.
- Lors de l'autorisation, le nom de la base de données et le nom de la table peuvent être remplacés par un caractère générique *, qui représente tout
fonction
Fonctions de chaîne
fonction | Fonction |
---|---|
CONCAT(S1,S2,...Sn) | Concaténation de chaînes, concaténer S1, S2,...Sn en une chaîne |
INFÉRIEUR(str) | Convertir toutes les chaînes de caractères en minuscules |
SUPÉRIEUR(str) | Convertir toutes les chaînes de caractères en majuscules |
LPAD(chaîne,n,pad) | Remplissage gauche, utilisez le pad de chaîne pour remplir le côté gauche de la chaîne afin d'atteindre n longueurs de chaîne |
RPAD(chaîne,n,pad) |
Remplissage droit, remplissez le côté droit de la chaîne avec un tampon de chaîne pour atteindre n longueur de chaîne |
TRIM(chaîne) | Supprimer les espaces de début et de fin de la chaîne |
SOUS-CHAÎNE(str,start,len) | Renvoie une chaîne de longueur len à partir de la position de départ de la chaîne str |
Fonction numérique
fonction | Fonction |
---|---|
PLAFOND(x) | Arrondi |
ÉTAGE(x) | Arrondir vers le bas |
MOD(x,y) | Renvoie le module de x/y |
COURU() | Renvoie un nombre aléatoire compris entre 0 et 1, avec des décimales aléatoires et excluant 0 et 1. |
ROND(x,y) | Trouver la valeur arrondie du paramètre x, en conservant y décimales |
fonction date
fonction | Fonction |
---|---|
CURDATE() | Renvoyer la date actuelle |
CURTIME() | Retourner l'heure actuelle |
MAINTENANT() | Renvoie la date et l'heure actuelles |
ANNÉE(date) | Obtenez l'année de la date spécifiée |
MOIS(date) | Obtenez le mois de la date spécifiée |
JOUR(date) | Obtenir la date de la date spécifiée |
DATE_ADD (date, type d'expression INTERVAL) | Renvoie une valeur date/heure plus une valeur temporelle expr |
DATEDIFF(date1,date2) | Renvoie le nombre de jours entre l'heure de début date1 et l'heure de fin date2 |
fonction de processus
Fonctions similaires à l'opérateur ternaire en langage C
fonction | Fonction |
---|---|
SI(valeur,t,f) | Si la valeur est vraie, renvoie t, sinon renvoie f |
IFNULL(valeur1,valeur2) | Si la valeur n'est pas vide, renvoie la valeur 1, sinon renvoie la valeur 2 |
CAS QUAND [val1] ALORS [res1] ... ELSE [par défaut] FIN | Si val1 est vrai, renvoie res1,... sinon renvoie la valeur par défaut |
CASE [expr] QUAND [val1] ALORS [res1] ... ELSE [par défaut] FIN | Si la valeur de expr est égale à val1, renvoie res1,...sinon renvoie la valeur par défaut |
contrainte
- Concept : Les contraintes sont des règles qui agissent sur les champs d'une table pour limiter les données stockées dans la table.
- Objectif : Garantir l’exactitude, la validité et l’intégrité des données de la base de données.
- Classification:
contrainte | décrire | Mots clés |
---|---|---|
contrainte non nulle | Les données de ce champ ne peuvent pas être NULL | PAS NUL |
contrainte unique | Assurez-vous que toutes les données de ce champ sont uniques et non dupliquées | UNIQUE |
contraintes de clé primaire | La clé primaire est l'identifiant unique d'une ligne de données et doit être non vide et unique. | CLÉ PRIMAIRE |
Contraintes par défaut | Lors de la sauvegarde des données, si la valeur de ce champ n'est pas précisée, la valeur par défaut est utilisée | DÉFAUT |
Vérifier les contraintes (après la version 8.0.16) | Enregistrez les valeurs de champ qui répondent à une certaine condition | VÉRIFIER |
contraintes de clé étrangère | Utilisé pour établir une connexion entre les données des deux tables afin d'assurer la cohérence et l'intégrité des données. | CLÉ ÉTRANGÈRE |
Pour les contraintes générales, nous pouvons comprendre leur utilisation en regardant les exemples précédents :
- Complétez la création du formulaire comme requis :
Nom de domaine | Signification du champ | Type de champ | Restrictions | mot-clé de contrainte |
---|---|---|---|---|
identifiant | Identifiant unique | int | Clé primaire, et grandit automatiquement | CLÉ PRIMAIRE, AUTO_INCREMENT |
nom | Nom | varchar(10) | Pas vide et unique | PAS NULL,UNIQUE |
âge | âge | int | Supérieur à 0 et inférieur ou égal à 120 | VÉRIFIER |
statut | État | caractère(1) | Si cette valeur n'est pas spécifiée, la valeur par défaut est 1 | DÉFAUT |
genre | genre | caractère(1) | aucun |
create table user(
id int primary key auto_increment comment '主键',
name varchar(10) not null unique comment '姓名',
age int check(age > 0 and age <= 120) comment '年龄',
status char(1) default '1' comment '状态',
gender char(1) comment '性别'
) comment '用户表';
Focus sur l'utilisation des clés étrangères :
Ajouter une clé étrangère
CREATE TABLE 表名(
字段名 数据类型,
...
[CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主列表名)
);
-- 或
ALTER TABLE 表名
ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCE 主表 (主列表名);
Supprimer la clé étrangère
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
Comportement de suppression/mise à jour de clé étrangère
Comportement | illustrer |
---|---|
PAS D'ACTION | 当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有则不允许删除/更新。(与RESTRICT一致) |
RESTRICT | 当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有则不允许删除/更新。(与NO ACTION一致) |
CASCADE | 当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。 |
SET NULL | 当在父表中删除对应记录时,首先检查记录是否有对应外键,如果有则设置子表中该外键值为null(要求该外键允许取null) |
SET DEFAULT | 父表有变更时,子表将外键列设置成一个默认的值(Innodb不支持) |
ALTER TABLE 表名
ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCE 主表 (主列表名)
ON UPDATE CASCADE ON DELETE CASCADE;
多表查询
多表关系
项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:
- 一对多(多对一)
- 多对多
- 一对一
笛卡尔积
笛卡尔积是指在数学中,两个集合A和集合B的所有的组合情况。
例如A、B 和1、2、3、4组合,不同的组合情况就有八种:
- A 1
- A 2
- A 3
- A 4
- B 1
- B 2
- B 3
- B 4
所以,在多表查询时,需要消除无效的笛卡尔积。
内连接
隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 条件...;
显式内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件 ...;
外连接
左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件 ...;
相当于查询表1(左表)的所有数据,包含表1和表2交集部分的数据
右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;
相当于查询表2(右表)的所有数据,包含表1和表2交集部分的数据
自连接
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;
自连接查询,可以是内连接查询,也可以是外连接查询。
联合查询
查询语法
SELECT 字段列表 FROM 表A ...
UNION [ALL]
SELECT 字段列表 FROM 表B ...;
对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
union all会将全部的数据直接合并在一起,union会对合并之后的数据去重。
子查询
SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。
SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT 的任何一个。
根据子查询的结果不同,分为:
- 标量子查询(子查询结果为单个值)
- 列子查询(子查询结果为一列)
- 行子查询(子查询结果为一行)
- Sous-requête de table (les résultats de la sous-requête comportent plusieurs lignes et colonnes)
Selon la position de la sous-requête, elle est divisée en : après WHERE, après FROM et après SELECT.
affaires
Une transaction est un ensemble d'opérations, qui est une unité de travail indivisible.Une transaction soumettra ou révoquera des demandes d'opération au système dans son ensemble, c'est-à-dire que ces opérations réussiront ou échoueront en même temps.
1. Opérations transactionnelles
START TRANSACTION; -- 开启事务
COMMIT / ROLLBACK; -- 提交/回滚事务
2. Quatre caractéristiques des affaires
Atomicité, cohérence, isolement, durabilité
Atomicité
- Une transaction est une plus petite unité d’opération indivisible qui réussit dans son intégralité ou échoue dans son intégralité.
Lorsqu'une transaction est exécutée, elle exécutera un ensemble d'instructions SQL dans le même lot. Si une erreur se produit dans une instruction SQL, toutes les instructions SQL du lot seront annulées.
Cohérence
- Une fois la transaction terminée, toutes les données doivent être dans un état cohérent.
Par exemple, un virement bancaire peut être décomposé en deux actions : déduire un montant de fonds X du compte A, puis ajouter un montant de fonds X au compte B. Si une erreur se produit au cours de ce processus, l'ensemble de l'opération doit être rétabli à son état initial. Assurez-vous que les soldes des comptes combinés de A et B sont cohérents avec l’état initial.
Isolement
- Le mécanisme d'isolation fourni par le système de base de données garantit que les transactions s'exécutent dans un environnement indépendant qui n'est pas affecté par les opérations simultanées externes.
Par exemple, une transaction modifie un certain élément de données, et à ce moment une autre transaction souhaite également modifier l'élément de données. Cependant, en raison de l'existence de l'isolement, la deuxième transaction attendra que la première transaction termine la modification avant d'effectuer modifications.
Durabilité
- Une fois qu'une transaction est validée ou annulée, les modifications apportées aux données dans la base de données sont permanentes.
Une fois qu'une transaction est validée, ses modifications dans la base de données doivent être permanentes (la soumission des données est enregistrée sur le disque dur), et les autres opérations ou échecs ultérieurs ne doivent avoir aucun impact sur les modifications de cette transaction.
3. Problèmes de transactions simultanées
(1) Lecture sale
Une transaction lit des données qu'une autre transaction n'a pas encore validées.
(2) Lecture non répétable
Une transaction lit successivement le même enregistrement, mais les données lues deux fois sont différentes, ce qu'on appelle une lecture non répétable.
(3) Lecture fantôme
Lorsqu'une transaction interroge des données selon des conditions, il n'y a pas de ligne de données correspondante, mais lors de l'insertion de données, on constate que cette ligne de données existe déjà, comme si un « fantôme » était apparu.
4. Niveau d'isolement des transactions
READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE(串行化)
FIN