前言时刻,这一篇文章是简单的增删改查操作,下一篇才是难点。
写作环境:
MacOS、MySQL8.0
写SQL工具:Navicat15.0和电脑自带终端
写作软件:Typora
作者:西园公子:www.zwjjiaozhu.top
首先先创建一个t7
表,以下所有命令均是对该表进行操作。
CREATE TABLE t7 (`name` VARCHAR(10), age TINYINT DEFAULT 20) CHARACTER SET utf8 COLLATE utf8_bin;
# 增加一个job字段,因为我是忘记添加了,你也可以放到上面
ALTER TABLE t7 ADD job VARCHAR(20) NOT NULL;
# 输出当前数据库下所有表的名称
SHOW TABLES;复制
1)指定所有字段对应的数据:
此时可以省略部分字段。
# 1.1 全部插入
INSERT INTO t7 VALUE('张', 18, '干饭人');复制
2)只指定几个字段的值:
不指定某字段的值时:
若该字段设置了默认值,则默认插入该值,若没有则插入空白NULL。
若该字段设置了不允许为空not null,有默认值就插入,若没有则会报错。
# 1.2 插入部分数据
INSERT INTO t7 (`name`, job) VALUES('章', '敲键盘'); # ✅
INSERT INTO t7 (`name`) VALUES('章'); # ❌复制
如果添加 where 子句的话,则默认修改表中全部数据。
UPDATE `table_name` SET column_name='value' [WHERE 条件];
复制
小例子:
# 2、修改表数据
# 2.1 不加选择显示where的话,则默认修改表中全部数据
UPDATE t7 SET job='键盘';
# 2.2 添加where限制条件,只有where为true才修改。
UPDATE t7 SET age=19 WHERE `name`='张';复制
如果不加 where 子句,则默认选择全表,结果就是删除表中的全部内容。
DELETE FROM t9 [WHERE 条件];
复制
小例子:
mysql> DELETE FROM t9 WHERE name='张飞';
Query OK, 1 row affected (0.00 sec)复制
首先新建表t9,并插入一些测试数据。
# 1、创建一个表
CREATE TABLE t9 (`name` VARCHAR(20), math TINYINT DEFAULT 0, chinese TINYINT DEFAULT 0, english TINYINT DEFAULT 0) CHARACTER SET utf8 COLLATE utf8_bin;
# 2、插入数据
INSERT INTO t9 VALUES('张飞', 68, 76, 52);
INSERT INTO t9 (`name`, chinese) VALUES('关羽', 58);
INSERT INTO t9 VALUES('宋江', 98, 96, 82);
INSERT INTO t9 VALUES('宋无缺', 98, 96, 92);
INSERT INTO t9 VALUES('我是及时雨', 78, 86, 92);复制
1)查询表中全部数据:
select * from table_name,其中*代表所有列
mysql> select * from t9;
+--------+------+---------+---------+
| name | math | chinese | english |
+--------+------+---------+---------+
| 张飞 | 68 | 76 | 52 |
| 关羽 | 0 | 58 | 0 |
| 宋江 | 98 | 96 | 82 |
+--------+------+---------+---------+
3 rows in set (0.00 sec)复制
2)只查询部分列内容:
select column_name1, ..., column_name6 from table_name,其中column_name代表列名。
mysql> select name, math, english from t9;
+--------+------+---------+
| name | math | english |
+--------+------+---------+
| 张飞 | 68 | 52 |
| 关羽 | 0 | 0 |
| 宋江 | 98 | 82 |
+--------+------+---------+
3 rows in set (0.00 sec)复制
写 where 语句,就不得不介绍一下 where 子句中的运算符。
比较运算符:
>(大于)、<(大于)、>=(大于)、<=(大于)、<>(不等于)、!=(不等于)。
between A and B(在 A 和 B 之间吗?包括 A 和 B)
in(set)(在集合 set 中吗?)
is NULL(判断为空吗?)
like 'a%'(模糊匹配,判断是否像这个字符串,%表示可以匹配任何长度的字符串),或者not like 'a%'
逻辑运算符:从左到右运算,括号最优先
and:逻辑与,or:逻辑或,not:逻辑非。

一笼小问题
1)筛选名字是宋开头的同学:
# like
mysql> SELECT * FROM t9 WHERE `name` LIKE '宋%';
+-----------+------+---------+---------+
| name | math | chinese | english |
+-----------+------+---------+---------+
| 宋江 | 98 | 96 | 82 |
| 宋无缺 | 98 | 96 | 92 |
+-----------+------+---------+---------+复制
2)筛选出数学成绩是78或者68的同学:
# in
mysql> SELECT * FROM t9 WHERE math IN (78, 68); # in
+-----------------+------+---------+---------+
| name | math | chinese | english |
+-----------------+------+---------+---------+
| 张飞 | 68 | 76 | 52 |
| 我是及时雨 | 78 | 86 | 92 |
+-----------------+------+---------+---------+复制
3)筛选数学大于70分且英语不等于82,或者是语文在90和100之间的同学:
mysql> SELECT * FROM t9 WHERE math > 70 and english != 82 OR chinese BETWEEN 90 AND 100;
+-----------------+------+---------+---------+
| name | math | chinese | english |
+-----------------+------+---------+---------+
| 宋江 | 98 | 96 | 82 |
| 我是及时雨 | 78 | 86 | 92 |
| 宋无缺 | 98 | 96 | 92 |
+-----------------+------+---------+---------+复制
1)起别名可利于展示:
mysql> SELECT `name` AS '姓名', math AS '数学' FROM t9;
+-----------------+--------+
| 姓名 | 数学 |
+-----------------+--------+
| 张飞 | 68 |
| 关羽 | 0 |
| 宋江 | 98 |
| 我是及时雨 | 78 |
| 宋无缺 | 98 |
+-----------------+--------+复制
复制
2)美观:
前面定义的别名,后面可以使用,简化了代码。
mysql> SELECT `name`, (math+chinese+english) AS total_score FROM t9 ORDER BY total_score ASC;
+-----------------+-------------+
| name | total_score |
+-----------------+-------------+
| 关羽 | 58 |
| 张飞 | 196 |
| 我是及时雨 | 256 |
| 宋江 | 276 |
| 宋无缺 | 286 |
+-----------------+-------------+复制
1)升序:order by column_name ASC,若不设置 ASC 则默认就是升序
mysql> SELECT name, math FROM t9 ORDER BY math ASC;
+-----------------+------+
| name | math |
+-----------------+------+
| 关羽 | 0 |
| 张飞 | 68 |
| 我是及时雨 | 78 |
| 宋江 | 98 |
| 宋无缺 | 98 |
+-----------------+------+复制
2)降序:order by column_name DESC
mysql> SELECT name, math FROM t9 ORDER BY math DESC;
+-----------------+------+
| name | math |
+-----------------+------+
| 宋江 | 98 |
| 宋无缺 | 98 |
| 我是及时雨 | 78 |
| 张飞 | 68 |
| 关羽 | 0 |
+-----------------+------+复制


总结


Just do it!