Notes du didacticiel MySQL Dark Horse (tutoriel mysql8) - concepts liés aux bases de données, installation et désinstallation de MySQL, modèle de données, syntaxe générale et classification SQL (DDL, DML, DQL, DCL)

Article de référence 1 : https://www.bilibili.com/video/BV1Kr4y1i7ru/

Texte de référence 2 : https://dhc.pythonanywhere.com/article/public/1/

Insérer la description de l'image ici

Annuaire d'articles

Les bases

Concepts liés aux bases de données

(Base de données Base de données (DB), Système de gestion de base de données Système de gestion de base de données (SGBD), Langage de requête structuré SQL (Langage de requête structuré))

Insérer la description de l'image ici

Système de gestion de base de données relationnelle grand public (norme de langage unifié SQL)

Insérer la description de l'image ici

installation et désinstallation de MySQL

Installer

Insérer la description de l'image ici

Tutoriel pour installer la communauté MySQL version 8.0.26 sur Windows

Vidéo de référence sur la méthode d'installation sous Windows : https://www.bilibili.com/video/BV1Kr4y1i7ru?p=3

J'utilise Linux et je vais vous présenter comment installer le service mysql sur Ubuntu20.04 :

  1. Tout d’abord, ouvrez une fenêtre de terminal.

  2. Mettez à jour la liste des packages pour vous assurer d'obtenir la dernière version du logiciel. Cela peut être accompli en exécutant la commande suivante :

    sudo apt update
    
  3. Pour installer le serveur MySQL, exécutez la commande suivante :

    sudo apt install mysql-server
    
  4. Une fois l'installation terminée, le service MySQL devrait démarrer automatiquement. Vous pouvez utiliser la commande suivante pour confirmer que MySQL est en cours d'exécution :

    sudo systemctl status mysql
    

    Insérer la description de l'image ici

  5. Pour l'installation initiale de MySQL, vous devez exécuter le script mysql_secure_installation pour améliorer la sécurité de MySQL. Exécutez la commande suivante :

    sudo mysql_secure_installation
    

    Ce script vous guidera pour définir le mot de passe de l'utilisateur root, supprimer les utilisateurs anonymes, désactiver la connexion à distance root et supprimer la base de données de test.

    Nous ne configurerons pas cela. C'est pour le débogage de toute façon. Trop de paramètres affecteront l'efficacité.

désinstaller

Pour désinstaller complètement MySQL dans Ubuntu 20.04, vous pouvez suivre ces étapes :

  1. Tout d’abord, vous devez arrêter le service MySQL en cours d’exécution. Ouvrez un terminal et entrez la commande suivante :

    sudo systemctl stop mysql
    
  2. Ensuite, utilisez apt pour désinstaller MySQL. Entrez la commande suivante :

    sudo apt-get remove --purge mysql-server mysql-client mysql-common
    sudo apt-get autoremove
    sudo apt-get autoclean
    
  3. Enfin, pour garantir que tous les fichiers et configurations pertinents sont supprimés, le répertoire de données peut être supprimé manuellement. Par défaut, ce répertoire est généralement /var/lib/mysql. Cependant, le système doit être vérifié pour confirmer l'emplacement correct. Avant de supprimer, assurez-vous que toutes les données qu'il contient ne sont plus nécessaires. Ce répertoire peut être supprimé à l'aide de la commande suivante :

    sudo rm -rf /var/lib/mysql
    

Remarque : Cela supprimera définitivement toutes les bases de données MySQL et les données associées, alors assurez-vous d'avoir sauvegardé les données importantes avant d'effectuer cette opération.

modèle de données

Insérer la description de l'image ici

Base de données relationnelle RDBMS (une base de données basée sur le modèle relationnel et composée de plusieurs tables bidimensionnelles interconnectées)

Insérer la description de l'image ici

De la même manière, une base de données qui n'est pas stockée via une structure de table est appelée 非关系型数据库.

Syntaxe générale et classification SQL

grammaire universelle

Avant d'apprendre des instructions SQL spécifiques, comprenons d'abord la syntaxe générale du langage SQL.

  1. Les instructions SQL peuvent être écrites sur une seule ligne ou sur plusieurs lignes et se terminer par un point-virgule.
  2. Les instructions SQL peuvent utiliser des espaces/indentations pour améliorer la lisibilité de l'instruction.
  3. Les instructions SQL de la base de données MySQL ne sont pas sensibles à la casse et il est recommandé d'utiliser des lettres majuscules pour les mots-clés.
  4. Commentaire :
    commentaire sur une seule ligne : --contenu du commentaire ou #contenu du commentaire
    Commentaire sur plusieurs lignes : /*contenu du commentaire*/

DDL (Data Definition Language) : Langage de définition de données, utilisé pour définir les objets de la base de données (base de données, tables, champs)

Opérations de base de données
  • Connectez-vous d'abord à la base de données :
    mysql -u root -p
    
    Insérer la description de l'image ici
Interroger toutes les bases de données : afficher les bases de données

SHOW DATABASES;

  • Exemple:

    show databases;
    

    Insérer la description de l'image ici

Interroger la base de données actuelle : sélectionnez

SELECT DATABASE();

  • Exemple:

    select database();
    

    Insérer la description de l'image ici

Créer une base de données : créer

CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ];

  • Exemple:

    create database itcast;
    

    Insérer la description de l'image ici
    Insérer la description de l'image ici

  • Impossible de créer une base de données avec un nom qui existe déjà :
    Insérer la description de l'image ici

  • Vous pouvez ajouter if not existsune option de jugement afin que la base de données ne soit pas créée si elle existe et qu'aucune erreur ne soit signalée :

    create database if not exists itcast;
    

    Insérer la description de l'image ici
    Insérer la description de l'image ici

  • Spécifiez le jeu de caractères par défaut lors de la création (il est recommandé d'utiliser utf8mb4, qui occupe 4 octets ; utf8 n'occupe que 3 octets) :

    create database if not exists itcast3 dafault charset utf8mb4;
    

    Insérer la description de l'image ici

    Lors de la création d'une base de données, utf8mb4les principales raisons de choisir un jeu de caractères sont les suivantes :

    1. Prise en charge complète d'Unicode : utf8mb4(UTF-8 Multibyte 4) est un jeu de caractères utilisé pour représenter les caractères UTF-8 dans MySQL. Contrairement aux utf8implémentations antérieures, il offre une prise en charge complète des caractères Unicode de 4 octets. Cela signifie qu'il peut stocker n'importe quel caractère Unicode standard. L' utf8implémentation d'origine ne prend en charge que les caractères d'une longueur maximale de 3 octets et ne peut pas gérer certains caractères spéciaux, tels que les émoticônes Emoji ou certains caractères chinois spéciaux.

    2. Sécurité des données : en raison de utf8l'incapacité de gérer correctement les caractères de 4 octets, une troncature et une perte de données peuvent survenir si vous tentez d'insérer de tels caractères. L'utilisation utf8mb4peut éviter cette situation et garantir l'intégrité des données.

    3. Compatibilité future : à mesure que de nouveaux caractères Unicode et émoticônes Emoji apparaissent, utf8mb4la compatibilité future est garantie.

    Par conséquent, pour garantir que votre base de données puisse gérer tous les types de caractères Unicode, il est généralement recommandé d'utiliser un jeu de caractères lors de la création de la base de données utf8mb4.

Remarque : Le jeu de caractères affecte principalement le stockage et le traitement des données de type texte, telles que CHAR, VARCHAR, TEXT, etc. Généralement, cela n'affecte pas le stockage et le traitement des types de données autres que des chaînes, tels que les entiers, les types à virgule flottante, les types de date et d'heure, etc.

Supprimer la base de données : supprimer

DROP DATABASE [ IF EXISTS ] 数据库名;

  • Exemple

    drop database itcast;
    

    Insérer la description de l'image ici

Utiliser la base de données : utiliser

USE 数据库名;

  • Exemple

    use myDatabase;
    

    Insérer la description de l'image ici

  • Vous pouvez utiliser select pour interroger la base de données actuellement utilisée :
    Insérer la description de l'image ici

Précautions
  • Le jeu de caractères UTF8 fait 3 octets et certains symboles occupent 4 octets, il est donc recommandé d'utiliser le jeu de caractères utf8mb4.
Opérations sur les tables
Type de données MySQL
Type numérique

Insérer la description de l'image ici

  • Exemple :
    Âge :age tinyint unsigned
     Fraction : score double(4,1), ce qui signifie jusqu'à quatre chiffres significatifs (100,0), puis 1 signifie qu'il y a 1 décimale.
type de chaîne

Insérer la description de l'image ici
Les chaînes de longueur fixe fonctionnent mieux, tandis que les chaînes de longueur variable fonctionnent moins bien.

  • Exemple :
    Nom d'utilisateur : username varchar(50)
    Sexe :gender char(1)
type date/heure

Insérer la description de l'image ici

  • Exemple :
    Anniversaire :birthday date
Interroger toutes les tables de la base de données actuelle : afficher les tables

SHOW TABLES;

  • Exemple

    show tables;
    

    Insérer la description de l'image ici

Structure de la table de requête : desc

DESC 表名;

  • Exemple

    desc tb_user;
    

    Insérer la description de l'image ici

Interrogez l'instruction de création de table de la table spécifiée : show create table (peut afficher des informations détaillées sur la table, y compris des commentaires lors de la création)

SHOW CREATE TABLE 表名;

  • Exemple

    show create table tb_user;
    

    Insérer la description de l'image ici

    Le code ci-dessus montre l' tb_userinstruction de création de table. Cette instruction contient des informations telles que le nom de la table, les définitions de champs, le moteur de stockage et le jeu de caractères.

    L’explication spécifique est la suivante :

    • CREATE TABLE tb_user:Créez tb_userune table nommée.

    • Voici les définitions des quatre champs :

      • idint COMMENTAIRE NULL PAR DÉFAUT 'numéro' : créez un idchamp nommé, le type de données est entier (int), la valeur par défaut est NULL et le commentaire est 'numéro'.
      • namevarchar(50) COMMENTAIRE NULL PAR DÉFAUT 'Nom' : Créez un namechamp nommé, le type de données est une chaîne de longueur variable (varchar), la longueur maximale est de 50 caractères, la valeur par défaut est NULL, le commentaire est 'Nom'.
      • ageint COMMENTAIRE NULL PAR DÉFAUT 'age' : créez un agechamp nommé, le type de données est entier (int), la valeur par défaut est NULL et le commentaire est 'age'.
      • gendervarchar(1) COMMENTAIRE NULL PAR DÉFAUT 'Gender' : Créez un genderchamp nommé, le type de données est une chaîne de longueur variable (varchar), la longueur maximale est de 1 caractère, la valeur par défaut est NULL, le commentaire est 'Gender'.
    • ENGINE=InnoDB: Le moteur de stockage de la table spécifiée est InnoDB. MySQL prend en charge une variété de moteurs de stockage. Chaque moteur de stockage a ses propres avantages et caractéristiques. InnoDB est le plus couramment utilisé et prend en charge le traitement des transactions et le verrouillage au niveau des lignes.

    • DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci: Le jeu de caractères par défaut de la table spécifiée est utf8mb4 et le classement est utf8mb4_0900_ai_ci. Le jeu de caractères détermine la manière dont les données texte de la table sont stockées et traitées, et le classement détermine la manière dont les caractères sont comparés.

    • COMMENT='用户表': Ajoutez un commentaire au tableau indiquant qu'il s'agit d'un 'tableau utilisateur'.

Créer un tableau : créer un tableau
CREATE TABLE 表名(
	字段1 字段1类型 [COMMENT 字段1注释],
	字段2 字段2类型 [COMMENT 字段2注释],
	字段3 字段3类型 [COMMENT 字段3注释],
	...
	字段n 字段n类型 [COMMENT 字段n注释]
)[ COMMENT 表注释 ];

REMARQUE : Il n'y a pas de virgule après le dernier champ

  • Exemple 1
    Insérer la description de l'image ici

    create table tb_user(
    	id int comment '编号',
    	name varchar(50) comment '姓名',
    	age int comment '年龄',
    	gender varchar(1) comment '性别'
    	) comment '用户表';
    

    Insérer la description de l'image ici
    Insérer la description de l'image ici

https://www.bilibili.com/video/BV1Kr4y1i7ru?p=8

  • Exemple 2
     : Concevoir un tableau d'informations sur les employés avec les exigences suivantes :

    1. Nombre (nombres purs)
    2. ID d'employé (type de chaîne, pas plus de 10 chiffres)
    3. Nom de l'employé (type chaîne, pas plus de 10 caractères)
    4. Sexe (homme/femme, stocke un caractère chinois)
    5. Âge (âge humain normal, il est impossible de stocker des nombres négatifs)
    6. Numéro d'identification (le numéro d'identification de deuxième génération est composé de 18 chiffres et il y a des caractères comme X sur la carte d'identité)
    7. Heure d'adhésion (prenez simplement la valeur de l'année, du mois et du jour)

    L'instruction de création de table correspondante est la suivante :
    Insérer la description de l'image ici

create table emp (
    id int comment '编号',
    workno varchar(10) comment '工号',
    name varchar(10) comment '姓名',
    gender char(1) comment '性别',
    age tinyint unsigned comment '年龄',
    idcard char(18) comment '身份证号',
    entrydate date comment '入职时间'
) comment '员工表';

Collez-le dans le terminal pour l'ajouter.

root@ubuntu:~#
root@ubuntu:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.34-0ubuntu0.20.04.1 (Ubuntu)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
mysql>
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| myDatabase         |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

mysql>
mysql>
mysql> use myDatabase;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>
mysql>
mysql>
mysql> select database();
+------------+
| database() |
+------------+
| myDatabase |
+------------+
1 row in set (0.00 sec)

mysql>
mysql>
mysql> show tables;
+----------------------+
| Tables_in_myDatabase |
+----------------------+
| tb_user              |
+----------------------+
1 row in set (0.00 sec)

mysql>
mysql>
mysql> create table emp (
    ->     id int comment '编号',
    ->     workno varchar(10) comment '工号',
    ->     name varchar(10) comment '姓名',
    ->     gender char(1) comment '性别',
    ->     age tinyint unsigned comment '年龄',
    ->     idcard char(18) comment '身份证号',
    ->     entrydate date comment '入职时间'
    -> ) comment '员工表';
Query OK, 0 rows affected (0.10 sec)

mysql>
mysql> show tables;
+----------------------+
| Tables_in_myDatabase |
+----------------------+
| emp                  |
| tb_user              |
+----------------------+
2 rows in set (0.01 sec)

mysql>
mysql> desc emp;
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| id        | int              | YES  |     | NULL    |       |
| workno    | varchar(10)      | YES  |     | NULL    |       |
| name      | varchar(10)      | YES  |     | NULL    |       |
| gender    | char(1)          | YES  |     | NULL    |       |
| age       | tinyint unsigned | YES  |     | NULL    |       |
| idcard    | char(18)         | YES  |     | NULL    |       |
| entrydate | date             | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

mysql>

https://www.bilibili.com/video/BV1Kr4y1i7ru?p=8

Ajouter un champ : ALTER TABLE ttt ADD fff ttt COMMENT 'xxx';. Les champs dans MySQL peuvent être créés lors de la création de la table, ou ils peuvent être ajoutés séparément après la création de la table.

ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];

exemple:ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵称';

  • Exemple : ajouter un champ d'e-mail au tableau
# 列出所有数据库
show databases;
# 切换到指定数据库
use myDatabase;
# 查看当前使用的数据库
select database();
# 列出当前数据库所有表
show tables;
# 查看指定表结构
desc tb_user;
# 为指定表增加指定字段
alter table tb_user add email varchar(255);
# 查看指定表结构
desc tb_user;

Insérer la description de l'image ici

Modifier le type de données du champ ( ALTER TABLE 表名 MODIFY) (principalement utilisé pour modifier le type de données d'une colonne ou changer la valeur par défaut, etc. Il ne peut être utilisé que pour modifier les attributs d'une colonne existante, et ne peut pas modifier le nom de la colonne)

ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

Modifiez le nom du champ et le type de données du champ ( ALTER TABLE 表名 CHANGE) (vous pouvez non seulement modifier le type de données de la colonne ou changer la valeur par défaut, mais vous pouvez également changer le nom de la colonne)

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];

  • Exemple : modifiez le champ pseudo de la table emp en nom d'utilisateur et le type est varchar(30)
    ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT '昵称';
    Insérer la description de l'image ici
    Insérer la description de l'image ici
Supprimer le champ ( ALTER TABLE 表名 DROP 字段名;)

ALTER TABLE 表名 DROP 字段名;

Exemple:
Insérer la description de l'image ici
Insérer la description de l'image ici

Modifier le nom de la table ( ALTER TABLE 表名 RENAME TO 新表名)

ALTER TABLE 表名 RENAME TO 新表名

  • Exemple:
    Insérer la description de l'image ici
    Insérer la description de l'image ici
Supprimer le tableau ( DROP TABLE [IF EXISTS] 表名;)

DROP TABLE [IF EXISTS] 表名;

  • Exemple:
    Insérer la description de l'image ici
Supprimez la table et recréez-la ( TRUNCATE TABLE 表名) (peut être utilisé pour nettoyer les données de la table)

TRUNCATE TABLE 表名;

  • Exemple:
    Insérer la description de l'image ici

DML (Data Manipulation Language) : langage de manipulation de données, utilisé pour 表中ajouter, supprimer et modifier des données de base de données

ajout de donnéesINSERT
Précisez les champs :INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

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

  • Exemple :
    ajoutez des données à tous les champs de la table des employés :
insert into employee(id,workno,name,gender,age,idcard,entrydate) values(1,'1','Itcast','男',10,'123456789012345678','2000-01-01');
  • Utilisez DataGrip :
    cliquez avec le bouton droit sur la table --> Nouveau --> Console de requête :
    Insérer la description de l'image ici
    collez-y l'instruction SQL ci-dessus, sélectionnez toutes les instructions SQL (sinon le logiciel ne saura pas quelle phrase vous souhaitez exécuter), puis cliquez sur Exécuter :
    Insérer la description de l'image ici
    Insérer la description de l'image ici
    Requête données de la table, double-cliquez sur la table. Vous pouvez afficher ou exécuter select * from xxx表des données de table de requête :
    Insérer la description de l'image ici
    exécuter :

    select * from emp;
    

    Insérer la description de l'image ici

Tous les champs:INSERT INTO 表名 VALUES (值1, 值2, ...);

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

  • Exemple:
insert into emp values(3,'3','Itcast','男',10,'12345','2000-01-01');

Insérer la description de l'image ici

Ajouter des données par lots

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

  • Exemple:

    insert into emp values(4,'4','Itcast','男',10,'123456789012345681','2000-01-01'),(5,'5','Itcast','男',10,'123456789012345682','2000-01-01');
    
    

    Insérer la description de l'image ici

Notez l'utilisation de virgules ,pour séparer les différentes barres (lignes) de données.

Précautions
  • Les données de type chaîne et date doivent être placées entre guillemets
  • La taille des données insérées doit être dans la plage spécifiée du champ
Mettre à jour les données (modifier les données) :UPDATE
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ];(Remarque : s'il n'y a pas de condition Where, les données de la table entière sont modifiées)

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

  • exemple:
    UPDATE emp SET name = 'Jack' WHERE id = 1;
    Insérer la description de l'image ici
Supprimer (une certaine donnée) :DELETE
DELETE FROM 表名 [ WHERE 条件 ];(Sans la condition Where, toutes les données de la table seront supprimées)

DELETE FROM 表名 [ WHERE 条件 ];

  • Exemple 1

    DELETE FROM emp WHERE name = 'Jack';
    

    Insérer la description de l'image ici

  • Exemple 2

    DELETE FROM emp WHERE name = 'Jack';
    

    L'instruction ci-dessus supprimera toutes les données de la table :
    Insérer la description de l'image ici

DQL (Data Query Language) : langage de requête de données, utilisé pour interroger les enregistrements dans les tables de la base de données

  • grammaire:

    SELECT
    	字段列表
    FROM
    	表名字段
    WHERE
    	条件列表
    GROUP BY
    	分组字段列表
    HAVING
    	分组后的条件列表
    ORDER BY
    	排序字段列表
    LIMIT
    	分页参数
    
  • Structure du tableau de préparation des données
     :

    create table emp (
        id int comment '编号',
        workno varchar(10) comment '工号',
        name varchar(10) comment '姓名',
        gender char(1) comment '性别',
        age tinyint unsigned comment '年龄',
        idcard char(18) comment '身份证号',
        workaddress varchar(50) comment '工作地址',
        entrydate date comment '入职时间'
    ) comment '员工表';
    

    Données du tableau :

    INSERT INTO emp (id, workno, name, gender, age, idcard,workaddress, entrydate)
    VALUES 
    (1,'1','柳岩','女',20,'123456789012345678' ,'北京','2000-01-01'),
    (2,'2','张无忌','男',18,'123456789012345670' ,'北京' ,'2005-09-01'),
    (3,'3','韦一笑','男',38,'123456789712345670' ,'上海' ,'2005-08-01'),
    (4,'4','赵敏','女',18,'123456757123845670' ,'北京' ,'2009-12-01'),
    (5,'5','小昭','女',16,'123456769012345678' ,'上海' ,'2007-07-01'),
    (6,'6','杨道','男',28,'12345678931234567X' ,'北京' ,'2006-01-01'),
    (7,'7','范瑶','男',40,'123456789212345670' ,'北京' ,'2005-05-01'),
    (8,'8','黛绮丝','女',38,'123456157123645670' ,'天津' ,'2015-05-01'),
    (9,'9','范凉凉','女',45,'123156789012345678' ,'北京' ,'2010-04-01'),
    (10,'10','陈友谅','男',53,'123456789012345670' ,'上海' ,'2011-01-01'),
    (11,'11','张士诚','男',55,'123567897123465670' ,'江苏' ,'2015-05-01'),
    (12,'12','常遇春','男',32,'123446757152345670' ,'北京' ,'2004-02-01'),
    (13,'13','张三丰','男',88,'123656789012345678' ,'江苏' ,'2020-11-01'),
    (14,'14','灭绝','女',65,'123456719012345670' ,'西安' ,'2019-05-01'),
    (15,'15','胡青牛','男',70,'12345674971234567X' ,'西安' ,'2018-04-01'),
    (16,'16','周芷若','女',18,null ,'北京' ,'2012-06-01');
    
    

Insérer la description de l'image ici

Requête de base
Requête de champs spécifiés (simples ou multiples) :SELECT 字段1, 字段2, 字段3, ... FROM 表名;

SELECT 字段1, 字段2, 字段3, ... FROM 表名;

  • Exemple
    Interroger les champs spécifiés suivants

    select name,workno,age from emp;
    

    Insérer la description de l'image ici

Interroger tous les champs : SELECT * FROM 表名;(Il est recommandé de ne pas écrire directement pendant le développement *)
  • Exemple:
    SELECT * FROM emp;
    
    Insérer la description de l'image ici
Définir un alias : SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;ouSELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;

SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;
SELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;

  • Exemple:

    SELECT workaddress as '工作地址' FROM emp;
    

    ou:

    SELECT workaddress '工作地址' FROM emp;
    

    Insérer la description de l'image ici

Supprimez les enregistrements en double :SELECT DISTINCT 字段列表 FROM 表名;

SELECT DISTINCT 字段列表 FROM 表名;

  • Exemple:

    select distinct workaddress from emp;
    

    Insérer la description de l'image ici

Échapper : ESCAPEle mot-clé définit les caractères d'échappement

SELECT * FROM 表名 WHERE name LIKE '/_张三' ESCAPE '/'
/_n'agit pas comme un caractère générique après

Dans les requêtes SQL, l'opérateur LIKE est utilisé pour rechercher un modèle dans une colonne. Parmi eux, le signe de pourcentage (%) et le trait de soulignement (_) sont des caractères spéciaux. Le signe pourcentage représente n'importe quel nombre de caractères, y compris le caractère zéro ; et le trait de soulignement représente un seul caractère arbitraire.

Parfois, nous devrons peut-être rechercher des données contenant ces caractères spéciaux. Pour que ces caractères spéciaux soient reconnus comme des caractères normaux, nous devons utiliser le mot-clé ESCAPE. Il définit un caractère d'échappement qui vous permet de rechercher des signes de pourcentage ou des traits de soulignement dans les modèles LIKE.

Dans l'exemple que vous avez donné, ESCAPE '/'la barre oblique ( ) est déclarée /comme caractère d'échappement. Ensuite, dans la clause WHERE, name LIKE '/_张三'cela signifie rechercher tous les noms commençant par « Zhang San » et précédés de n'importe quel caractère. Par conséquent, /_张三la correspondance peut être « 1 trois », « un trois » et ainsi de suite.

En général, l'ajout ESCAPE '/'consiste à spécifier explicitement que dans cette requête, nous voulons traiter la barre oblique ( /) comme un caractère d'échappement afin que le trait de soulignement suivant puisse être correctement analysé en mode LIKE.

Requête conditionnelle : WHEREmot-clé
grammaire

SELECT 字段列表 FROM 表名 WHERE 条件列表;

opérateur conditionnel
opérateur de comparaison Fonction
> plus que le
>= supérieur ou égal à
< moins que
<= inférieur ou égal à
= égal
<> ou != pas égal à
ENTRE ET … Dans une certaine plage (y compris les valeurs minimales et maximales)
DANS(…) La valeur dans la liste après in, sélection multiple
Espace réservé COMME Correspondance floue (_ correspond à un seul caractère, % correspond à n'importe quel nombre de caractères)
EST NULL est NULL
Opérateurs logiques
Opérateurs logiques Fonction
ET 或 && Et (plusieurs conditions sont vraies en même temps)
OU 或 || Ou (l'une des multiples conditions est vraie)
PAS ou ! Non non
exemple
# 查找年龄等于20的员工信息
select * from emp where age = 20;

# 查找年龄等于20的员工信息
select * from emp where age < 20;

# 查找身份证号为null的员工信息
select * from emp where idcard is null;

# 查找身份证号不是null的员工信息
select * from emp where idcard is not null;

# 查找年龄不等于88的员工信息
select * from emp where age != 88;
select * from emp where age <> 88;

# 查询年龄在15到20岁之间的员工信息
select * from emp where age > 15 and age < 20;
select * from emp where age > 15 && age < 20;
# 注意between为闭区间
select * from emp where age between 15 and 20;

# 查询性别为女且年龄小于25岁的员工
select * from emp where gender = '女' and age < 25;
select * from emp where age in(18,19,40);

# 查询姓名为两个字的员工信息
select * from emp where name like '__';

# 查询身份证号最后一位为X的员工信息
select * from emp where emp.idcard like '%X';
select * from emp where emp.idcard like '_________________X';

Insérer la description de l'image ici

Requête d'agrégation (fonction d'agrégation) (count, max, min, avg, sum) (traiter une colonne de données dans son ensemble et effectuer des calculs verticaux)
Fonctions d'agrégation communes
fonction Fonction
compter nombre total
maximum valeur maximum
min valeur minimum
moyenne valeur moyenne
somme Somme
grammaire

SELECT 聚合函数(字段列表) FROM 表名;

Remarque : toutes les valeurs nulles ne participent pas aux calculs de la fonction d'agrégation
Exemple
-- 统计企业员工数量(注意:不会统计字段值为null的行,所以不要把可能为null的字段来用于统计)
SELECT count(*) FROM emp;
SELECT count(id) FROM emp;

-- 统计员工的平均年龄
SELECT avg(age) FROM emp;

-- 统计员工的最大年龄
SELECT max(age) FROM emp;

-- 统计员工的最小年龄
SELECT min(age) FROM emp;

-- 统计西安地区的年龄之和
SELECT sum(age) FROM emp where workaddress = '西安';

Requête de groupe : GROUP BYmots-clés, HAVINGmots-clés (les alias peuvent ASêtre définis avec des mots-clés)
grammaire

SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后的过滤条件 ];

La différence entre où et avoir
  • Le timing d'exécution est différent : où est le filtrage avant le regroupement, et si la condition Where n'est pas remplie, le regroupement ne sera pas effectué ; have est le filtrage des 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.
exemple
-- 根据性别分组,统计男性和女性数量(只显示分组数量,不显示哪个是男哪个是女)
select count(*) from emp group by gender;

-- 根据性别分组,统计男性和女性数量(会显示哪个是男,哪个是女)
select gender, count(*) from emp group by gender;

-- 根据性别分组,统计男性和女性的平均年龄
select gender, avg(age) from emp group by gender;


-- 统计根据工作地址分组的人数
select workaddress, count(*) from emp group by workaddress;

-- 统计年龄小于45,根据工作地址分组的人数
select workaddress, count(*) from emp where age < 45 group by workaddress;

-- 统计年龄小于45,根据工作地址分组的人数,输出员工数量大于等于3的组(可设置别名as,as关键字可省略)
select workaddress, count(*) from emp where age < 45 group by workaddress having count(*) >= 3;
select workaddress, count(*) address_count from emp where age < 45 group by workaddress having address_count >= 3;
select workaddress, count(*) as address_count from emp where age < 45 group by workaddress having address_count >= 3;
Précautions
  • Ordre d'exécution : où > fonction d'agrégation > avoir
  • Après le regroupement, les champs interrogés sont généralement des fonctions d'agrégation et des champs de regroupement. Cela n'a aucun sens d'interroger d'autres champs.
Requête de tri : mot clé ORDER BY, ASC : ordre croissant (par défaut), DESC : ordre décroissant
grammaire

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;

Trier par
  • ASC : Ascendant (par défaut)
  • DESC : ordre décroissant
exemple
-- 根据年龄升序排序
SELECT * FROM emp ORDER BY age ASC;
SELECT * FROM emp ORDER BY age;

-- 根据入职时间降序排序
SELECT * FROM emp ORDER BY entrydate desc ;

-- 两字段排序,根据年龄升序排序,入职时间降序排序
SELECT * FROM emp ORDER BY age ASC, entrydate DESC;
Précautions

S'il s'agit d'un tri multi-champs, ce n'est que lorsque le premier champ a la même valeur que le deuxième champ sera trié.

Requête de pagination : mot-clé LIMIT
grammaire

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;

exemple
-- 查询第一页数据,展示10条
SELECT * FROM emp LIMIT 0, 10;
-- 查询第一页时,索引可省略
SELECT * FROM emp LIMIT 10;

-- 查询第二页
SELECT * FROM emp LIMIT 10, 10;
Précautions
  • 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 base de données. Différentes bases de données ont des implémentations différentes. MySQL est LIMIT.
  • Si vous interrogez la première page de données, l'index de départ peut être omis et simplement abrégé LIMIT 10
Exercice récapitulatif des instructions de requête DQL

Insérer la description de l'image ici
Insérer la description de l'image ici

Notez que la cinquième question peut être ambiguë :

Il peut avoir les deux interprétations suivantes :

1. Interrogez les informations des cinq premiers employés de la table emp dont le sexe est de sexe masculin et dont l'âge est compris entre 20 et 40 ans (inclus). Triez les résultats de la requête par ordre croissant d'âge. S'ils ont le même âge, triez-les dans ordre croissant du temps de jointure.
2. 1. Demander que le sexe dans la table emp est un homme et que l'âge est compris entre 20 et 40 ans (y compris 20 et 40 ans). Trier par âge par ordre croissant. Si l'âge est le même, trier par heure de jointure par ordre croissant. pour obtenir les informations des 5 premiers salariés.

Pour la première compréhension, "interrogez les informations des cinq premiers employés de la table emp dont le sexe est de sexe masculin et dont l'âge est de 20 à 40 ans (inclus). Triez les résultats de la requête par ordre croissant d'âge. Si l'âge est le pareil, triez-le par ordre croissant d'heure de jointure. Trier." En raison des limitations de SQL, vous ne pouvez pas récupérer directement les 5 premiers éléments puis les trier, mais cela peut être réalisé via une sous-requête, comme suit :

SELECT *
FROM (
    SELECT *
    FROM emp
    WHERE sex = '男' AND age BETWEEN 20 AND 40
    LIMIT 5
) AS subquery
ORDER BY age ASC, join_time ASC;

Pour la deuxième compréhension, "Interrogez le sexe de la table vide comme étant un homme et son âge est compris entre 20 et 40 ans (20 et 40 ans inclus). Triez par âge par ordre croissant. Si l'âge est le même, triez en joignant temps par ordre croissant pour obtenir les informations des 5 premiers employés." Ce problème est de trier d'abord puis de prendre les cinq premiers enregistrements. L'instruction SQL correspondante est :

SELECT *
FROM emp
WHERE sex = '男' AND age BETWEEN 20 AND 40
ORDER BY age ASC, join_time ASC
LIMIT 5;
DQLOrdre de rédaction de la déclaration et ordre d'exécution

Insérer la description de l'image ici

DQLOrdre d'écriture :SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY -> LIMIT
Séquence d'exécution DQL :FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT
Exemple : Vérifier l'ordre d'exécution DQL
-- 查询年龄大于15的员工的姓名、年龄,并根据年龄进行升序排序
select name,age from emp where age > 15 order by age asc ;
-- 验证执行顺序
select e.name e_name,e.age e_age from emp e where e.age > 15 order by e_age asc ;

DCL (Data Control Language) : langage de contrôle des données, 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

Gérer les utilisateurs
Interroger l'utilisateur
USE mysql;
SELECT * FROM user;

Insérer la description de l'image ici
La signification de localhost et root est que cette racine ne peut accéder à la base de données que via la machine locale et ne peut pas accéder à la base de données à distance.

Créer un utilisateur

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

Changer le mot de passe utilisateur

ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

supprimer des utilisateurs

DROP USER '用户名'@'主机名';

exemple
-- 创建用户arnoldtest1,只能在当前主机localhost访问,密码123456

# create user 'arnoldtest1'@'localhost' identified by 'Reaishenghuo';
-- 提示:[2023-10-02 02:07:26] [HY000][1819] Your password does not satisfy the current policy requirements
-- 用:SHOW VARIABLES LIKE 'validate_password%';查看当前密码规则
SHOW VARIABLES LIKE 'validate_password%';
# validate_password.changed_characters_percentage,0
# validate_password.check_user_name,ON
# validate_password.dictionary_file,""
# validate_password.length,8
# validate_password.mixed_case_count,1
# validate_password.number_count,1
# validate_password.policy,MEDIUM
# validate_password.special_char_count,1
CREATE USER 'arnoldTest1'@'localhost' IDENTIFIED BY 'Reai#2023shenghuo';

-- 创建用户arnoldTest1,能在任意主机访问
create user 'arnoldTest1'@'%' identified by 'Reai#2023shenghuo';

-- 修改密码
alter user 'arnoldTest1'@'localhost' identified with mysql_native_password by 'Reai#2024shenghuo';

-- 删除用户
drop user 'arnoldTest1'@'localhost';
drop user 'arnoldTest1'@'%';
Précautions
  • Le nom d'hôte peut être remplacé par %. Le compte créé à ce moment peut accéder à la base de données depuis n'importe quel hôte.
  • Ce type de SQLdéveloppeur effectue relativement peu d'opérations, DBA(Database Administrator数据库管理员)utilisant principalement
Contrôle des autorisations
Autorisations communes
Autorisations illustrer
TOUS, TOUS LES PRIVILÈGES Toutes les autorisations
SÉLECTIONNER Données de requête
INSÉRER Insérer des données
MISE À JOUR modifier les données
SUPPRIMER Suprimmer les données
MODIFIER Modifier le tableau
BAISSE Supprimer la base de données/table/vue
CRÉER Créer une base de données/table

Pour plus d'autorisations, veuillez consulter la liste des autorisations.

Autorisations de requête :SHOW GRANTS FOR

SHOW GRANTS FOR '用户名'@'主机名';

Accorder des autorisations : GRANT mot-clé

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

Révoquer l'autorisation : REVOKEmot clé

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

Précautions
  • Plusieurs autorisations séparées par des virgules
  • 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 pour représenter tous
Exemple

-- 创建用户
CREATE USER 'arnoldTest'@'localhost' IDENTIFIED BY 'Reai#2023shenghuo';

-- 查询权限
SHOW GRANTS FOR 'arnoldTest'@'localhost';

-- 授予权限(授予'arnoldTest'@'localhost'用户对myDatabase所有表的所有权限)
grant all on myDatabase.* to 'arnoldTest'@'localhost' ;

-- 撤销权限
revoke all on myDatabase.* from 'arnoldTest'@'localhost' ;

-- 删除用户
drop user 'arnoldTest'@'localhost';


Je ne sais pas pourquoi je reçois l'ancienne invite lors de l'octroi et de la révocation d'autorisations :

myDatabase> grant all on myDatabase.* to 'arnoldTest'@'localhost'
[2023-10-02 02:44:57] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'
[2023-10-02 02:44:57] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'
myDatabase> revoke all on myDatabase.* from 'arnoldTest'@'localhost'
[2023-10-02 02:44:59] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'
[2023-10-02 02:44:59] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'

Problèmes inexplicables, parlons-en plus tard ! . . .

Je suppose que tu aimes

Origine blog.csdn.net/Dontla/article/details/133438086
conseillé
Classement