📢 MySQL 系列专栏持续更新中 …MySQL专栏
目录
*
– 目录
–
+
* 一、SQL语句
*
– – SQL通用语法
– – 注释
– – SQL语句分类
* 二、 基础表操作
*
– – 创建表
– – 查看库中的表
– – 查看表结构
– – 删除表
– – 重命名表
* 三、MySQL 中的增删查改操作
*
– – 增加(insert语句)
– – 查询(select语句)
– – 修改(update)
– – 删除(delete)
一、SQL语句
操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准,简称SQL。
– SQL通用语法
1 . SQL语句可以单行或多行书写,以分号结尾。
2 . SQL语句可以使用空格/缩进来增强语句的可读性。
3 . MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
– 注释
- 单行注释: – 注释内容 或者使用 # 注释内容 。
- 多行注释:/ 注释内容 /
– SQL语句分类
分类说明DDL(deifnition)数据定义语言(用来定义数据库对象,数据库,表,字段)DML(manipulation)数据操纵语言(对数据库 表中的是数据进行增删改)DQL(query)数据查询语言,用来查询数据库中表的记录DCL(control)数据控制语言,用来创建数据库用户,控制数据库的访问权限
二、 基础表操作
– 创建表
- 同一个数据库中,不能有两个表的名字相同,表名和列名不能和SQL的关键词重复。
- 语法:
create table 表名(定义列1, 定义列2, .......);
列 -> 变量名 数据类型
- 举例:
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)
– 查看库中的表
- 语法:
show tables;
- 举例:
mysql> show tables;
+
| Tables_in_mytestdb |
+
| book |
+
1 row in set (0.00 sec)
– 查看表结构
- 语法:
desc 表名;
- 举例:
MySQL数据库中的表结构主要包含以下几种信息: 字段名称,字段类型,是否允许为空,索引类型。默认值,扩充信息
– 删除表
- 语法:
drop table 表名
- 举例 :
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
– 重命名表
- 语法:
rename table old_name to new_name;
- 举例:
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)
三、MySQL 中的增删查改操作
CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写
案例:
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;
– 增加(insert语句)
- 单行插入(全列)
insert into 表名 values(对应列的参数列表);
- 多行插入(全列)
insert into 表名 values(对应列的实参列表), (对应列的参数列表), (对应列的参数列表);
- 指定列插入
-
values 后面( )中的内容, 个数和类型要和表名后面( )中指定的结构匹配.
-
未被指定的列会以默认值进行填充.
insert into 表名 (需要插入的列) values(对应列的参数列表);
insert into 表名 (需要插入的列) values(对应列的参数列表), (), ()....
- 案例
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)
在MySQL当中 , 多条记录逐次插入的效率是要低于一次把多条纪录一起插入的 ,原因如下:
-
网络请求和响应时间开销 , 每次插入都会有一定的时间开销.
-
数据库服务器是把数据保存在硬盘上的 , IO操作时,操作的次数带来的影响大于数据量.
-
每一次sql操作,内部开启的事务也会占据一定的开销.
– 查询(select语句)
- 全列查询
语法
select * from 表名
企业级别的数据库中慎用, 容易把I/O或者网络带宽吃满,如果有外边的用户客户端要通过宽带访问服务器时,服务器就无法做出正确的响应.
示例
select * from book;
- 指定列查询
select 列名... from 表名
- 示例
)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)
- 查询你字段为表达式
select 字段或表达式, 字段或表达式... from 表名;
- 示例
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)
- 将表达式或者字段指定别名查询
mysql中支持给所查询的表达式取一个别名 , 使用 as 可以使查询结果更加直观 , 代码的可读性也会更强.
select 列名或表达式 as 别名, ... from 表名;
- 示例
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)
- 去重查询
select distinct 列名 from 表名
- 示例
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)
查询结果当中,没有了重复的book _ name 元素,达到了去重效果.
- 排序查询
select 列名
from 表名
order by 列名 asc(升序)/desc(降序);
- 示例
mysql> select book_name,book_price from book order by book_price asc;
+
| book_name | book_price |
+
| 软件工程 | NULL |
| 计算机网络 | 45.00 |
| 计算机组成原理 | 45.00 |
| 计算机网络 | 89.00 |
| 微机原理 | 97.00 |
+
5 rows in set (0.00 sec)
mysql> select book_name,book_price from book order by book_price desc;
+
| book_name | book_price |
+
| 微机原理 | 97.00 |
| 计算机网络 | 89.00 |
| 计算机网络 | 45.00 |
| 计算机组成原理 | 45.00 |
| 软件工程 | NULL |
+
5 rows in set (0.00 sec)
-
使用排序查询时 , 升序查询 asc 可以省略, 即默认为升序排列, null值一定为其中最小的.
-
可以对多个字段进行排序,优先级按照书写的顺序进行.
-
示例
select name,price,age from book order by price asc,age desc;
select name,english+math+chinese as total from grade order by total desc;
- 条件查询
当我们使用查询时, 通常具有各种各样的前提条件 , 此时就需要使用条件查询来完成.
select 列名.. from 表名..where + 条件
比较运算符
运算符说明>, >=,
Original: https://blog.csdn.net/m0_56361048/article/details/128732862
Author: 署前街的少年
Title: 『 MySQL篇 』:MySQL表的CURD操作
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/813598/
转载文章受原作者版权保护。转载请注明原作者出处!