mysql数据库【入门指南】超详细汇总,从入门到精通
文章目录一、MySQL 基础1.MySQL基本概念1.1什么是数据库?1.2为什么使用数据库?1.3数据库的简称与全称?2.数据库的创建与删除2.1创建数据库2.2删除数据库2.3修改数据库字符集(mysql中不支持修改数据库名)3.数据库中表的增、删、改、查3.1数据类型3.2约束3.3创建表3.4编辑表二、MySQL查询1.查询概念2.MySQL中的函数2.1字符函数2.2逻辑函数2.3数字函
一、MySQL 基础
1.MySQL基本概念
1.1什么是数据库?
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。通俗的说就是专业存储数据的软件,里面数据存储是有一定的规则,可以使用数据库操作语言sql,实现方便高效的数据管理(增、删、改、查)。
1.2为什么使用数据库?
把数据保存到可掉电式存储设备中以供之后使用。持久化的大多数时候是将内存中的数据存储在数据库中,当然也可以存储在磁盘文件、XML数据文件中。方便管理数据(例如:快速的检索等)。通俗的说就是数据持久化到本地。
1.3数据库的简称与全称?
简称:DB、数据库
全称:DBMS、数据库管理系统
SQL:结构化查询语言,是数据库的通用操作语言,但是不同的数据库语法上略微有分别
2.数据库的创建与删除
2.1创建数据库
create database 数据库名 charset utf8(字符集)
2.2删除数据库
drop database 数据库名
2.3修改数据库字符集(mysql中不支持修改数据库名)
alter database 数据库名 charset utf8
3.数据库中表的增、删、改、查
3.1数据类型
- 字符:char varchar
- 时间:date datetime
- 整数:tinyint smallint mediuint int bigint
- 浮点:float double
3.2约束
-
primary key
主键约束:每张表可以添加一个主键约束,不能为空,默认不能重复,可以表示表中唯一的一条记录 -
not null
不能为空约束:值不能为空 -
unique
唯一约束:值不能重复 -
检查约束(自定义条件)
外键约束(多表关联时讲) -
auto_increment
自动增长,要设置自增的话数据类型必须是整数类型 -
enum(类别,类别)
相当于下拉框,只能选择其中之一
-
comment
字段注释
3.3创建表
create table 表名(
列名 数据类型 约束 注释
)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TyoPp0Eq-1653065490710)(C:\Users\qq\AppData\Roaming\Typora\typora-user-images\1653041337125.png)]
3.4编辑表
- 删除表
drop table 表名
- 修改表名
rename table 新表名 to 原表名
- 修改表中的列
alter table 表名 modify 原列名 修改后的数据类型
alter table 表名 change 原列名 修改后的列名及数据类型
- 复制表结构
create table 新表名 like 原表名
- 向表中插入列
alter table 表名 add column 列名及数据类型
- 向表中插入数据
insert into 表名(列名,列名)
value("数据",“数据”)
- 将查询结果插入到指定表中
insert into 指定表 指定表列 select 原表列 from 原表名
二、MySQL查询
1.查询概念
- 查询的结果是一个虚拟的表格,不能进行操作
- 查询结果中可以出现常量,可以进行算数运算
2.MySQL中的函数
2.1字符函数
- 显示长度:length(以字节为单位)、char_length(以字符为单位)
select length(列名),char_length(列名) from 表名
- 连接多个字符串:concat() 、用中间的字符或字符串将两列数据连接起来
select concat(列名,字符串,列名) from 表名
- 转大小写:upper()、lower()
select upper(列名),lower(列名) from 表名
- 限定这个列显示字符的长度:substring()
select substring(列名,开始长度,长度) from 表名
- 查找指定字符首次出现的位置:instr()
select instr(列名,查找的字符) from 表名
- 去掉前后空格:trim()
select char_length(trim(列名)) from 表名
- 去掉前后指定的子串:trim()
select trim(子串 from 列名) from 表名
- 填充:lpad(向前填充)、rpad(向后填充)、长度的作用是限定了总字符串的长度,不足添加,太多删除
select lpad(列名,长度,填充内容),rpad(列名,长度,填充内容) from 表名
- 将指定字符转化:replace()
select replace(列名,指定字符,转化字符) from 表名
2.2逻辑函数
(case when 条件 then 条件成立填充此内容 else 不成立填充此内容 end)as 列名
(case when 条件1 then 条件1成立填充此内容 when 条件2 then 条件2成立填充此内容 else 不成立填充此内容 end)as 列名
if(条件,符合条件填充此内容,不符合填充此内容)as 列名
ifnull(列名,为空填充此内容)as 列名
2.3数字函数
- 四舍五入:round()
select round(列名) from 表名
- 向上取整、向下取整:ceil()、floor()
select ceil(列名), floor(列名) from student
- 取余、返回0-1之间的随机数:mod()、rand()
select mod(10,3), rand() from student
2.4日期函数
-
年月日时分秒:now()
SELECT NOW() FROM 表名 SELECT YEAR(列名),MONTH(列名),DAY(列名)FROM 表名 -
年月日:curdate()
SELECT CURDATE() FROM 表名 -
时分秒:curtime()
SELECT curtime() FROM 表名 -
字符串转日期:str_to_date(字符串,日期)
SELECT STR_TO_DATE(‘2001-1-1’,’%y-%m-%d’) FROM 表名 -
日期指定格式转字符串:date_format() 、datediff()
SELECT DATE_FORMAT(列名,’%Y’)FROM 表名 SELECT DATE_FORMAT(列名,’%Y-%m’)FROM 表名 SELECT DATEDIFF(NOW(),‘2022-2-2’) FROM 表名
2.5分组函数
-
统计数量:count()
SELECT COUNT(列名) FROM 表名 -
求和、求平均值:sum()、 avg()
SELECT SUM(列名) FROM 表名 SELECT AVG(列名) FROM 表名 -
最大值、最小值:max()、min()
SELECT MAX(列名),MIN(列名)) FROM 表名
3.查询方式
3.1查询条件
- 条件查询
select * from 表名 where 条件
- in输出括号里面的条件、加not为不输出
SELECT * FROM 表名 WHERE 列名 NOT IN(1.77,1.88,1.89)
- 模糊匹配任意位数:like%
SELECT * FROM 表名 WHERE 列名 LIKE ‘张%’
- 基本字符模糊匹配单个字符:like_
SELECT * FROM 表名 WHERE 列名 LIKE '张_’
- 取某个区域中间值:between and
SELECT * FROM 表名 WHERE 列名 BETWEEN 1.60and1.90
3.2合并查询
-
合并多条查询结果,会去除重复数据:union
SELECT * FROM 表名 WHERE 条件 UNION SELECT * FROM 表名 WHERE 条件 -
不会去除重复元素:union all
SELECT * FROM 表名 WHERE 条件 UNION ALL SELECT * FROM 表名 WHERE 条件
3.3查询后排序
-
order by 列名 desc降序 、asc升序(先写哪个先排哪个)
SELECT * FROM 表名 ORDER BY 列名 DESC,列名 ASC -
数量限制:limit 从开始的位置 (从0开始),数量 ,实现分页功能
SELECT * FROM 表名 LIMIT 0,4 SELECT * FROM 表名 LIMIT 4,4
3.4分组查询
-
把条件相同的数据分到一个组中
-
group(列名)
SELECT 和分类有关的列名 FROM 表名 GROUP BY 要分类的列名 -
分组后的条件查询
SELECT * FROM (SELECT gender,COUNT(*)AS c FROM 表名 GROUP BY gender)t WHERE t.c>2 -
where 条件 对原始表中的数据进行条件筛选
-
having 条件 对分组后的数据进行条件筛选
SELECT gender,COUNT(*) AS c FROM 表名 GROUP BY gender HAVING c>2
3.5子查询
-
出现在其他语句中的select语句 称为子查询/内查询
-
按子查询出现的为:
select 语句中子查询 仅仅支持标量子查询 使用较少
form 语句中子查询 支持表子查询
where 语句中子查询 支持标量子查询,列子查询,行子查询 -
按功能、结果集的行列数不同:
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有一行多列)(较少)
表子查询(结果集一般为多行多列) -
在select后面使用子查询 (两张不同的表之间的互动)
SELECT NO,gender,(SELECT NAME FROM student st WHERE st.no = s.no) FROM student s
- 在from后面使用子查询 把一个查询的结果可以当作一张表 继续作为数据源查询
SELECT * FROM (SELECT gender,COUNT(*)AS c FROM student GROUP BY gender)AS t
WHERE t.c>2
- 在where后面使用子查询 标量子查询
SELECT * FROM student WHERE height > (SELECT AVG(height) FROM student)
- 在where后面使用子查询 列子查询
SELECT * FROM student WHERE NO IN(SELECT NO FROM student WHERE height>1.60)
- 在where后面使用子查询 行子查询
SELECT * FROM student WHERE (gender,height) =
(SELECT NO,height FROM student WHERE height=(SELECT MAX(height) FROM student))
三、MySQL多表设计与关联
1.多表设计概念
1.1为什么需要多表设计,多表为什么关联?
- 需要存储不同信息
- 数据之间有关系,减少数据的冗余
1.2表设计的原则
- 数据库设计范式:为了设计出冗余小、结构合理
- 数据库设计三范式:
第一范式:表中列的原子性,列不可再拆分(比如电话号码~~,而不是联系方式(qq, 电话号码,邮箱))
第二范式:要有主键,其他列依赖于主键存在,主键是唯一的
第三范式:消除传递依赖,不同的表只存储一类信息,相互通过编号关联即可
2.多表关联的方式
2.1弱关联:表与表之间没有任何约束关系
2.2强关联:外键约束
alter table 外键表 add constraint fk_外键表_主键表_外键表要绑定的列
foreign key(外键表要绑定的列) references 主键表(主键表要绑定的列)
3.关联查询(多表查询)
- 查询的数据来源于多张表,为表定义别名
- 问题:笛卡尔乘积现象,结果不对,避免发生的话还需要添加条件
SELECT
s.no,
s.name,
s.gender,
g.name
FROM
student s,-- 给表名后直接加字母就是给表名定义临时的名字
grade g
WHERE
s.gradeid = g.id
4.内连接
4.1内连接的概念
- 把满足了条件的两张表中的交集数据查询出来
4.2内连接的方式
- 等值连接
语法:Select
结果
from
表1,表2
where
表1.column1 = 表2.column2
SELECT
s.no,
s.name,
s.gender,
g.name gname
FROM
student s
INNER JOIN grade g
ON a.gradeid = g.id
- 非等值连接
SELECT
s.no,
s.name,
h.level_name
FROM -- 结果在设置表的中间时显示设置的东西
student s
INNER JOIN
height_level h
ON s.height BETWEEN h.level_lower AND h.lever_upper
- 内连接、自连接
SELECT
tal.name pname,
ta.name
FROM -- 在同一个表中两个列相连
t_area ta
INNER JOIN t_area tal
ON ta.pid = tal.id
- 左外连接:即使不满足条件也会被查询出来
SELECT
s.no,
s.name,
s.gender,
g.name gname
FROM
student s
LEFT JOIN grade g
ON s.gradeid = g.id
- 右外连续查询
SELECT
g.name,
COUNT (s.gradeid)
FROM
student s
RIGHT JOIN grade g
ON s.gradeid = g.id
GROUP BY g.name
5.数据库中表与表之间的关联关系
- 一对一关联
- 一对多关联
- 多对一关联
- 多对多关联
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)