• MySQL必知必会(初级篇)


    在这里插入图片描述

    1.基本概念

    在这里插入图片描述

    数据库(DataBase,DB),是统一管理的、长期存储在计算机内的、有组织的相关数据的集合。特点是数据见联系密切、冗余度小、独立性高、易扩展,并且可以为各类用户共享。

    MySQL:是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一。

    • MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
    • MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 具有体积小、速度快、总体拥有成本低以及开放源码的特点。

    2.SQL语言

    SQL(Structured Query Language):结构化查询语言
    其实就是定义了操作所有关系型数据库的规则。它是关系数据库中最普遍使用的语言,包括数据查询(Query)、数据操纵(Manipulation)、数据定义(Definition)、数据控制(Control)功能,是一种通用的、功能强大的关系数据库的标准语言。

    SQL语言功能强大,完成核心功能只用9个动词,包括以下几类:

    • 数据查询(DQL):select
    • 数据操纵(DML):create、drop、alter
    • 数据定义(DDL):insert、update、delete
    • 数据控制(DCL):grant、revoke

    2.SQL通用语法
    ① SQL语句可以单行或多行书写,以分号结尾。
    2可使用空格和缩进来增强语句的可读性。
    3 MySOL 数据库的SQL语句不区分大小写,关键字建议使用大写。
    4三种注释
    单行注释:–注释内容或#注释内容(mysql特有)多行注释:/注释/

    2.1 DCL(数据控制语言)

    DCL(Data Control Language)数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT,REVOKE 等

    2.1.1创建用户

    1. 创建一个test用户可以在任意IP地址上登陆mysql
    create user 'mc'@'%' identified by 'root';
    
    • 1
    1. 修改用户密码
    set password for 'mc'@'%' = '123456';
    
    • 1
    1. 刷新权限(修改完密码,一定要刷新权限)
    flush privileges;
    
    • 1

    2.1.2 使用grant命令给用户授权

    格式:grant 权限 on 数据库对象 to 用户

    1. 给用户授予所有的权限
    grant all on test.user to 'mc'@'%';
    
    • 1
    1. 给数据库中的所有表授权
    grant all on test.* to 'mc'@'%';
    
    • 1
    1. 授予普通数据用户,查询、插入、更新、删除数据库中所有表数据的权限
    grant insert,update,delete,select on test.user to 'mc'@'%';
    
    • 1

    2.1.3 使用revoke命令撤销权限

    1. 撤销用户所有权限
    revoke all on test.user from 'mc'@'%';
    
    • 1
    1. 撤销普通数据用户,查询、插入、更新、删除数据库中所有表数据的权限
    revoke insert,update,delete,select on test.user from 'mc'@'%';
    
    • 1
    1. 查看权限
    show grants for 'mc'@'%';
    
    • 1
    1. 删除用户
    drop user 'mc'@'%';
    
    • 1

    2.2 DDL(数据定义语言)

    DDL(Data Definition Language)数据定义语言用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等

    2.2.1 mysql常用约束类型

    约束名称描述
    NOT NULL非空约束
    UNIQUE唯一约束,不允许出现重复值
    PRIMARY KEY主键约束(关键字),自带非空、唯一、索引
    DEFAULT默认值(缺省值)
    FOREIGN KEY外键约束(外关键字)
    AUTO_INCREMENT自动递增
    • 创建一个student表(PRIMARY KEY、DEFAULT)
    -- 设置主键的方式一:
    create table student(
    	id int primary key,   -- 设置主键
    	name varchar(20) not null,
    	gander char(4) default '男', -- 设置默认值为  男
    	country varchar(50),
    	brithday date
    );
    -- 设置主键的方式二:
    create table student(
    	id int, 
    	name varchar(20) not null,
    	gander char(4) default '男', 
    	country varchar(50),
    	brithday date,
    	primary key(id)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 创建图书表(AUTO_INCREMENT、UNIQUE)
    create table book(
    	id int primary key auto_increment, -- 设置主键,并设置自动递增
    	name varchar(20) not null,
    	bar_code varchar(30) not null unique,  -- 这就是唯一约束的定义
    	s_id int not null,
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 创建图书和作者表(FOREIGN KEY)
    -- 创建作者表
    create table author(
    	aut_id int ,
    	aut_name varchar(20) not null,
    	gander char(2),
    	country varchar(50),
    	brithday datetime
    	primary key(aut_id,aut_name)  -- 联合主键
    );
    
    -- 创建图书表
    create table book(
    	id int primary key auto_increment,
    	name varchar(20) not null,
    	bar_code varchar(30) not null unique,
    	aut_id int not null,
    	foreign key (aut_id) references author(aut_id)  -- 外键约束
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2.2.2 使用alter命令修改表结构

    -- 添加列
    alter table user add(hobby varchar(50),city varchar(20));
    -- 修改列的类型
    alter table user modify city varchar(30);
    -- 修改表的列名和类型
    alter table user change hobby hobbies varchar(20);
    -- 删除列
    alter table user drop hobbies;
    -- 修改表名
    alter table user rename users;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.2.3 使用drop命令删除表

    -- 删除表
    drop table users;
    -- 查看表结构
    desc users;
    
    • 1
    • 2
    • 3
    • 4

    2.3 DML(数据操纵语言)

    DML(Data Manipulation Language)数据操作语用来对数据库中表的数据进行增删改。关键字:insert, delete,update等

    2.3.1 使用insert命令插入数据

    -- 单条数据插入
    insert into `student` (id,name,gander,country,brithday) values (1,'tom','男','美国','1999-1-14');
    
    insert into `student` values (2,'jack','男','英国','1969-1-1');
    -- 批量插入
    insert into `student` (id,name,gander,country,brithday) values (3,'lili','女','美国','1998-2-14'),(4,'jery','男','英国','1969-1-1'),(5,'lucy','女','英国','1989-10-1');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.3.2 使用update命令插入数据

    update `student` set name = 'tony';
    -- 上边的语句会将该表中所有的name全修改为tony,因此我们需要使用where语句进行限制
    -- 如下:
    -- 将id为2的学生姓名改为tony
    update `student` set name = 'tony' where id = 2;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.3.3 使用delete命令插入数据

    -- 删除表中的所有数据
    delete from student;
    -- 删除单条数据,删除id为5的学生数据
    delete from student where id = 5;
    
    • 1
    • 2
    • 3
    • 4

    2.4 DQL(数据查询语言)

    DQL(Data Query Language)数据查询语言用来查询数据库中表的记录(数据)。关键字:select,where 等

    2.4.1 单表查询

    创建下面四个表,然后填充几组数据

    • course表

    在这里插入图片描述

    • scores表

    • student表

    在这里插入图片描述

    • teacher表

    在这里插入图片描述

    1. 查询表中所有数据
    -- 查询所有   * 表示所有列 
    select * from 表名;
    -- 查询指定列或所有
    select 列名1,列名2[...] from 表名;
    
    -- 举个例子
    select * from student;
    select id,name,age,genderfrom student;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 列运算

    数量类型的列可以做加、减、乘、除等运算;

    --- 学生年龄都长了一岁
    select id,name,age+1,genderfrom student;
    
    
    • 1
    • 2
    • 3

    注意

    • null加任何值都等于null
    • 将字符串做加减乘除运算,会把字符串当作0。
    1. 别名

    给数据表中的列名起个别名,方便查询数据

    -- 别名使用方式:只需要在列名后加 as 新列名即可,as可省略
    select 列名1 as 别名1,列名2 as 别名2[...] from 表名;
    select 列名1 别名1,列名2 别名2 from 表名;
    
    -- 给学生的id,name起个别名
    select id as stu_id,name as stu_name,age,genderfrom student;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 条件查询
    -- 条件控制  select * from 表名 where 列名=指定值;
    select * from student where id = 3;
    select * from student where id > 2;
    select * from student where age < 20;
    select * from student where id in (1,2,3);
    select * from student where age between 18 and 20;
    select * from student where id between 1 and 5 or age > 18;
    select * from student where id between 1 and 5 and age > 18;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 模糊查询
    -- _代表匹配任意一个字符,%代表匹配0~n个任意字符
    select * from student where name like '李_'; 
    select * from student where name like '张%';
    
    • 1
    • 2
    • 3
    1. 排序
    -- 升序:asc为默认值可以不写
    select * from 表名 order by 列名 asc;
    -- 按年龄从小到大排序
    select * from student order by age asc;
    
    -- 降序:desc
    select * from 表名 order by 列名 desc;
    -- 按年龄从大到小排序
    select * from student order by age desc;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 聚合函数
    • count():统计查询结果的行数
    select count(列名) from 表名;
    
    select count(gender) from student;
    select max(age) from student where id > 5;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • max() 和 min()
      max()查询指定列的最大值,min()表示查询指定列的最小值。
    select max(列名) from 表名;
    select min(列名) from 表名;
    
    -- 举个栗子
    select max(age) from student where id > 5;
    select min(age) from student;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • sum():返回指定列的总和
    select sum(列名) from 表名;
    
    -- 查询成绩总和
    select sum(score) from scores;
    
    • 1
    • 2
    • 3
    • 4
    • avg():返回指定列数据的平均值
    select avg(列名) from 表名;
    
    -- 查询平均成绩
    select avg(score) from scores;
    
    • 1
    • 2
    • 3
    • 4
    1. 分组查询
    -- 语法格式
    select 分组函数,分组后的字段 from 表名 [where 筛选条件] group by 分组的字段 [having 分组后的筛选]
    
    -- 举个栗子
    select gender from student group by gender;
    -- 查询年龄大于18岁的男女生人数
    select gender,count(gender) from student where age > 18 group by gender;
    -- 查询男生的年龄总和以及平均年龄
    select gender,avg(age) avg_age,sum(age) sum_age from student GROUP BY gender HAVING  gender = '男';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注意

    • 分组函数的查询条件肯定放在having子句中;
    • 和分组函数一同查询的字段最好作为分组条件的字段。
    1. limit子句

    LIMIT用来限定查询结果的起始行,以及总行数,通常用来做分页查询。

    select * from 表名 limit 起始行,总行数;
    -- 举个栗子
    -- 从下标为 5 开始查找 2 条记录
    select * from student limit 5,2;
    
    -- 开始表中从头查找 5 条记录
    select id,name,age,gender from student limit 5;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.4.2 多表查询

    1. 内连接

    内连接: INNER JOIN ON,通常用来连接两个表中都存在的列值,在数学上可以理解为两个数的交集,即共同拥有的部分。

    在这里插入图片描述

    -- 语法格式
    select 列名 from 表名1 inner join 表名2 [on子句]
    
    --举个栗子
    select * from teacher t join course c on c.t_id = t.id;
    
    select * from teacher t inner join course c on c.t_id = t.id;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 外连接

    外连接又可以分为左外连接右外连接;

    • 左连接:LEFT JOIN,会将语句左边的表中的所有记录全部表示出来,而右表只会显示符合搜索条件的记录,如果左表的记录右表不存在,则以NULL来填充;

    • 右连接:RIGHT JOIN,会将语句右边的表中的所有记录全部表示出来,而左表只会显示符合搜索条件的记录,如果右表的记录左表不存在,则以NULL来填充;

    在这里插入图片描述
    左外连接

    -- 语法格式:outer可省略
    select 列名 from 表名1 left outer join 表名2 [on子句]
    
    -- 举个栗子
    select * from course c left outer join teacher t on c.t_id = t.id;
    select * from course c left join teacher t on c.t_id = t.id;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    右外连接

    -- 语法格式:outer可省略
    select 列名 from 表名1 right outer join 表名2 [on子句]
    
    -- 举个栗子
    select * from course c right  outer join teacher t on c.t_id = t.id;
    SELECT * from course c right join teacher t on c.t_id = t.id;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

  • 相关阅读:
    使用Spring WebFlux和Spring Cloud的反应式微服务
    利用逆矩阵简化矩阵多项式
    一键修复所有DLL缺失问题的终极解决方案,快速解决dll文件缺失
    2022/9/20——IIC协议的练习(以温湿度传感器为例)
    Tr0ll-1项目实战
    SAP 控制VA02修改客户地址是否同步修改参考关联的销售订单
    深度讲解React Props
    关于原型的一些总结
    Linux动静态库
    向量数据库Transwarp Hippo1.1多个新特性升级,帮助用户实现降本增效
  • 原文地址:https://blog.csdn.net/weixin_52986315/article/details/124436773