Vérification rapide MySQL
Parce que j'oublie souvent certaines instructions, mots-clés, opérations, etc. MySQL dans mon travail et mes études quotidiens, j'ai récemment pris le temps d'écrire le contenu suivant sur MySQL. C'est comme un dictionnaire
Réinitialiser le mot de passe MySQL Opérateurs
de type de données Fonctions communes Intégrité des données Opérations de base de la base de données Opérations sur la table elle-même Cet article sous-requête de la vue d'index de connexion multi-table Prétraitement des instructions SQL Fonctions personnalisées et procédures stockées Programmation dans MySQL
Opérations sur les données du tableau
Insérer un enregistrement de table
{
INSERT | REPLACE} [INTO] 表名
[(字段名 [, 字段名, ...])]
{
VALUES | VALUE}
(值[, 值, ...])[,(值,[, 值, ...]), ...]
例如向表t1插入值
表t1结构:
mysql> desc t1;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | char(10) | YES | UNI | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.02 sec)
# 插入一行数据
mysql> insert into t1 value(1,'老李');
Query OK, 1 row affected (0.02 sec)
mysql> insert into t1(id) values(2);
Query OK, 1 row affected (0.01 sec)
# 插入多行
mysql> insert t1 values(3, 'ab'),(4,'cd');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
La différence entre insérer et remplacer
Si un ou plusieurs champs de la table doivent être uniques (non répétables), alors si vous utilisez insert pour insérer des données qui existent déjà dans le champ correspondant de la table, une erreur sera signalée, mais remplacer supprimera d'abord l'enregistrement d'origine. puis insérez le nouveau.
mysql> desc t1;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | char(10) | YES | UNI | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.02 sec)
# 表t1中的id是主键,主键必须唯一
# 表中的已有的记录
mysql> select * from t1;
+----+--------+
| id | name |
+----+--------+
| 2 | NULL |
| 3 | ab |
| 4 | cd |
| 1 | 老李 |
+----+--------+
4 rows in set (0.00 sec)
# 这时候用insert插入会报错
mysql> insert into t1 value(2, '老王');
ERROR 1062 (23000): Duplicate entry '2' for key 't1.PRIMARY'
# 使用replace就能成功插入
mysql> replace into t1 value(2, '老王');
Query OK, 2 rows affected (0.00 sec)
# 改变后
mysql> select * from t1;
+----+--------+
| id | name |
+----+--------+
| 3 | ab |
| 4 | cd |
| 1 | 老李 |
| 2 | 老王 | # null变成了老王
+----+--------+
4 rows in set (0.00 sec)
Supprimer un enregistrement de table
DELETE FROM 表名
[WHERE where_condition]
# 原来表中内容
mysql> select * from t1;
+----+--------+
| id | name |
+----+--------+
| 3 | ab |
| 4 | cd |
| 1 | 老李 |
| 2 | 老王 |
+----+--------+
4 rows in set (0.00 sec)
# 删除t1表中id为4的记录
mysql> delete from t1 where id = 4;
Query OK, 1 row affected (0.00 sec)
mysql> select * from t1;
+----+--------+
| id | name |
+----+--------+
| 3 | ab |
| 1 | 老李 |
| 2 | 老王 |
+----+--------+
3 rows in set (0.00 sec)
# 如果不写where条件将会删除表中所有记录(但不会把表删除)
mysql> delete from t1;
Query OK, 3 rows affected (0.01 sec)
mysql> select * from t1;
Empty set (0.00 sec)
Modifier les enregistrements de la table
UPDATE 表名
SET 字段名 = 值[, 字段名 = 值, ...]
[WHERE where_condition]
# 原来的记录
mysql> select * from t1;
+----+--------+
| id | name |
+----+--------+
| 2 | 阿七 |
| 1 | 老ok |
+----+--------+
2 rows in set (0.00 sec)
# 将t1表中id为2的记录的name修改为‘老八’
mysql> update t1 set name = '老八' where id = 2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from t1;
+----+--------+
| id | name |
+----+--------+
| 1 | 老ok |
| 2 | 老八 |
+----+--------+
2 rows in set (0.00 sec)
# 不加where条件的话将会修改表中所有记录
mysql> update t1 set name = '九哥';
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
# 注:被修改的字段不能是unique约束的,并且不能是有索引的,否则会报错.
Enregistrements de table de requête
SELECT [DISTINCT]
select_expr [, select_expr,...]
[FROM 表名[, 表名,...]
[WHERE 选择条件]
[GROUP BY {字段名 | 表达式} [WITH ROLLUP]]
[HAVING 选择条件]
[ORDER BY {字段名 | 表达式} [ASC | DESC]]
[LIMIT {
[偏移量(起始行),] 行数 | 行数 OFFSET 偏移量}]]
select_expr:
字段名 [[as] 显示的字段名]
*
select语句 [as] 为select语句取的名(当做字段名)
- déduplication distincte
- où filtre (filtre)
- groupe par groupe
- ayant un filtre, généralement utilisé avec group by. Sera filtré davantage après l'endroit où il a été filtré
- ordre par défaut en ordre croissant (asc), vous pouvez spécifier asc (ordre croissant) ou desc (ordre décroissant)
- limit limite le nombre de lignes
à des valeurs plus
distinctes
où
regrouper par
ordre par
# 查询表t1中所有字段
mysql> select * from t1;
+----+--------+
| id | name |
+----+--------+
| 1 | 九哥 |
| 2 | 九哥 |
+----+--------+
2 rows in set (0.00 sec)
# 查询表t1的记录,并限制只查一行
mysql> select * from t1 limit 1;
+----+--------+
| id | name |
+----+--------+
| 1 | 九哥 |
+----+--------+
1 row in set (0.00 sec)
# 查询id为1的记录,并且只要name字段
mysql> select name from t1 where id = 1;
+--------+
| name |
+--------+
| 九哥 |
+--------+
1 row in set (0.00 sec)
# 查询id大于0的记录,并降序显示
mysql> select * from t1 where id > 0 order by id desc;
+----+--------+
| id | name |
+----+--------+
| 2 | 九哥 |
| 1 | 九哥 |
+----+--------+
2 rows in set (0.00 sec)
Des requêtes plus complexes seront introduites dans des articles ultérieurs, telles que les opérations de jointure de tables, les sous-requêtes, etc.