Maison > base de données > tutoriel mysql > le corps du texte

Un article expliquant en détail le fonctionnement CURD des tables MySQL

青灯夜游
Libérer: 2023-02-16 19:20:17
avant
1511 Les gens l'ont consulté

Cet article vous donnera une compréhension détaillée du fonctionnement CURD des tables MySQL. J'espère qu'il vous sera utile !

1. Instruction SQL

Un langage de programmation pour l'exploitation de bases de données relationnelles Il définit un ensemble de normes unifiées pour l'exploitation de bases de données relationnelles, appelées SQL.

- Syntaxe générale SQL

1. Les instructions SQL peuvent être écrites sur une seule ou 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.

- Commentaires
  • Commentaires sur une seule ligne : – Commentez le contenu ou utilisez # pour commenter le contenu.
  • Commentaires multilignes : /* Contenu du commentaire*/
- Classification des instructions SQL
classification description
DDL (déifnition) langage de définition de données (utilisé définir la base de données Objet, base de données, table, champ)
DML (manipulation) Langage de manipulation de données (ajouter, supprimer et modifier des données dans la table de la base de données)
DQL (requête) Langage de requête de données, utilisé pour les enregistrements de requête des tables de la base de données
DCL(control) langage de contrôle des données, utilisé pour créer des utilisateurs de base de données et contrôler les droits d'accès à la base de données

2. Opérations de base sur les tables

- Créer une table
  • Dans la même base de données, il ne peut pas y avoir deux tables portant le même nom. Les noms de tables et les noms de colonnes ne peuvent pas répéter les mots-clés SQL.

  • Syntaxe :

create table 表名(定义列1, 定义列2, .......);
列 -> 变量名 数据类型
Copier après la connexion
  • Exemple :
mysql> create table if not exists book(
    ->   book_name varchar(32) comment '图书名称',
    ->   book_author varchar(32)comment  '图书作者' ,
    ->   book_price decimal(12,2) comment '图书价格',
    ->   book_category varchar(12) comment '图书分类',
    ->   publish_data timestamp
    -> )character set utf8mb4;
    
Query OK, 0 rows affected (0.04 sec)
Copier après la connexion
- Afficher le tableau dans la bibliothèque
  • Syntaxe :

    show tables;
    Copier après la connexion
  • Exemple :

    mysql> show tables;
    +--------------------+
    | Tables_in_mytestdb |
    +--------------------+
    | book               |
    +--------------------+
    1 row in set (0.00 sec)
    Copier après la connexion
- Voir le tableau structure
  • Syntaxe :

    desc  表名;
    Copier après la connexion
  • Exemple :

La structure de la table dans la base de données MySQL contient principalement les informations suivantes : nom du champ, type de champ, autoriser ou non le vide, type d'index. Valeur par défaut, informations étendues

- Supprimer la table
  • Syntaxe :
drop table 表名
Copier après la connexion
  • Exemple :
mysql> desc test1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(10) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

mysql> drop table test1;
Query OK, 0 rows affected (0.04 sec)

mysql> desc test1;
ERROR 1146 (42S02): Table 'mytestdb.test1' doesn't exist
Copier après la connexion
- Renommer la table
  • Syntaxe :

    rename table old_name to new_name;
    Copier après la connexion
  • Exemple :

    mysql> rename table book to eBook;
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> show tables;
    +--------------------+
    | Tables_in_mytestdb |
    +--------------------+
    | ebook              |
    +--------------------+
    1 row in set (0.00 sec)
    Copier après la connexion

3. Opérations d'ajout, de suppression, de vérification et de modification dans MySQL

CRUD est l'acronyme des quatre mots Créer, Récupérer, Mettre à jour et Supprimer

Cas :

-- 创建一张图书表
mysql> create table if not exists book(
    ->   book_name varchar(32) comment '图书名称',
    ->   book_author varchar(32)comment  '图书作者' ,
    ->   book_price decimal(12,2) comment '图书价格',
    ->   book_category varchar(12) comment '图书分类',
    ->   publish_data timestamp
    -> )character set utf8mb4;
Copier après la connexion
- Ajouter (insérer une déclaration)
  • Insertion d'une seule ligne (toutes les colonnes)

    insert into 表名 values(对应列的参数列表); 
    -- 一次插入一行
    Copier après la connexion
  • Insertion de plusieurs lignes (toutes les colonnes)

    insert into 表名 values(对应列的实参列表), (对应列的参数列表), (对应列的参数列表);              
    -- 一次插入多行            -- 一次插入多行
    Copier après la connexion
  • Spécifier l'insertion de colonne

    • valeurs Le contenu, le numéro et le type dans ce qui suit ( ) doit correspondre à la structure spécifiée entre () après le nom de la table
    • Les colonnes non spécifiées seront remplies avec les valeurs par défaut
    insert into 表名 (需要插入的列) values(对应列的参数列表); 
    -- 一次插入一行
    insert into 表名 (需要插入的列) values(对应列的参数列表), (), ().... 
    -- 一次插入多行
    Copier après la connexion
  • Case

    # 单行输入
    
    mysql> 
    insert into book values('计算机网络','谢希仁',45,'计算机类','2020-12-25 12:51:00');
    Query OK, 1 row affected (0.01 sec)
    
    #多行输入
    
    mysql> 
    insert into book values('计算机组成原理','王峰',45,'硬件类','2020-12-12 12:00:00'),
        -> ('微机原理','李华',97,'硬件类','2000-12-19 20:00:00');
        
    Query OK, 2 rows affected (0.04 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    #指定列插入
    
    mysql>
    insert into book(book_name,book_author,publish_data) values ('软件工程','张三','2020-05-06 12:00:00');
    Query OK, 1 row affected (0.02 sec)
    Copier après la connexion
  • Le tableau après l'insertion des données est comme indiqué dans la figure :

Dans MySQL, l'efficacité de l'insertion de plusieurs enregistrements l'un après l'autre est inférieure à celle de l'insertion de plusieurs enregistrements à la fois. Les raisons sont les suivantes :

  • Requête réseau et temps de réponse supplémentaires, chaque insertion aura un.
  • Le serveur de base de données enregistre les données sur le disque dur. Lors des opérations d'E/S, l'impact du nombre d'opérations est supérieur à la quantité de données.
  • Chaque opération SQL, les transactions ouvertes en interne occuperont également une certaine période. quantité de frais généraux.
- Requête (instruction select)
  • Requête de colonne complète

Syntaxe

select * from 表名

--  * 表示通配符, 可以匹配表中的所有列.
Copier après la connexion

Utiliser avec prudence dans les bases de données au niveau de l'entreprise, il est facile à utiliser Les E/S. ou la bande passante du réseau est pleine. Si un client utilisateur externe souhaite accéder au serveur via le haut débit, le serveur ne pourra pas répondre correctement.

Exemple

select * from book;
Copier après la connexion

  • Spécifiez la requête de colonne
select 列名...  from  表名
Copier après la connexion
  • Exemple
mysql> select book_name from book;
+----------------+
| book_name      |
+----------------+
| 计算机网络     |
| 计算机组成原理 |
| 微机原理       |
| 软件工程       |
+----------------+
4 rows in set (0.01 sec)

mysql> select book_author,book_price from book;
+-------------+------------+
| book_author | book_price |
+-------------+------------+
| 谢希仁      |      45.00 |
| 王峰        |      45.00 |
| 李华        |      97.00 |
| 张三        |       NULL |
+-------------+------------+
4 rows in set (0.00 sec)
Copier après la connexion
  • Interrogez votre champ en tant qu'expression
select 字段或表达式, 字段或表达式... from 表名;
Copier après la connexion
  • Exemple
-- 查询图书涨价10元后所有图书的名称作者和价格
mysql> select book_name ,book_author,book_price + 10 from book;
+----------------+-------------+-----------------+
| book_name      | book_author | book_price + 10 |
+----------------+-------------+-----------------+
| 计算机网络     | 谢希仁      |           55.00 |
| 计算机组成原理 | 王峰        |           55.00 |
| 微机原理       | 李华        |          107.00 |
| 软件工程       | 张三        |            NULL |
+----------------+-------------+-----------------+
4 rows in set (0.00 sec)
Copier après la connexion
  • Spécifiez l'expression ou le champ Alias ​​query

MySQL prend en charge l'attribution d'un alias à l'expression interrogée. L'utilisation de as peut rendre les résultats de la requête plus intuitifs et le code plus lisible.

Exemple
    select 列名或表达式 as 别名, ... from 表名;
    Copier après la connexion
  • Il n'y a pas d'éléments book_name en double dans les résultats de la requête, ce qui permet d'obtenir l'effet de déduplication.
  • Trier la requête
    -- 将涨价20元后的图书价格取为别名newprice
    mysql> select book_name,book_author,book_price + 20 as newprice from book;
    +----------------+-------------+----------+
    | book_name      | book_author | newprice |
    +----------------+-------------+----------+
    | 计算机网络     | 谢希仁      |    65.00 |
    | 计算机组成原理 | 王峰        |    65.00 |
    | 微机原理       | 李华        |   117.00 |
    | 软件工程       | 张三        |     NULL |
    +----------------+-------------+----------+
    4 rows in set (0.00 sec)
    Copier après la connexion
  • Exemple
select distinct 列名 from 表名
Copier après la connexion

Lors de l'utilisation de requêtes triées, requête ascendante asc peut être omis, c'est-à-dire que la valeur par défaut est l'ordre croissant et la valeur nulle doit être la plus petite d'entre elles
  • Plusieurs champs peuvent être triés et la priorité est dans l'ordre d'écriture.
    --book 表中插入一条重复的book_name数据
    
    mysql> insert into book values('计算机网络','张华',89,'计算机类','2020-11-23 11:00:00');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select book_name from book;
    +----------------+
    | book_name      |
    +----------------+
    | 计算机网络     |
    | 计算机组成原理 |
    | 微机原理       |
    | 软件工程       |
    | 计算机网络     |
    +----------------+
    5 rows in set (0.00 sec)
    
    mysql> select distinct book_name from book;
    +----------------+
    | book_name      |
    +----------------+
    | 计算机网络     |
    | 计算机组成原理 |
    | 微机原理       |
    | 软件工程       |
    +----------------+
    4 rows in set (0.00 sec)
    Copier après la connexion
Requête conditionnelle
Lorsque nous utilisons des requêtes, nous avons généralement diverses conditions préalables et nous devons utiliser des requêtes conditionnelles pour terminer.
    select 列名 
    from 表名 
    order by 列名 asc(升序)/desc(降序); 
    #  想要排序的列
    Copier après la connexion
  • Opérateurs de comparaison
运算符说明
>, >=, <, <=大于,大于等于,小于,小于等于
=等于,null 不安全,例如 null = null 的结果是 null(false)
<=>等于,null 安全,例如 null <=> null 的结果是 true(1)
!=, <>不等于
between a0 and a1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 true(1)
in (option, …)如果是 option 中的任意一个,返回 true(1)
is null是 null
is not null不是 null
like模糊匹配; % 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

逻辑运算符

运算符说明
and多个条件必须为 true , 结果才为true
or任意一个条件为true 结果才为true
not条件为true , 结果为false

  • WHERE条件可以使用表达式,但不能使用别名。

  • AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

  • 案例
-- 查询图书价格低于50的图书作者和图书名称
mysql> select book_name,book_author from book where book_price < 50;
+----------------+-------------+
| book_name      | book_author |
+----------------+-------------+
| 计算机网络     | 谢希仁      |
| 计算机组成原理 | 王峰        |
+----------------+-------------+
2 rows in set (0.05 sec)  
-- 查询图书价格等于97的图书作者
mysql> select book_name ,book_author from book where book_price = 97;
+-----------+-------------+
| book_name | book_author |
+-----------+-------------+
| 微机原理  | 李华        |
+-----------+-------------+
1 row in set (0.00 sec)
-- 查询图书价格在50 - 100 之间的图书名称
mysql> select book_name from book where book_price between 50 and 100;
+------------+
| book_name  |
+------------+
| 微机原理   |
| 计算机网络 |
+------------+
2 rows in set (0.02 sec)\
-- 查询图书价格在此范围内的图书名称
mysql> select book_name from book where book_price in (12,45);
+----------------+
| book_name      |
+----------------+
| 计算机网络     |
| 计算机组成原理 |
+----------------+
2 rows in set (0.00 sec)
Copier après la connexion

模糊查询

  • % 匹配任意多个(包括 0 个)字符
  • _ 匹配严格的一个字符
#查询姓张的作者的书本价格书名.
mysql> select book_price,book_name,book_author from book where book_author like &#39;张%&#39;;

+------------+------------+-------------+
| book_price | book_name  | book_author |
+------------+------------+-------------+
|       NULL | 软件工程   | 张三        |
|      89.00 | 计算机网络 | 张华        |
+------------+------------+-------------+
2 rows in set (0.00 sec)
# 查询前缀为&#39;计算机&#39;后缀为七个字的书籍名称
mysql> select book_name from book where book_name like &#39;计算机____&#39;;
+----------------+
| book_name      |
+----------------+
| 计算机组成原理 |
+----------------+
#查询前缀为&#39;计算机&#39;的书籍名称并去重
mysql> select distinct book_name from book where book_name like &#39;计算机%&#39;;
+----------------+
| book_name      |
+----------------+
| 计算机网络     |
| 计算机组成原理 |
+----------------+
2 rows in set (0.00 sec)
Copier après la connexion
  • 分页查询

分页查询即将查询出的结果 , 按页进行呈现,并不是一次性展现出来,这种模式就是分页查询, mysql当中使用limit来实现分页查询.

  • limit 子句当中接受一个或者两个参数 , 这两个参数的值为0 或者正整数

两个参数的limit子句的用法

select 元素1,元素2  from 表名  limit offset,count;

#offset参数指定要返回的第一行的偏移量。第一行的偏移量为0,而不是1。
#count指定要返回的最大行数。
Copier après la connexion

示例:

mysql> select book_author from book limit 2, 3;
+-------------+
| book_author |
+-------------+
| 李华        |
| 张三        |
| 张华        |
+-------------+
3 rows in set (0.02 sec)

#表示获取列表当中偏移量为2(表示从第3行开始), 最大行数为3的作者名称
Copier après la connexion

带有一个参数的limit子句的用法

select 列名1.列名2 from 表名 limit count;
#  表示从结果集的开头返回的最大行数为count;
#  获取前count行的记录
Copier après la connexion

等同于

select 列名1 ,列名2 from 表名 limit 0 , count;# 第一行的偏移量为0
Copier après la connexion

示例

mysql> select book_price from book limit 5;
+------------+
| book_price |
+------------+
|      45.00 |
|      45.00 |
|      97.00 |
|       NULL |
|      89.00 |
+------------+
5 rows in set (0.00 sec)

# 获取表中前五行的图书价格 , 最大行数为5
Copier après la connexion
  • limit 结合 order by 语句 和其他条件可以获取n个最大或者最小值

    select book_name,book_price from book order by book_price desc limit 3; 
    #获取价格前三高的图书名称和图书价格
    mysql> select book_price,book_name from book order by book_price desc limit 3;
    +------------+------------+
    | book_price | book_name  |
    +------------+------------+
    |      97.00 | 微机原理   |
    |      89.00 | 计算机网络 |
    |      45.00 | 计算机网络 |
    +------------+------------+
    3 rows in set (0.01 sec)
    Copier après la connexion
  • 使用limit 获取第n高个最大值

偏移量从0开始,所以要指定从n - 1 开始,然后取一行记录

#示例:获取价格第二高的图书名称
 mysql> select book_name from book order by book_price desc limit 1,1;
+------------+
| book_name  |
+------------+
| 计算机网络 |
+------------+
1 row in set (0.00 sec)
Copier après la connexion
- 修改(update)

MySQL当中使用update关键字来对数据进行修改 , 既可以修改单列又可以修改多列.

update 表名 set 列名1 = 值 , 列名2 = 值 ... where 限制条件下修改
Copier après la connexion
  • SET子句指定要修改的列和新值。要更新多个列,请使用以逗号分隔的列表。以字面值,表达式或子查询的形式在每列的赋值中来提供要设置的值。
  • 第三,使用WHERE子句中的条件指定要更新的行。WHERE子句是可选的。 如果省略WHERE子句,则UPDATE语句将更新表中的所有行。

示例:

#将书名为&#39;软件工程&#39;的图书价格修改为66元
mysql> update book set book_price = 66 where book_name = &#39;软件工程&#39;;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select book_price from book where book_name = &#39;软件工程&#39;;
+------------
| book_price |
+------------+
|      66.00 |
+------------+
1 row in set (0.00 sec)

#将所有的图书价格修改为原来的二倍
mysql> update book set book_price = 2 * book_price;
Query OK, 5 rows affected (0.02 sec)
Rows matched: 5  Changed: 5  Warnings: 0
#更新成功
mysql> select book_price from book;
+------------+
| book_price |
+------------+
|      90.00 |
|      90.00 |
|     194.00 |
|     132.00 |
|     178.00 |
+------------+
5 rows in set (0.00 sec)
Copier après la connexion
- 删除(delete)

要从表中删除数据,需要使用delete 语句, delete 语句的 用法如下

delete from 表名 where + 条件
Copier après la connexion

首先指定需要删除数据的表,其次使用条件指定where子句中删除的行记录, 如果行匹配条件,这些行记录将会删除.

WHERE子句是可选的。如果省略WHERE子句,DELETE语句将删除表中的所有行 , 请注意,一旦删除数据,它就会永远消失。因此,在执行DELETE语句之前,应该先备份数据库,以防万一要找回删除过的数据。

示例

#删除图书表中图书单价大于150的图书记录
mysql> delete from book where book_price > 150;
Query OK, 2 rows affected (0.01 sec)

mysql> select book_price from book;
+------------+
| book_price |
+------------+
|      90.00 |
|      90.00 |
|     132.00 |
+------------+
3 rows in set (0.00 sec)
Copier après la connexion

MySQL中delete 语句也可以结合limit语句 和 order by 语句来控制删除的数量和条件

【相关推荐:mysql视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal