文章目录

  • MySQL基础
    • 一、数据库简介
      • 1.1 数据库概念
      • 1.2 常见数据库管理系统
      • 1.3 数据库存储特点
      • 1.4 三大范式(规范)-面试常考
      • 1.5 MySQL安装和卸载
      • 1.6 CMD操作数据库+第三方工具的使用
    • 二、SQL语言
      • 2.1 概述
      • 2.2 SQL语句分类
      • 2.3 DDL 操作数据库
      • 2.4 DDL操作数据表
      • 2.5 DML-数据的增删改
      • 2.6 DCL定义访问权限和安全级别
      • 2.7 DQL数据查询
      • 2.8 常见函数

MySQL基础

一、数据库简介

最初学习的变量用来存储数据,但是如果数据量很多,那么就得申请很多变量,然后就引出了数组,但是数组存储时是预先分配一定大小的空间,数组的大小是确定的,然后引出集合,集合能避免数组相关的缺点,但是数据无法永久性的保存,再到文件,文件数量太多,如何进行有效的管理,最后引出数据库。

数据库的优点:

1)能够实现数据的持久化操作

2)具有完整的管理系统,统一管理,统一操作,更加便捷

1.1 数据库概念

数据库:长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或者应用共享的数据集合。

数据库管理系统:一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。

SQL(Structure Query Language:结构化查询语言):可以理解为人类和数据库沟通的语言。关系型数据库标准语言。

1.2 常见数据库管理系统

  • Oracle:Oracle 数据库被认为是业界目前比较成功的关系型数据库管理系统。成本太高,所以在慢慢淡化。
  • MySQL:是一个关系型数据库管理系统,免费,性能高,操作简单。
  • DB2:采用多进程多线索体系结构,可以灵活服务于中小型电子商务解决方案,但是用的比较少。
  • SQL Server:微软公司推出的关系型数据库。

1.3 数据库存储特点

1)存值方式:将数据存到表,表放在库里

2)表名相当于类名,列名相当于属性名。

3)表中的数据是按行存储的,每一行数据相当于 java 中的一个对象。

1.4 三大范式(规范)-面试常考

第一范式:**无重复的列。**字段不可分。原子性。字段不可再分,否则就不是关系数据库。

反例:表 :字段1, 字段2,(字段2.1,字段2.2), 字段3

​ 字段2 可以拆分,不符合第一范式

第二范式:**属性完全依赖于主键【消除部分子函数依赖】。**有主键,非主键字段依赖主键。唯一性。一个表只说明一个事务。

反例:表:学号, 姓名, 年龄, 课程名称, 成绩, 学分

​ 这个表里有两个事务:学生信息, 课程信息,应该拆分成三个表:学生表,课程表,选课关系表

第三范式:**属性不依赖于其他非主属性【消除传递依赖】。**非主键字段不能相互依赖。每列都与主键有直接关系,不存在传递依赖。

反例:表:学号,姓名,年龄,所在学院,学院联系电话

存在依赖传递:学号->所在学院->学院联系电话

1.5 MySQL安装和卸载

下载地址:

https://dev.mysql.com/downloads/mysql/

安装和配置:

见相关安装说明

卸载:

先去服务关闭mysql服务,然后cmd :sc delete mysql8.0

1.6 CMD操作数据库+第三方工具的使用

图形化工具:Navicat

二、SQL语言

2.1 概述

各数据厂商都支持ISO的SQL标准,相当于普通话

各厂商在标准智商做自己的扩展,相当于方言

Create、Read、Update、Delete 通常称为CRUD操作

2.2 SQL语句分类

  • DDL:数据定义语言, 用来定义数据库对象:库、表、列。
  • DML:数据操作语言,用来定义数据库记录(数据)增删改。
  • DCL:数据控制语言,用来定义访问权限和安全级别
  • DQL:数据查询语言,用来查询记录

规范:

1)注意SQL语句以 ; 结尾

2)mysql 中的关键字不区分大小写,但是建议关键字大小,表名,列名小写

3)根据需要,进行缩进或者换行

2.3 DDL 操作数据库

# 创建数据库
create database mydemo1;
create database mydemo2 character set ustf8;
# 查看数据库
show database;
# 查看创建数据库的语句
show create database mydemo2;
# 修改数据库信息(编码方式)
alter database mydemo2 character set gbk;
# 删除数据库
drop database mydemo2;
# 查看当前使用的数据库
select database();
# 切换数据库
use mydemo1;
select database();
# 展示所有的数据表
show tables from mydemo1;
# 查看当前数据库版本
select version();
# 查看字符集
show VARIABLES LIKE '%char%';

2.4 DDL操作数据表

# 创建数据表,约束条件可以省略,表名和列名是自定义的,但是不要用中文
# 数据类型: 整数 int,小数 double,字符 char(8) ->存abc->'abc     ',
#          字符 varchar(8) ->存abc->'abc',(8)表示最大长度为8,用时动态分配
# 大文本类型 text,日期类型 date,time,datetime,timestap,字节类型 blob(存储视频,音频,图片等)
# 如果是数值类型,但是这个数值不会用来做运算的时候,首选 varchar 类型
create table 表名(列名 数据类型 [约束条件],列名 数据类型 [约束条件]);
# 示例:创建学生表,表中包含学号,姓名,年龄,手机号
create table student (stuno varchar(10),stuname varchar(5),stuage int,phone varchar(11)
);
# 删除表
drop table student;
# 查看所有数据表
show tables;
# 查看表字段(列)信息
desc student;
# 修改表结构
# 增加一列
alter table student add sex char(1);
# 修改列 sex -> sex2 类型 -> int
alter table student change sex sex2 int;
# 删除列
alter table student drop sex2;
# 修改表名
alter table student rename mystudent;
# 复制表的结构
create table newstudenttable like mystudent;
# 复制表结构与内容
create table newtable2 select * from mystudent;

2.5 DML-数据的增删改

-- 增加数据
# 注意:多个列名之间使用逗号隔开,列名和列值的顺序要一一对应,数值类型的列值直接赋值,非数值类型需要在两侧加英文单引号
insert into 表名(列名) values(列值);
# 示例:
insert into mystudent(stuno, stuname, sex, age, phone)values(12, '张三', '女', 18, '12345678910');
alter table mystudent add birthday date;
insert into mystudent(stuno, stuname, sex, age, phone, birthday)values(12, '张三', '女', 18, '12345678910', '2000-1-2');
# 如果省略列名,列值的顺序必须按照对应定义的顺序
insert into mystudent values(12, '张三', '女', 18, '12345678910', '2000-1-2'); -- update修改数据(alter是修改表结构)
update 表名 set 列名=列值, 列名2=列值2 where 限定条件;
# 修改电话号码
update mystudent set phone='88888' select * from mystudent;
# 修改多列
update mystudent set phone='11111', sex='男';
# 将学号为12的学生的年龄改成20
update mystudent set age=20 where stuno=11;-- drop 删除表/库
-- delete 删除数据
# 删除表中所有数据
delete from mystudent;
# 只删除stuno为12的学生信息
delete from mystudent where stuno=12;
# 删除表
truncate table mystudent;
# delete 删除之后,能够通过事务进行回滚,在自增长的时候,删除之后添加会继续往后数,truncate 不能回滚,且不返回受影响的行数,自增长删除之后,添加会摒弃之前的记录,重新开始计数。

2.6 DCL定义访问权限和安全级别

# 创建一个新用户
create user myuser@localhost identified by '123456';
# 查询用户权限
show grants for 'root'@localhost;
# 给用户授权(拥有更高权限的人可以进行授权)
# grant 权限列表 on数据库名.表名 to '用户名'@IP;
# 所有库所有表所有ip
grant select, insert on *.* to 'myuser'@'%'
grant select, insert on mydemo1.* to 'myuser'@localhost;
# 撤销用户授权
revoke insert on mydemo1.* from 'myuser'@localhost;
# 删除用户
drop user 用户名@IP;
drop user 'myuser'@localhost;
# 修改密码
alter user 'root'@localhost identified by '新密码';
set password for root@localhost='新密码';

2.7 DQL数据查询

# 查询数据
# 查询语法,当查询所有列时,列名可以使用*代替
# 查询出来的结果也称为虚拟表
select 列名 from 表名 where 限定条件;
select * from mystudent;
select stuname, age from mystudent;
# 查询未成年人的信息
select * from mystudent where age<18;
# 查询未成年人中男生的信息
select * from mystudent where age<18 and sex='男';
# 查询未成年中男生的姓名和电话
select stuname, phone from mystudent where age<18 and sex='男';
# 查询学号是11,33,44 的学生姓名
select stuname from mystudent where stuno=11 or stuno=33 or stuno=44;
select stuname from mystudent where stuno in (11,33,44);
# 查询学号除了11,33,44的学生姓名
select stuname from mystudent where stuno not in (11,33,44);# 区间查询
# 查询年龄在18-25之间的学员信息
select * from mystudent where age>=18 and age<=25;
# between a and b 是包含左右的临界值的
select * from mystudent where age between 18 and 25;# not null 非空
# 查询出有性别值的学生信息
select * from mystudent where sex='男' or sex='女';
select * from mystudent where sex is not null; #扩展性更好# 模糊查询
# 列名 like '表达式'
# 表达式的通配符:_ 下划线表示一个字符    % 表示多个字符
# 查询姓张的学员信息
select * from mystudent where stuname like '张%';
select * from mystudent where stuname like '张__';
select * from mystudent where stuname like '张_';
select * from mystudent where stuname like '_三%';
# 查询 小芳 的相关信息
select * from mystudent where stuname like '%小芳%';# 去重查询
# 查询性别的值都有哪些
select distinct sex from mystudent;# 列之间的运算
select 1+2; # 结果是3
select 1+'123'; # 结果是124,+ 是做加法运算的
select 'abc'+123; # 结果是123,如果单引号中转换成数值类型失败时,会将字符的内容转换成字符0;
select null+123; # 结果是null,当运算时有null值,则整体结果为null
# 使用查询语句,将每个人的年龄+5岁,展示出来
select stuname,age,ifnull(age,0)+5 from mystudent;# 拼接字符串
select concat('a1','a2','a3'); # 结果是'a1a2a3'
select stuname, concat(stuname,'-test') from mystudent;
select stuname, concat(stuname,'-',age) from mystudent;# 起别名
# 旧列名 as '新列名'    (as 可以省略,但是中间的空格要保留)
select concat('a1','a2','a3') as '拼接字符串';# 排序 order by 排序的列名 desc(降序)/asc(升序)
# 不指定排序规则时默认升序
# 根据年龄降序排序
select * from mystudent order by age desc;
# 多列排序
# order by 排序的列名 desc(降序)/asc(升序), 排序的列名2 desc(降序)/asc(升序)
# 查询出学员信息,根据年龄降序排序,如果年龄相同,则根据出生日期升序排序
select * from mystudent order by age desc, birthday asc;# 聚合函数:主要用来做纵向运算(计算的是非空数据)
# 五个聚合函数:max(列名),min(列名),avg(列名),sum(列名),count(列名)
# 查询出年龄最大的,最小的,平均年龄,年龄总和
select max(age),min(age),avg(age),sum(age) from mystudent;
# count(*) 和 count(1) 的区别:
# 1 是常量值,* 表示是所有列,这两者没有太多的出入点# 分组查询
# group by 被分组的列名
# 查询男女生分别多少人
select sex,count(*) from mystudent where sex is not null group by sex;
# 查询出性别人数大于2人的性别值和人数
# where是分组之前的条件添加,having是分组之后的条件添加
select sex,count(*) from mystudent where sex is not null group by sex having count(*)>2;# 分页查询
# 语法:limit 开始位置,显示条数    (开始位置从0开始)
# 第一页
select * from mystudent order by stuno asc limit 0,5;
# 第二页
select * from mystudent order by stuno asc limit 5,5;
# 使用变量动态计算开始位置
# pageIndex 页码值,pageSize 每页显示条数
# limit (pageSize-1)*pageSize,pageSize# 小结:
select 列名
from 表名
where 分组前的限定条件
group by 分组的列
having 分组后的限定条件
order by 排序的列名 desc/asc
limit (pageSize-1)*pageSize,pageSize

2.8 常见函数

# 获得字符串长度
select length('abc');
# 字符串拼接
select contact("aa","bb","cc");
# 大小写转换
select upper('abc');
select lower('ABC');
# 截取字符串 (字符串,开始位置,长度)
select substr('今天天气真好',2);
select substr('今天天气真好',2,4);
# 查找索引 返回第一次出现的索引
select instr('今天天气真好','天');
# 去除空格
select length('   abc   ');
select length(trim('   abc   '));
# 替换  将 l --> a
select replace('apple','l','a');
# 左填充和右填充
select lpad('王老五',8,'a');
select rpad('张家口',8,'b');# 数学函数
# 四舍五入
select round(1.63,1);  #1是保留的位数
# 向上取整
select ceil(1.234); # 2
# 向下取整
select floor(12.234); # 12
# 截取数值
select truncate(1.678,2); #1.67
# 取余数
select mod(10,3); # 10 % 3# 日期函数
# 当前时间
select now();
# 当前日期
select curdate();
# 当前时间
select curtime();
# 获得日期中的某个字段
select year(curdate());
# 日期转换
# date->str
select date_format(now(),'%Y-%m-%d');
# str->date
select str_to_date('11-8-2021','%m-%d-%Y');# 补充函数
# 查询版本
select version();
# 查询当前数据库
select database();
# 查询当前用户
select user();

04夯实基础之MySQL基础相关推荐

  1. java零基础Ⅲ-- 4.Mysql基础

    java零基础Ⅲ-- 4.Mysql基础 MySQL安装配置 MySQL数据库的安装和配置 软件下载 特别说明 安装步骤 使用命令行窗口连接MYSQL数据库 Navicat 安装和使用 介绍:图形化M ...

  2. mysql核心数据库_从MySQL基础进军MySQL核心架构 178集MySQL数据库核心基础视频教程 MySQL基础案例教程...

    从MySQL基础进军MySQL核心架构 178集MySQL数据库核心基础视频教程 MySQL基础案例教程 课程目录 (1) 01MySQL基础_课程引入.avi (2) 02MySQL基础_为什么学习 ...

  3. 最基础!MySQL基础查询SELECT

    1.查询表中字段 USE 要操作的数据库名; SELECT 查询的字段 FROM 要操作的表; 若要查询表中所有字段,可以用 * 代替上面的 查询的字段 . 2.查询常量 SELECT 99; SEL ...

  4. MySQL基础——(MySQL概述及SQL通用语法)

    MySQL基础篇(一) MySQL基础 目录 MySQL基础 1 MySQL概述 1.1 数据库相关概念 1.2 数据模型 1)关系型数据库(RDBMS) 2)数据模型 2 SQL 2.1 SQL通用 ...

  5. MySQL基础教程---创建、查询、备份数据库

    文章目录 一.创建数据库 1.指令或者工具创建数据库 2.数据库校对规则 二.查询数据库 三.备份与恢复数据库 1.对数据库的备份 2.对数据表的备份 3.导入一个SQL文件 前期环境基础: MySQ ...

  6. mysql基础入门 day2 动力节点[老杜]课堂笔记

    day_2 本文原作者为动力节点教学总监杜老师老杜在其课老杜带你学_mysql 入门基础(mysql 基础视频+数据库实战)所写讲课笔记 该文档和其涉及资料见文档末链接 本人将其讲课笔记 txt 下载 ...

  7. 查看mysql数据库服务_MySQL数据库之mysql5.7基础 查看mysql的服务状态

    本文主要向大家介绍了MySQL数据库之mysql5.7基础 查看mysql的服务状态 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. Operating System:Ubunt ...

  8. MySQL基础(三)表关系及数据的增删改查

    这一部分主要使用SQL中的DML,数据库操作语言(data manipulation language),对数据库数据进行增.删.改.查操作,作为前提,先介绍关系型数据库中的表关系. 关系型数据库(R ...

  9. MySQL基础知识-MySQL概述安装,单表增删改查,函数,约束,多表查询,事物

    MySQL基础知识-MySQL概述安装,单表增删改查,函数,约束,多表查询,事物 前言 1.MySQL概述 1.1数据库相关概念 1.2MySQL数据库 1.2.1版本 1.2.2下载 1.2.3安装 ...

最新文章

  1. 自然语言处理NLP之语义相似度、语言模型、doc2vec
  2. 用Red5搭建支持WEB播放的实时监控视频
  3. 在Windows上运行-XX:CompileCommand
  4. 窗体控件绑定数组 c# 1613698204
  5. 内核终端判断,微信?QQ?ipad?IE?移动?Google?opera……
  6. mysql one database_MYSQL学习笔记one
  7. Java前端自定义错误信息封装_SpringBoot2.3定制错误页面的方法示例
  8. 线上Linux服务器运维安全策略经验分享
  9. 不要安全要性能,禁用补丁提高CPU性能
  10. zip分卷压缩的步骤_rar分卷压缩的步骤详解【图文步骤】
  11. 云丁智能锁说明书_真硬核!行业爆发前夜,这把锁登上航母
  12. 模式识别与机器学习(国科大2021-2022秋季学期课程)-基础概念及算法
  13. 视频 | 直升机如何转弯,为什么能悬停在空中,它的飞行原理是什么?
  14. R语言学习:缺失值处理
  15. 阿里云产品分析(1):阿里云安全性分析与案例
  16. Jira管理员配置手册
  17. Java五子棋书,本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下package gyb.exam; import java.awt.Bo...
  18. python建筑案例_有哪些关于 Python 在建筑中的应用和教程?
  19. jsp mysql问卷调查_课内资源 - 基于JSP的在线调查问卷系统
  20. 最好的降噪蓝牙耳机有哪些?目前最好的降噪蓝牙耳机推荐

热门文章

  1. 集中式和分布式版本控制系统的区别
  2. defineProps
  3. DPU网络开发SDK—DPDK(六)
  4. 采用Fuel Gauge可能出现的几种电量现象及解释
  5. 男性软件测试师容易找到女朋友吗?
  6. HighlightPlus物体自发光
  7. 自建CA给内部网站颁发SSL证书
  8. KT148A语音芯片ic工作原理以及芯片的内部架构描述
  9. 剧白白 v3.1.1 修改版 (强大的最新影视在线平台)
  10. 新房和二手房税费比较