mysql必知必会(初级篇)(代码片段)

Binaire-沐辰 Binaire-沐辰     2022-12-01     407

关键词:

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. 修改用户密码
set password for 'mc'@'%' = '123456';
  1. 刷新权限(修改完密码,一定要刷新权限)
flush privileges;

2.1.2 使用grant命令给用户授权

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

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

2.1.3 使用revoke命令撤销权限

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

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)
);
  • 创建图书表(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,
)
  • 创建图书和作者表(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)  -- 外键约束
)

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;

2.2.3 使用drop命令删除表

-- 删除表
drop table users;
-- 查看表结构
desc users;

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');

2.3.2 使用update命令插入数据

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

2.3.3 使用delete命令插入数据

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

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. 列运算

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

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

注意

  • 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. 条件查询
-- 条件控制  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. 模糊查询
-- _代表匹配任意一个字符,%代表匹配0~n个任意字符
select * from student where name like '李_'; 
select * from student where name like '张%';
  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. 聚合函数
  • count():统计查询结果的行数
select count(列名) from 表名;

select count(gender) from student;
select max(age) from student where id > 5;

  • max() 和 min()
    max()查询指定列的最大值,min()表示查询指定列的最小值。
select max(列名) from 表名;
select min(列名) from 表名;

-- 举个栗子
select max(age) from student where id > 5;
select min(age) from student;
  • sum():返回指定列的总和
select sum(列名) from 表名;

-- 查询成绩总和
select sum(score) from scores;
  • avg():返回指定列数据的平均值
select avg(列名) from 表名;

-- 查询平均成绩
select avg(score) from scores;
  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 = '男';

注意

  • 分组函数的查询条件肯定放在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;

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. 外连接

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

  • 左连接: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;

右外连接

-- 语法格式: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;

mysql必知必会(代码片段)

姊妹篇——Hive必知必会(数据仓库):https://hiszm.blog.csdn.net/article/details/119907136文章目录第一章:数据库基础基本概念什么是SQL第二章:MySQL简介第三章:了解数据库和表第四章:检索数据SELECT语句第五章:... 查看详情

mysql的必知必会------初识mysql(代码片段)

目录数据库简介MySQL简介MySQL的操作库操作基本数据类型字符串类型日期类型基础表操作一些小结和建议建表练习参考代码写在最后的话数据库简介我们都知道MySQL是数据库的一种,那么数据库是什么呢?数据库其实就是通过各种数... 查看详情

mysql的必知必会------初识mysql(代码片段)

目录数据库简介MySQL简介MySQL的操作库操作基本数据类型字符串类型日期类型基础表操作一些小结和建议建表练习参考代码写在最后的话数据库简介我们都知道MySQL是数据库的一种,那么数据库是什么呢?数据库其实就是通过各种数... 查看详情

mysql的必知必会------初识mysql(代码片段)

目录数据库简介MySQL简介MySQL的操作库操作基本数据类型字符串类型日期类型基础表操作一些小结和建议建表练习参考代码写在最后的话数据库简介我们都知道MySQL是数据库的一种,那么数据库是什么呢?数据库其实就是通过各种数... 查看详情

mysql必知必会语法和基础知识大总结(代码片段)

概述主键:唯一区分表中每个行(不可重复,不允许nullmysql:基于客户-服务器的数据库系统使用mysqlmysql是部署在主机上的,可以通过ssh建立mysql连接#显示数据库showdatabases;#选择数据库usedatabases;#显示库中的表s... 查看详情

mysql必知必会语法和基础知识大总结(代码片段)

概述主键:唯一区分表中每个行(不可重复,不允许nullmysql:基于客户-服务器的数据库系统使用mysqlmysql是部署在主机上的,可以通过ssh建立mysql连接#显示数据库showdatabases;#选择数据库usedatabases;#显示库中的表s... 查看详情

实战篇:oracle分区表必知必会在线重定义(代码片段)

作者简介作者:LuciferLiu,中国DBA联盟(ACDU)成员。目前主要从事OracleDBA工作,曾从事Oracle数据库开发工作,主要服务于生产制造,汽车金融等行业。现拥有OracleOCP,OceanBaseOBCA认证,擅长Oracle数据库运维... 查看详情

实战篇:oracle分区表必知必会在线重定义(代码片段)

作者简介作者:LuciferLiu,中国DBA联盟(ACDU)成员。目前主要从事OracleDBA工作,曾从事Oracle数据库开发工作,主要服务于生产制造,汽车金融等行业。现拥有OracleOCP,OceanBaseOBCA认证,擅长Oracle数据库运维... 查看详情

牛客mysql必知必会刷题总结(代码片段)

总的来说,关于要用having的时候会出错,此为不熟练。另外如通配符等函数运用属实是落后不了解。1.Mysql中表student_table(id,name,birth,sex),插入如下记录:(\'1001\',\'\',\'2000-01-01\',\'男\');(\'1002\',null,\'2000-12-21\',\'男\');(\'1003\',NULL,\'2000... 查看详情

mysql必知必会,详尽入门,一文帮你学会sql必知必会(代码片段)

目录前言数据库的概念和术语SQL语言和组成DDLshow: 展示当前已有的数据库或者表create:创建一个数据库或者一个表 drop:删除表、数据库对象或者视图alter:修改现有的数据库对象,例如 修改表的属性或者字段(... 查看详情

hive必知必会(代码片段)

hive: 基于hadoop,数据仓库软件,用作OLAPOLAP:onlineanalyzeprocess 在线分析处理OLTP:onlinetransactionprocess在线事务处理 事务: ACID A:atomic 原子性 C:consistent 一致性 I:isolation 隔离性 D:durability 持久性 1读未提交   脏读 //事务... 查看详情

必知必会面试10多家中大厂后的两万字总结——❤️jvm篇❤️(建议收藏)(代码片段)

⭐欢迎订阅《技术专家修炼》专栏,带你搞技术,进大厂,聊人生⭐🌲往期回顾📚面试10多家中大厂后的万字总结——❤️Java基础篇❤️📚面试10多家中大厂后的万字总结——❤️JavaWeb篇❤️📚面试... 查看详情

crypto必知必会(代码片段)

crypto必知必会最近参加了个ctf比赛,在i春秋,南邮方面刷了一些crypto密码学题目,从中也增长了不少知识,在此关于常见的密码学知识做个小总结!Base编码Base编码中用的比较多的是base64,首先就说一下Base64编码方式将字符串以... 查看详情

《sql必知必会》读书笔记上(第1~15章)(代码片段)

目录第1章了解SQL第2章MySQL简介第3章使用MySQL3.1连接数据库3.2选择数据库3.3显示数据库和表3.4其他SHOW语句第4章检索数据4.1SELECT语句4.2检索单个列4.3检索多个列4.4检索所有列4.5检索不同的行(去重)4.6限制结果4.7使用完全... 查看详情

springmvc--必知必会(代码片段)

  SpringMVC基于模型--视图--控制器(Model-View-Controller,MVC)模式实现,属于SpringFrameWork的后续产品,已经融合在SpringWebFlow里面。它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无需实现任何接口。同时它还支持... 查看详情

必知必会的mysql知识②使用mysql(代码片段)

...连接MySQLMySQL数据库基本命令小结前言根据上一篇文章【必知必会的MySQL知识】①初探MySQL的内容,想必您对MySQL数据库有了一个整体的了解了,并且应该在自己电脑上已经安装上了MySQL。这一篇呢我们来说一说这么连接上数据库并... 查看详情

h5系列之history(必知必会)(代码片段)

H5系列之History(必知必会)目录概念兼容性属性方法H5方法概念理解HistoryApi的使用方式目的是为了解决哪些问题作用:ajax获取数据时,可以改变历史记录,从而可以使用浏览器的后退和前进。【】规范地址:http://www.w3.org/TR/html5... 查看详情

scala必知必会(代码片段)

文章目录入门概述安装JavaVSScalaval和var基本数据类型lazy在Scala中的应用开发工具IDEAMaven函数方法定义默认参数命名参数可变参数条件语句循环语句面向对象概述类的定义和使用抽象类伴生类和伴生对象case和trait集合数组ListSetMapOpt... 查看详情