꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱
ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶
系列专栏:xiaoxie的MySql学习系列专栏——CSDN博客●'ᴗ'σσணღ
我的目标:"团团等我💪( ◡̀_◡́ ҂)"
( ⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞👍 + 收藏⭐️ + 留言📝+关注(互三必回)!
一.数据库的操作
1.1 显示当前的数据库
show databases;
1.2创建数据库
create database Test;
可以使用显示当前的数据库的操作查看是否创建成功
1.3 使用数据库
use 数据库名;
这里需要特别提醒:当我们对这个数据库进行增删改查操作表的时候,我们需要先use 数据库名
1.4 删除数据库
语法:
drop database 数据库名
可以使用显示当前的数据库的操作查看是否删除成功
同时这里博主提醒一下数据库删除以后,内部看不到对应的数据库,里边的表和数据全部被删除,可能目前我们操作的是自己的数据库,删库后影响不大,但我们工作之后, 删库操作就要小心谨慎了
二.常用数据类型
MySQL 的数据类型有大概可以分为整数类型、浮点数类型和定点数类型、日期和时间类型、字符串类型、二进制类型等.
2.1 整数类型
MySQL 主要提供的整数类型有 TINYINT
、SMALLINT
、MEDIUMINT
、INT
、BIGINT
,其属性字段可以添加 AUTO_INCREMENT
自增约束条件。
类型名称 | 说明 | 储存需求 |
TINYINT | 很小的整数 | 一个字节 |
SMALLINT | 小的整数 | 两个字节 |
MEDIUMINT | 中等大小的整数 | 三个字节 |
INT | 普通大小的整数 | 四个字节 |
BIGINT | 大整数 | 八个字节 |
2.2 浮点类型
MySQL 中使用浮点数和定点数来表示小数。
浮点类型有两种,分别是单精度浮点数(FLOAT
)和双精度浮点数(DOUBLE
);定点类型只有一种,就是 DECIMAL
。
浮点类型和定点类型都可以用(M, D)
来表示,其中 M
称为精度,表示总共的位数;D
称为标度,表示小数的位数。例如DECIMAL(3,1)
可以为99.0 但不可以为100.0 因为它总的位数最大为3,而100.0为`4.
浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。M 和 D 在 FLOAT 和DOUBLE 中是可选的,FLOAT 和 DOUBLE 类型将被保存为硬件所支持的最大精度。DECIMAL 的默认 D 值为 0、M 值为 10。
类型名称 | 说明 | 储存需求 |
FLOAT(M, D) | 单精度,M指定长度,D指定 小数位数。会发生精度丢失 | 4字节 |
DOUBLE(M, D) | 双精度,M指定长度,D指定 小数位数。会发生精度丢失 | 8字节 |
DECIMAL(M, D) | 定点类型,M指定长度,D表示 小数点位数。精确数值 | M+2字节 |
2.3 日期和时间类型
MySQL 中有多处表示日期的数据类型:YEAR
、TIME
、DATE
、DTAETIME
、TIMESTAMP
。当只记录年信息的时候,可以只使用 YEAR
类型。每一个类型都有合法的取值范围,当指定确定不合法的值时,系统将“零”值插入数据库中。
2.4字符串类型
字符串类型用来存储字符串数据,还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比较,还可以进行正则表达式的匹配查找。
MySQL 中的字符串类型有 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET 等。下表中列出了 MySQL 中的字符串数据类型,括号中的 M 表示可以为其指定长度。
2.5总结
总的来说我们常用的数据类型就几个:INT,FLOAT,DOUBLE,DECIMAL,VARCHAR,DATETIME. 至于其他的几个数据类型,具体问题具体分析.
三.表的操作
需要操作数据库中的表时,需要先使用该数据库:
use 数据库名;
3.1 显示当前库的所有表
show tables;
3.2查看表结构
desc 表名;
3.3创建表
语法:
create table 表名( 字段1(列名) 数据类型, 字段2(列名) 数据类型, 字段3(列名) 数据类型, .... ..... );
示例:
create table student( id int, name varchar(20), gender varchar(2), age int );
结果:
显示是否成功创建表
显示当前表结构是否成功创建
3.4删除表
语法格式:
drop table 表名
示例:
drop table student -- 删除学生表
结果:
显示是否成功删除表
四.CRUD(增删改查操作)
4.1 新增(Create)
语法:
insert (into) 表名values(数据);
说明:
这里插入数据的数据类型,和顺序必须要和当前表的数据类型,顺序相同
1.单行数据
全列插入
案例:插入一条id为1name为张三性别为男年龄为18的学生信息到学生表
insert into student values(1,"张三","男",18);
注意由于SQL是一门弱类型的语言所以,字符串可以使用双引号 " " 或者单引号 ' ' 修饰
结果:
指定列插入
语法:
insert into student(指定列) values(数据);
案例:插入一条id为2name为李四性别为男的学生信息到学生表
insert into student(id,name,gender) values(1,"李四","男");
结果:
说明:可以看到没有指定插入列的那一行的值为null,同时指定列插入也同时需要, 插入数据的数据类型,和顺序必须要和当前表的数据类型,顺序相同.
2.多列插入
语法:
insert into 表名 values(数据),(数据);
案例: 插入一条id为3name为王五性别为女年龄为19和id为4name为赵六性别为男年龄为21的学生信息到学生表
insert into student values(3,"王五","女",19),(4,"赵六","男",21);
结果:
指定列多行插入和上述的一样这里博主就不过多的赘述了
4.2查询
在我们以后工作的场景中,查询才是所有操作中应用最多的操作,所以一定要尽量熟练掌握
1 全列查询
语法:
select * from 表名
案例:查询学生表的所有学生信息
select * from student;
结果:
说明:这里需要记住的是,虽然全列查询很方便也很简单,当这是在我们自己学习的数据库,数据量不会很多,在日后工作后,一张表的数据可能都有百万级别甚至更大查询的列越多,意味着需要传输的数据量越大;
2.指定列查询
这里为了后续的案例分析,我们先创建一张表,和一些数据
-- 创建考试成绩表 DROP TABLE IF EXISTS exam_result; CREATE TABLE exam_result ( id INT, name VARCHAR(20), chinese DECIMAL(3,1), math DECIMAL(3,1), english DECIMAL(3,1) ); -- 插入测试数据 INSERT INTO exam_result (id,name, chinese, math, english) VALUES (1,'唐三藏', 67, 98, 56), (2,'孙悟空', 87.5, 78, 77), (3,'猪悟能', 88, 98.5, 90), (4,'曹孟德', 82, 84, 67), (5,'刘玄德', 55.5, 85, 45), (6,'孙权', 70, 73, 78.5), (7,'宋公明', 75, 65, 30);
语法:
--单列查询 select 指定列 from 表名; --多列查询 select 指定列,指定列,指定列 from 表名; --可以加算术表达式 select 指定列,指定列+指定列 from 表名
案例:
查询所以考生的名字和该考生的总分在考试信息表中;
select name,chinese+math+english from exam_result;
结果:
说明:
这里的指定列并不需要按照表的列的顺序,以及如果要用算术表达,类型要为,整数型或者浮点型,同时类型还需要相同
3.别名
语法:
select 列名 as 别名 from 表名;
案例:
查询所以考生的名字和该考生的总分在考试信息表中;
select name,chinese+math+english as total from exam_result;
结果:
4.去重
语法:
select distinct 列名 from 表名;
案例:
5. 排序:ORDER BY
语法:
-- ASC 为升序(从小到大) -- DESC 为降序(从大到小) -- 默认为 ASC select 列名 from 表名 order by(asc|desc) (指定列);
案例:查询同学及总分,由高到低
select name,chinese+math+english as total from exam_result order by total desc;
结果:
可以对多个字段进行排序,排序优先级随书写顺序
1. -- 查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示 2. select name,math,chinese,english from exam_result order by math desc, 3. english,chinese;
结果:
说明:. NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面
6.条件查询:WHERE
比较运算符
运算符 | 说明 |
>, >=, <, <= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL |
<=> | 等于,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(1),结果才是 TRUE(1) |
OR | 任意一个条件为 TRUE(1), 结果为 TRUE(1) |
NOT | 条件为 TRUE(1),结果为 FALSE(0 |
显示详细信息
说明:
1. = 和 <=> 的区别为当数据为null时 null = 任何数据(哪怕也是null) 结果都为null 如果是<=>
null <=> null 结果 就为 true(1);
2.. WHERE条件可以使用表达式,但不能使用别名
3.AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
案例:
基本查询:
查询英语不及格的同学及英语成绩 ( < 60 )
1. -- 查询英语不及格的同学及英语成绩 ( < 60 ) 2. select name,english from exam_result where english < 60;
-- 查询语文成绩好于英语成绩的同学
select name,english,chinese from exam_result where chinese > english;
-- 查询总分在 200 分以下的同学
select name,math+english+chinese as total from exam_result where chinese + english+math < 200;
这里要注意where 后边不可以跟别名
AND与OR:
案例:
查询语文成绩大于80分,且英语成绩大于80分的同学
select name,chinese,english from exam_result where chinese > 80 and english > 80;
查询语文成绩大于80分,或英语成绩大于80分的同学
select name,chinese,english from exam_result where chinese > 80 or english > 80;
范围查询:
1. BETWEEN ... AND ...
查询语文成绩在 [80, 90] 分的同学及语文成绩
select name,chinese from exam_result where chinese between 80 and 90;
2. IN
查询数学成绩是 58 或者 65 或者 98 或者 99 分的同学及数学成绩
select name,math from exam_result where math in(58,65,98,99);
模糊查询:LIKE
% 匹配任意多个(包括 0 个)字符
select name from exam_result where name like"孙%";
_ 匹配严格的一个任意字符
select name from exam_result where name like"孙_";
7. 分页查询:LIMIT
语法:
-- 从 0 开始,筛选 n 条结果 select 列名 from 表名 (where) (order by 列名) limit n; ----从 s 开始,筛选 n 条结果 select 列名 from 表名 (where) (order by 列名) limit s,n; ----从 s 开始,筛选 n 条结果(建议使用这个方法,更直观) select 列名 from 表名 (where) (order by 列名) limit n offset s;
案例:按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3 页
-- 第 1 页 select * from exam_result order by id limit 3; -- 第 2 页 select * from exam_result order by id limit 3 offset 3; -- 第 3 页,如果结果不足 3 个,不会有影响 select * from exam_result order by id limit 3 offset 6;
结果:
案例查询总分为前三的同学信息
select name,math + chinese + english as total from exam_result order by total desc limit 3;
4.3修改(Update)
语法:
update 表 set 字段1=value1, 字段2=value2... where 条件(order by )(limit)
案例:
将孙悟空同学的数学成绩变更为 80 分
update exam_result set math = 80 where name = "孙悟空";
将总成绩倒数前三的 3 位同学的语文成绩加上 5分
update exam_result set chinese = chinese + 5 order by math+chinese+english limit 3;
修改前:
修改后:
4.4 删除(Delete)
语法:
delete from 表名 (where)(order by)(limit)
案例:
-- 准备测试表 create table text_delect(id int); -- 插入数据 insert into text_delect values(1),(2),(3),(4); -- 删除数据 delete from text_delect where id = 1;
以上就是博主关于Mysql基本操作总结的所以内容了,希望能够对你有所帮助.