MySQL数据库必会的增删查改操作(CRUD)
Posted 未见花闻
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库必会的增删查改操作(CRUD)相关的知识,希望对你有一定的参考价值。
⭐️前面的话⭐️
本篇文章介绍mysql(数据库)的建表,查表,改表,删表的基本操作,即CRUD ,它表示增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。
📒博客主页:未见花闻的博客主页
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📌本文由未见花闻原创,CSDN首发!
📆首发时间:🌴2022年3月16日🌴
✉️坚持和努力一定能换来诗与远方!
💭参考书籍:📚《MySQL必知必会》,📚《高性能MySQL》
💬参考在线编程网站:🌐牛客网🌐力扣
博主的码云gitee,平常博主写的程序代码都在里面。
博主的github,平常博主写的程序代码都在里面。
🍭作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!
📌导航小助手📌
题外补充:
SQL的注释: 在SQL中可以使用“–空格+描述”来表示注释说明。
🌱1.数据表本身的基本操作
🌾1.1新建表
在选定数据库后就可以进行数据表的创建了,语法:
create table 表名(定义列1, 定义列2, .......);--具体如下
create table 表名(变量名1 数据类型1, 变量名2 数据类型2, .......);
例如创建一个学生表:
mysql> create table student(id int, name varchar(50),score double(3,1));
Query OK, 0 rows affected (0.03 sec)
🌾1.2查看表
查看某数据库中有哪些数据表,语法:
show tables;
栗子:
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| student |
| test_1 |
+----------------+
2 rows in set (0.00 sec)
🌾1.3查看表结构
查看一个数据表中有哪一些列(字段),语法:
desc 表名;
查看学生表结构:
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| score | double(3,1) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
🌾1.4删除表
(慎重操作),对数据表整体进行删除,语法:
drop table 表名;
栗子:
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| student |
| test_1 |
+----------------+
2 rows in set (0.00 sec)
mysql> drop table test_1;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| student |
+----------------+
1 row in set (0.00 sec)
🌱2.数据表的增删查改(CRUD)
🌾2.1插入
往表里插入一行数据,语法:
insert into 表名 values (对应列的实参列表);
其中values
后面()
里面的值列表要与创建表时的列一一对应。
如在学生表中插入一行:
mysql> insert into student values (1, "喜羊羊", 98);
Query OK, 1 row affected (0.01 sec)
当然也可以指定列插入,语法:
insert into 表名 (需要插入的列) values (对应列的实参列表);
没有指定的列为默认值。
栗子:
mysql> insert into student (id, name) values (2, "懒羊羊");
Query OK, 1 row affected (0.00 sec)
当然也可以多行插入,格式:
insert into 表名 values (对应列的实参列表1), (对应列的实参列表2), ...;
栗子:
mysql> insert into student values (3,"美羊羊", 92), (4, "沸羊羊", 70), (5, "暖羊羊", 88);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
有关日期数据的插入,可以使用datetime
数据类型,其中now()
能够获取当前日期。
该类型日期的格式为:yyyy-mm-dd hh:mm:ss
栗子:
mysql> create table time(id int, time datetime);
Query OK, 0 rows affected (0.02 sec)
mysql> desc time;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| time | datetime | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into time values (1, '2022-03-12');
Query OK, 1 row affected (0.00 sec)
mysql> insert into time values (2, '2022-03-12 20:22:22');
Query OK, 1 row affected (0.00 sec)
mysql> insert into time values (3, now());
Query OK, 1 row affected (0.01 sec)
🌾2.2查询
上面我们已经介绍数据库中表的查询和表中元素的插入等操作,上面所演示的代码中只提示插入成功,但是我们并不能看见它是否真的插入进去了,所以需要对表进行查询,数据表的查询是数据表增删查改中最复杂的一项操作。
🌼2.2.1查询表中所有元素(查询整表)
该操作要慎重使用,因为MySQL数据都储存在服务器的硬盘上,查询操作是将服务器中的数据返回给客户端,由于在企业级的数据库中,数据量非常的大,是TB
级别的,一旦使用整表查询,会把服务器吃满,此时其他客户端访问服务器时,服务器无法及时作出响应。
语法:
select * from 表名;
其中上面的*
表示通配符,表示一个表所有的列。
栗子,查询上面新建的学生表和日期表。
mysql> insert into time values (3, now());
Query OK, 1 row affected (0.01 sec)
mysql> select * from student;
+------+-----------+-------+
| id | name | score |
+------+-----------+-------+
| 1 | 喜羊羊 | 98.0 |
| 2 | 懒羊羊 | NULL |
| 3 | 美羊羊 | 92.0 |
| 4 | 沸羊羊 | 70.0 |
| 5 | 暖羊羊 | 88.0 |
+------+-----------+-------+
5 rows in set (0.00 sec)
mysql> select * from time;
+------+---------------------+
| id | time |
+------+---------------------+
| 1 | 2022-03-12 00:00:00 |
| 2 | 2022-03-12 20:22:22 |
| 3 | 2022-03-12 20:13:39 |
+------+---------------------+
3 rows in set (0.00 sec)
这个输出显示的表是服务器端数据库返回给客户端的一个临时表,使用查询操作不会对服务器中的数据造成影响。且该临时表在客户端打印后也随之销毁了。
🌼2.2.2指定列查询
指定列查询后,服务器返回的数据量会大大减少,因此查询一般指定列来进行查询。
语法格式:
select 列名, 列名, ... from 表名;
比如我们只查询学生表中的姓名和成绩:
mysql> select name, score from student;
+-----------+-------+
| name | score |
+-----------+-------+
| 喜羊羊 | 98.0 |
| 懒羊羊 | NULL |
| 美羊羊 | 92.0 |
| 沸羊羊 | 70.0 |
| 暖羊羊 | 88.0 |
+-----------+-------+
5 rows in set (0.00 sec)
🌼2.2.3指定字段为表达式查询
如果我们期望对数据表中的某列统一加上一个权重进行查询,我们可以指定列的表达式来查询,比如对学生表的成绩统一减少10分进行查询:
mysql> select name, score-10 from student;
+-----------+----------+
| name | score-10 |
+-----------+----------+
| 喜羊羊 | 88.0 |
| 懒羊羊 | NULL |
| 美羊羊 | 82.0 |
| 沸羊羊 | 60.0 |
| 暖羊羊 | 78.0 |
+-----------+----------+
5 rows in set (0.00 sec)
我们发现null
不受影响。
我们重新再建一个表,该表里有学号,姓名,语文成绩,数学成绩,英语成绩,计算机综合成绩,满分都为100分。
我们现在需要统计表中所有同学的总成绩和每个学生的平均分。
--建表
mysql> create table exam_score(id int, name varchar(50), chinese double(4,1), math double(4,1),english double(4,1), computer double(4,1));
Query OK, 0 rows affected (0.02 sec)
--插入数据
mysql> insert into exam_score values (1,'美羊羊',99.5,90.5,98,82),
-> (2, '懒羊羊', 58.5,32.5,24,66.5),
-> (3, '喜羊羊', 92,98,88,100),
-> (4, '沸羊羊', 78,72,74.5,81),
-> (5, '暖羊羊', 90,91,98,76),
-> (6, '灰太狼', 33,91,12,98.5),
-> (7, '小灰灰', 81, 82,78,88),
-> (8, '黑大帅', 10,11,9,20);
Query OK, 8 rows affected (0.01 sec)
Records: 8 Duplicates: 0 Warnings: 0
--整表查询
mysql> select * from exam_score;
+------+-----------+---------+------+---------+----------+
| id | name | chinese | math | english | computer |
+------+-----------+---------+------+---------+----------+
| 1 | 美羊羊 | 99.5 | 90.5 | 98.0 | 82.0 |
| 2 | 懒羊羊 | 58.5 | 32.5 | 24.0 | 66.5 |
| 3 | 喜羊羊 | 92.0 | 98.0 | 88.0 | 100.0 |
| 4 | 沸羊羊 | 78.0 | 72.0 | 74.5 | 81.0 |
| 5 | 暖羊羊 | 90.0 | 91.0 | 98.0 | 76.0 |
| 6 | 灰太狼 | 33.0 | 91.0 | 12.0 | 98.5 |
| 7 | 小灰灰 | 81.0 | 82.0 | 78.0 | 88.0 |
| 8 | 黑大帅 | 10.0 | 11.0 | 9.0 | 20.0 |
+------+-----------+---------+------+---------+----------+
8 rows in set (0.00 sec)
--统计每一位同学的总分与平均分
mysql> select name, chinese+math+english+computer,(chinese+math+english+computer)/4 from exam_score;
+-----------+-------------------------------+-----------------------------------+
| name | chinese+math+english+computer | (chinese+math+english+computer)/4 |
+-----------+-------------------------------+-----------------------------------+
| 美羊羊 | 370.0 | 92.50000 |
| 懒羊羊 | 181.5 | 45.37500 |
| 喜羊羊 | 378.0 | 94.50000 |
| 沸羊羊 | 305.5 | 76.37500 |
| 暖羊羊 | 355.0 | 88.75000 |
| 灰太狼 | 234.5 | 58.62500 |
| 小灰灰 | 329.0 | 82.25000 |
| 黑大帅 | 50.0 | 12.50000 |
+-----------+-------------------------------+-----------------------------------+
8 rows in set (0.00 sec)
🌼2.2.4指定别名字段查询
上面查询总成绩与平均成绩时,输出的表头是一个表达式,不是非常合适作为表头标题,那能不能修改别名呢?答案是肯定的。
语法格式:
select 列名或表达式 as 别名, ... from 表名;
其中as
可以省略,但是不建议这样做,因为可读性会变差。
以上面的考试成绩表为例,
mysql> select name, chinese+math+english+computer as total,(chinese+math+english+computer)/4 as average from exam_score;
+-----------+-------+----------+
| name | total | average |
+-----------+-------+----------+
| 美羊羊 | 370.0 | 92.50000 |
| 懒羊羊 | 181.5 | 45.37500 |
| 喜羊羊 | 378.0 | 94.50000 |
| 沸羊羊 | 305.5 | 76.37500 |
| 暖羊羊 | 355.0 | 88.75000 |
| 灰太狼 | 234.5 | 58.62500 |
| 小灰灰 | 329.0 | 82.25000 |
| 黑大帅 | 50.0 | 12.50000 |
+-----------+-------+----------+
8 rows in set (0.00 sec)
要注意一件事,前面指定的列的别名,不能用于其他指定列或表达式中,比如像这样就会报错。
mysql> select name, chinese+math+english+computer as total,total/4 as average from exam_score;
ERROR 1054 (42S22): Unknown column 'total' in 'field list'
🌼2.2.5去重查询
MySQL中支持对列的查询,比如上面的英语成绩,美羊羊和暖羊羊都是98分,只对英语这一列成绩查询时可以通过关键字distinct
进行去重查询。
mysql> select distinct english from exam_score;
+---------+
| english |
+---------+
| 98.0 |
| 24.0 |
| 88.0 |
| 74.5 |
| 12.0 |
| 78.0 |
| 9.0 |
+---------+
7 rows in set (0.00 sec)
看,结果少了一个98,达到了去重的效果。
🌼2.2.6排序查询
可以针对查询结果对数据进行排序,得到临时表输出,语法格式:
select 列名,... from 表名 order by 列名(需排序)asc(或者desc);
最后的asc
表示升序,也是默认排序方式,desc
是降序排序。
例如,将上面的成绩按照总分进行升序和降序排名。
--升序
mysql> select name, chinese+math+english+computer as total,(chinese+math+english+computer)/4 as average from exam_score order by total asc;
+-----------+-------+----------+
| name | total | average |
+-----------+-------+----------+
| 黑大帅 | 50.0 | 12.50000 |
| 懒羊羊 | 181.5 | 45.37500 |
| 灰太狼 | 234.5 | 58.62500 |
| 沸羊羊 | 305.5 | 76.37500 |
| 小灰灰 | 329.0 | 82.25000 |
| 暖羊羊 | 355.0 | 88.75000 |
| 美羊羊 | 370.0 | 以上是关于MySQL数据库必会的增删查改操作(CRUD)的主要内容,如果未能解决你的问题,请参考以下文章
2016/3/13 MySQL 增删查改 CRUD 用代码实现