MySQL基础及操作

​ 本片内容考虑到初学者完全没有接触过,所以关键字同统一使用小写方便识别记忆,正常情况下关键字需要大写。

1. 基本概念阐述

​ 数据库(database) 保存有组织的数据容器(通常是一个文件或一组文件)。

​ 表(table) 某种特定类型数据的结构化清单。

​ 列(column) 表中的一个字段。所有表都是由一个或多个列组成的。

​ 数据类型(datatype)所容许的数据的类型。每个表都有相应的数据类型,他限制(或容许)该列中存储的数据。

​ 行(row) 表中的一个记录。

​ 主键(primary key) 一列(或一组列),其值能够唯一区分表中的每一行。

2. 什么是SQL

​ SQL(发音为字母S-Q-L或sequel)是结构化查询语言(Structured Query Language)的缩写。SQL是一种专门用来与数据库通信的语言。

DBMS专用的SQL  SQL不是一种专利语言,而且存在一个标准委员会,他们试图定义可供所有DBMS实现的SQL都不完
全相同。这里讲述的SQL是专门针对MySQL的,但是需要注意的是,SQL语法是有“方言”之分的。多数语法虽适用于其
他DSMS,但是也有部分语法只适用于MySQL,即前面说的“方言”。

数据库的特点:

​ 1.持久化存储数据。其实数据库就是一个文件系统

​ 2.方便存储和管理数据

​ 3.使用了统一的方式操作数据库—SQL

3. MySQL

​ 讲完了SQL,我们就需要安装一个一个MySQL,当然还有甲骨文公司的Database 和 微软的 SQL Sever,但是我们只要掌握好MySQL就够用了。

3.1 MySQL服务启动

​ 1.手动

​ 2.cmd–>services.msc 打开服务窗口

​ 3.使用管理员打开cmd

net start mysql : 启动mysql的服务

net stop mysql  : 关闭mysql的服务
3.2 MySQL登录

​ 启动MySQL服务后,再按照以下三个其中一个格式来登录MySQL。

mysql -uroot -p密码

mysql -hip -uroot -p连接目标的密码

mysql --host=ip --user=root --password=连接目标的密码
3.3MySQL退出

​ 按照以下命令即可退出MySQL服务回到DOS初始界面。

exit

quit
4. SQL语法
4.1 SQL通用语法

​ 1.SQL 语句可以单行或多行书写,以分号结尾。

​ 2.可以使用空格和缩进来增强语句的可读性。

​ 3.MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。

 单行注释: -- 注释内容 或 # 注释内容(MySQL特有)
 多行注释:/* 注释 */
4.2 SQL分类

​ (1)DDL(Date Definition Language)数据定义语言

​ 用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等

​ (2)DML(Date Manipulation Language)数据操作语言

​ 用来对数据库中表的数据进行增删改。关键字:insert,delete,update等

​ (3)DQL(Date Query Language)数据查询语言

​ 用来查询数据库中表的记录(数据)。关键字:select,where等

​ (4)DCL(Date Control Language)数据控制语言(了解)

​ 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT,REVOKE 等

5. DDL:操作数据库、表
5.1 操作数据库:CRUD

5.1.1. C(Create):创建

  • 创建数据库:

    create database 数据库名称;
    
  • 创建数据库,判断不存在,再创建:

    create database if not exists 数据库名称;
    
  • 创建数据库,并指定字符集:

    create database 数据库名称 character set 字符集名;
    

5.1.2 R(Retrieve):查询

​ 创建完数据库就要查询自己创建成功了,所以就要学一下查询的方法

  • 查询所有数据库的名称:

    show databases;
    
  • 查询某个数据库的字符集:查询某个数据库的创建语句

    show create database 数据库名称;
    

    ​ 其中查询出来的所有表中,mysql、performance_schema为数据库自带的不建议动用,我们要使用再自己创建一个新的即可。

5.1.3 U(Update):修改

  • 修改数据库的字符集:
alter database 数据库名称 character set 字符集名称;

5.1.4 D(Delete):删除

  • 删除数据库:

    drop database  数据库名称;
    
  • 判断数据库存在,存在再删除:

    drop database if exists 数据库名称;
    

5.1.5 使用数据库

  • 查询当前正在使用的数据库名称:

    select database();
    
  • 使用数据库:

    use 数据库名称;
    
5.2 操作表

​ 操作数据库都是准确地输入了就能得出结果的操作,很简单没有复杂的语法,二操作表就相比于操作数据库多了一些格式要求和条件语法。

​ 首先我们要了解一下数据类型库,这样才能保证输入的数据类型没有差错。

5.2.1 数据类型库:

​ 1.int :整数类型

​ 例:age int,

​ 2.double :小数类型

​ 例:score double(5,2)// 5表示五个有效数字,2表示保留两位小数

​ 3.date:日期,只包含年月日。格式:yyyy-MM-dd

​ 4.datetime:日期,包含年月日时分秒。格式: yyyy-MM-dd HH:mm:ss

​ 5.timestamp:时间戳类型 包含年月日时分秒。格式:yyy-MM-dd HH:mm:ss

​ 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值

​ 6.varchar:字符串

​ 例:name varchar(20):姓名最大20个字符

​ zhangsan 为八个字符 ; 张三 为两个字符。

5.2.2 C(Create):创建

​ 1.语法:

​ create table 表名(

​ 列名1 数据类型1,

​ 列名2 数据类型2,

​ …

​ 列名n 数据类型n

​ );

注意:最后一列,不需要加逗号(,)

create table student(

id int,--主键

name varchar(32)--姓名,字符串类型,最大字符为32

age int--年龄,整数类型

score double(4,1)--分数,小数类型,四个有效数字保留一位小数

brithday date--生日,日期,格式为yyyy-MM-dd

insert_time timestamp	--时间戳类型,可以知道该行最后的修改时间;
create table 表名 like 被复制的表名; --复制表
5.2.3 R(Retrieve):查询
show tables;  --查询某个数据库中的所有表的名称
desc 表名;	--查询表结构
5.2.4 U(Update):修改
alter table 表名 rename to 新的表名;	--修改表名
alter table 表名 character set 字符集名称;	--修改表的字符集
alter table 表名 add 列名 数据类型;	--添加一列
alter table 表名 change 列名 新列别 新数据类型;	--修改列名称 类型

alter table 表名 modify 列名 新数据类型;	--只改变数据类型
alter table 表名 drop 列名;	--删除列
5.2.5 D(Delete):删除
drop table 表名;	--删除表
drop table if exists 表名;	--先判断表是否存在再删除表
6. DML:增删改表中的数据

​ 我们首先需要知道怎么查询表,才能知道我们增删改的操作是否正确,所以我提前说一下查询一个表所有记录的操作。

select * from 表名;  --查询该表所有记录。*可替换为列名,表示只查询某列或多列
6.1 添加数据:

语法:

insert into 表名(列名1,列名2,...列名n)values(1,2,...值n);

注意:

​ 1. 列名和值要一一对应。

​ 2. 如果表明后不定义列名,则默认给所有列添加值

insert into 表名 values(1,2,...值n);

​ 3. 除数字类型,其他类型需要用引号(单双都可以)引起来。

例:

insert into student(id,name,age)VALUES(1,'张三',20);
insert into student VALUES(2,'李四',18,99.9,'2020-03-19',null);

创建成功后的结果

6.2 删除数据:

语法:

delete from 表名【where 条件 】; 	--不要中括号

例:

DELETE from student where id = 1;	--删除id=1的行

注意:

​ 1.如果不加条件,则删除表中所有记录。

​ 2.如果要删除所有记录

2.1  delete from 表名;-- 不推荐使用。有多少条记录就会执行多少次删除操作

2.2  TRUNCATE TABLE 表名; -- 推荐使用,效率更高;先删除表,然后在创建一张一样的表。
6.3 修改数据:

语法:

update 表名 set 列名1 =1,列名2 =2...where 条件】;

注意: 如果不添加任何条件,则会将表中所有记录全部修改。

update student set age=19 where id =2;  --吧id为2的那行年龄改为19
7. DQL:查询表中的记录

​ 这里我在结尾将会提供一个创建好的表为练习查询使用。
先展示一下表的内容
在这里插入图片描述

7.1 基础查询
7.1.1 多个字段的查询
select 字段名1,字段名2... from 表名;	--可用*来代替字段列表查询所有字段

例:

select name,address from student;	--即可看到哪个同学来自哪个地方

在这里插入图片描述

7.1.2 去除重复
select distinct 字段名1,字段名2... from 表名;  	

例:

select distinct name,math,english from student;
7.1.3 计算列

​ 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)

注意 由于null参与的运算,计算结果都将为null,所以我们在计算列的时候我们需要将null值改为0;

ifnull(表达式1,表达式2);	--表达式1:哪个字段需要判断是否为null
						--表达式2:如果该字段为null后的替换值。
SELECT distinct name,math,english,math+IFNULL(english,0) from student;  --这样英语的null就不会影响到总分的计算
7.1.4 起别名
select name as 别名,math 别名 from student3;
SELECT distinct name,math 数学,english 英语,math+IFNULL(english,0) as 总分 from student3;

ps:标题变为中文更方便查看
在这里插入图片描述

7.2 条件查询

​ 只需要在查询语句后面加where子句后跟条件。

​ 通常情况下会运用运算符来当做条件,接下来就介绍一下运算符。

​ 以下是常用的运算符:

 ><<=>==<>
BETWEEN...AND  
IN( 集合) 
LIKE:模糊查询
占位符:
 	_:单个任意字符
 	%:多个任意字符
IS NULL  
and&&
or|| 
not!

例:

SELECT * FROM student WHERE age > 20;		-- 查询年龄大于20岁	
SELECT * FROM student WHERE age >= 20;		-- 查询年龄大于等于20岁
-- 查询年龄不等于20岁
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;
-- 查询年龄大于等于20 小于等于30
SELECT * FROM student WHERE age >= 20 &&  age <=30;
SELECT * FROM student WHERE age >= 20 AND  age <=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
-- 查询年龄22岁,18岁,25岁的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
SELECT * FROM student WHERE age IN (22,18,25);
-- 查询英语成绩为null
SELECT * FROM student WHERE english IS NULL; --null值不能使用 = (!=)判断
-- 查询英语成绩不为null
SELECT * FROM student WHERE english  IS NOT NULL;
-- 查询姓马的有哪些? like
SELECT * FROM student WHERE NAME LIKE '马%';
-- 查询姓名第二个字是化的人
SELECT * FROM student WHERE NAME LIKE "_化%";
-- 查询姓名是3个字的人
SELECT * FROM student WHERE NAME LIKE '___';
-- 查询姓名中包含德的人
SELECT * FROM student WHERE NAME LIKE '%德%';
7.3 排序查询

语法:

order by 子句
order by 排序字段1 排序方式1 ,排序字段2 排序方式2...;

排序方式:

ASC		--升序,默认的。
DESC	--降序。

注意 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。

例:

select * from student3 order by math asc;
7.4 聚合函数:将一列数据作为一个整体,进行纵向的计算。
1. count:计算个数
		1. 一般选择非空的列:主键
		2. count(*)
2. max:计算最大值
3. min:计算最小值
4. sum:计算和
5. avg:计算平均值

例:

select avg(math) from student3;		 --计算math的平均值

注意:聚合函数的计算,排除null值。

解决方案:
1. 选择不包含非空的列进行计算
2. IFNULL函数

7.5 分组查询

语法:

group by 分组字段;

注意:

  1. 分组之后查询的字段:分组字段、聚合函数

  2. where 和 having 的区别?

    2.1 where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来

    2.2 where 后不可以跟聚合函数,having可以进行聚合函数的判断。

-- 按照性别分组。分别查询男、女同学的平均分
SELECT sex , AVG(math) FROM student GROUP BY sex;
-- 按照性别分组。分别查询男、女同学的平均分,人数
SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
--  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
--  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;
7.6 分页查询

语法:

limit 开始的索引,每页查询的条数;

**公式:**开始的索引 = (当前的页码 - 1) * 每页显示的条数 – 每页显示3条记录

​ 例:

SELECT * FROM student LIMIT 0,3; -- 第1页		
SELECT * FROM student LIMIT 3,3; -- 第2页		
SELECT * FROM student LIMIT 6,3; -- 第3页

注意 limit 是一个MySQL"方言",即该语句只能在MySQL里面使用。


查询练习数据

CREATE TABLE student (
 id int, -- 编号
 name varchar(20), -- 姓名
 age int, -- 年龄
 sex varchar(5), -- 性别
 address varchar(100), -- 地址
 math int, -- 数学
 english int -- 英语
);

INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES 
(1,'马云',55,'男','杭州',66,78),
(2,'马化腾',45,'女','深圳',98,87),
(3,'马景涛',55,'男','香港',56,77),
(4,'柳岩',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'刘德华',57,'男','香港',99,99),
(7,'马德',22,'女','香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值