01-MySQL 基础篇笔记

一、MySQL 概述

1.1 数据库相关概念

数据库:(DB:DataBase)

  • 存储数据的仓库,数据是有组织的进行存储

数据库管理系统:(DBMS:DataBase Management System)

  • 操作和管理数据库的大型软件

SQL:(SQL:Structured Query Language,结构化查询语言)

  • 操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准

主流的关系型数据库管理系统

  • ORACLE
  • MySQL
  • SQLServer
  • PostgreSQL
  • SQLite(安卓)

1.2 MySQL 数据库

版本:

  • 社区版,免费,MySQL 不提供任何技术支持

  • 商业版,收费,官方提供技术支持

MySQL 下载:

  • MySQL 下载网址

安装:

1.3 MySQL 数据库的启动与停止

1、启动:

net start mysql80

2、停止 :

net stop mysql80

mysql80 是系统服务名称:

【注意】:MySQL 默认是开机自启动的

1.4 MySQL 客户端连接

1、方式一

2、方式二

系统自带的命令行工具执行指令

mysql [-h 127.0.0.1] [-p 3306] -u root -p

【注意】使用这种方式时,需要配置 PATH 环境变量

1.5 MySQL 数据库数据模型

关系型数据库(RDBMS)

概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库(Excel 表)。

特点:

  • 使用表存储数据,格式统一,便于维护

  • 使用 SQL 语言操作,标准统一,使用方便

二维表


二、SQL

2.1 SQL 通用语法

  • SQL 语句可以单行或多行书写,以分号结尾

  • SQL 语句可以使用空格 / 缩进来增强语句的可读性

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

  • 注释:

    • 单行注释:--注释内容,或 #注释内容(MySQL 特有)

    • 多行注释:/* 注释内容 */

2.2 SQL 分类

2.3 DDL(数据定义语言)

作用:用来定义数据库对象(数据库、表、字段)

2.3.1 数据库操作

1. 查询:

查询所有数据库:

SHOW DATABASES;

查询当前数据库:----> 在某个数据库工作,不知道它的名字

SELECT DATABASE();
2.创建:
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集][COLLATE 排序规则];

[IF NOT EXISTS]:如果该数据库名不存在就创建,否则就不创建。

3.删除
DROP DATABASE [IF EXISTS]数据库名;

4.使用
USE 数据库名;

2.3.2 表操作(创建、查询)

1.表操作 --- 查询

查询当前数据库中所有表:

SHOW TABLES;

查询表结构:

DESC 表名;

查询指定表的建表语句:

SHOW CREATE TABLES 表名;

2.表操作 --- 创建
CREATE TABLE 表名(字段1 字段1类型 [COMMENT 字段1注释],字段2 字段2类型 [COMMENT 字段2注释],字段3 字段3类型 [COMMENT 字段3注释],......字段n 字段n类型 [COMMENT 字段n注释]
)[COMMENT 表注释];

【注】[......] 为可选参数,最后一个字段后面没有逗号

2.3.3 表操作(数据类型及案例)

1.表操作 --- 数据类型

MySQL 中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。

精度:是指该数的数字个数

标度:是指该数的小数个数

  • 123.45

    • 精度是 5

    • 标度是 2

char(10) --->性能好

varchar(10) ---->性能较差

案例:

CREATE TABLE EMP(ID INT COMMENT '编号',WORKID VARCHAR(10) COMMENT '工号',NAME VARCHAR(10) COMMENT '姓名',GENDER CHAR(1) COMMENT '性别',AGE TINYINT UNSIGNED COMMENT '年龄',IDCARD CAHR(18) COMMENT '身份证号',ENTRYTIME DATA COMMENT '入职时间'
)COMMENT '员工表';

2.3.4 表操作 --- 修改&删除

1.DDL -- 表操作 -- 修改
1.1 添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];

案例:为 emp 表增加一个新的字段 “昵称” 为 nickname,类型为 varchar(20)

ALTER TABLE emp ADD nickname VARCHAR(20) COMMENT '昵称';

1.2 修改字段

修改数据类型

ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

修改字段名和字段类型

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];

案例:将 emp 表的 nickname 字段修改为 username,类型为 varchar(30)

ALTER TABLE emp CHANGE nickname username VARCHAR(30) COMMENT '用户名';
1.3 删除字段
ALTER TABLE 表名 DROP 字段名;

案例:将 emp 表的字符 username 删除

ALTER TABLE emp DROP username;

1.4 修改表名
ALTER TABLE 表名 RENAME TO 新表名;

案例:将 emp 表的表名修改为 employee

ALTER TABLE emp RENAME TO employee;

2.DDL -- 表操作 -- 删除
2.1 删除表
DROP TABLE [IF EXISTS] 表名;
2.2 删除指定表,并重新创建该表
TRUNCATE TABLE 表名;

2.3.5 DDL 小结

2.3.6 MySQL 图形化界面

2.4 DML(数据操作语言)

DML 英文全称是 Data Manipulation Language (数据操作语言),用来对数据库中表的数据记录进行增删改操作。

作用:用来对数据库表中的数据进行 增删改

  • 添加数据:INSERT

  • 修改数据:UPDATA

  • 删除数据:DELETE

1. DML - 添加数据(insert)

1.1 给指定字段添加数据
INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...);
1.2 给全部字段添加数据

不指定字段名称,就是给表中所有字段添加数据

INSERT INTO 表名 VALUES(值1,值2,...);
1.3 批量添加数据
INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);

不指定字段名称,就是给表中所有字段添加数据

INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);

【注意】

  • 插入数据时,指定的字段顺序需要与值的顺序是一 一对应的。

  • 字符串和日期型数据应该包含在引号中。

  • 插入的数据大小,应该在字段的规定范围内。

案例
insert into emp(id, workid, name, gender, age, idcord, entrydata) values (1,'1','itcast','男',10,'123456789012345678','2000-10-01');
# 给指定字段添加数据
insert into emp(id, workid, name, gender, age, idcord, entrydata) values (3,'2','itcast2','男',-1,'123456789012345678','2000-10-01');# 给全部字段添加数据
insert into emp values (11,'11','allice','女',10,'123456789012345678','2001-08-09');
-- 批量添加数据
insert into emp values (14,'14','王林','女',10,'123456789012345678','2001-08-09'),(13,'13','黄天霸','女',10,'123456789012345678','2001-08-09'),(12,'12','张无忌','女',10,'123456789012345678','2001-08-09');
-- 查询所有数据
select * from emp;

2. DML - 修改数据(updata)

语法:

UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值2,...[WHERE 条件];

【注意】:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。

案例:
-- 修改id 为 1 的数据,将 name 修改为 唐三
update emp set name = '唐三' where id = 1;-- 修改id 为 2 的数据,将 name 修改为 田二林,gender 修改为 '女'
update emp set name = '田二林',gender = '女' where id = 2;-- 将所有员工的入职日期修改为 2008-01-01
update emp set entrydata = '2008-01-01';

3. DML - 删除数据(delete)

语法:

DELETE FROM 表名 [WHERE 条件]

【注意】

  • delete 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据
  • delete 语句不能删除某一个字段的值(乐园使用 update 进行删除)
案例:
-- 删除 gerder 为 女 的员工
delete from emp where gender = '女';-- 删除所有员工
delete from emp;

4、DML(数据操作语言)总结

2.5 DQL(数据查询语言)⭐

作用:用来 查询 数据库中表的记录

DQL(Data Query Language):数据查询语言,用来查询数据库中表的记录。

查询关键字:select

DQL 语法

1、DQL - 基本查询

案例:
-- 删除表
drop table emp;-- 查询数据
-- 数据准备
create table empployee(id int comment '编号',worknc varchar(10) comment '工号',name varchar(10) comment '姓名',genger char(1) comment '性别',age tinyint unsigned comment '年龄',idcars char(18) comment '身份证号',workaddress varchar(50) comment '工作地址',entrydate date comment '入职时间'
) comment '员工表';-- 添加数据(插入数据)
insert into empployee(id, worknc, name, genger, age, idcars, workaddress, entrydate)
values (1,'1','王林','男',20,'123456789012345678','北京','2000-01-01'),(2,'2','田大林','男',21,'123456789012345678','北京','2000-01-01'),(3,'3','田二林','男',19,'123456789012345678','北京','2000-01-01'),(4,'4','田三林','男',18,'123456789012345678','北京','2000-01-01'),(5,'5','海瑞','男',20,'123456789012345678','海南','2000-01-01'),(6,'6','虹猫','男',18,'123456789012345678','上海','2000-01-01'),(7,'7','蓝兔','女',18,'123456789012345678','上海','2000-01-01'),(8,'8','石昊','男',20,'123456789012345678','北京','2000-01-01'),(9,'9','荒','男',20,'123456789012345678','北京','2000-01-01'),(10,'10','冰帝蟹','女',20,'123456789012345678','北京','2000-01-01'),(11,'11','韩立','男',20,'123456789012345678','天津','2000-01-01'),(12,'12','冯宝宝','女',200,'123456789012345678','四川','2000-01-01'),(13,'13','张楚岚','男',20,'123456789012345678','河北','2000-01-01'),(14,'14','徐三','男',20,null,'长沙','2000-01-01');select * from empployee;-- 查询基本要求-- 基本查询
-- 1.查询指定字段 name,worknc,age 返回
select name,worknc,age from empployee;-- 2.查询所有字段返回
select id, worknc, name, genger, age, idcars, workaddress, entrydate from empployee;
# 尽量不要这样写,不要写 *
select * from empployee;-- 3.查询所有员工的工作地址,起别名
select workaddress from empployee;
select workaddress as '工作地址' from empployee;
select workaddress '工作地址' from empployee;-- 4.查询所有员工的上班地址(不要重复)
select distinct workaddress from empployee;

2、DQL - 条件查询

案例:
-- 条件查询
-- 1.查询年龄等于 88 的员工
select * from empployee where age = 88;-- 2.查询年龄小于 20 的员工信息
select * from empployee where age < 20;-- 3.查询年龄小于等于 20 的员工信息
select * from empployee where age <= 20;-- 4,查询没有身份证号的员工信息
select * from empployee where idcars is null;-- 5.查询有身份证号的员工信息
select * from empployee where not (idcars is null);
select * from empployee where idcars is not null;-- 6.查询年龄不等于 88 的员工信息
select * from empployee where age != 88;
select * from empployee where age <> 88;-- 7.查询年龄在 15岁(包含)到 20 岁(包含)之间的员工信息
select * from empployee where age >= 15 && age <= 20;
select * from empployee where age >= 15 and age <= 20;
-- between 最小值 and 最大值
select * from empployee where age between 15 and 20;-- 8.查询性别为 女 且年龄小于 25 岁的员工信息
select *from empployee where genger = '女' && age < 25;
select *from empployee where genger = '女' and age < 25;-- 9.查询年龄等于 18 或 20 或 40 的员工信息
select * from empployee where age = 18 || age = 20 || age = 40;
select * from empployee where age = 18 or age = 20 or age = 40;
select * from empployee where age in(18,20,40);-- 10.查询姓名为两个字的员工信息
select * from empployee where name like '__';-- 11.查询身份证号最后一位是 X 的员工信息
select * from empployee where idcars like '%X';

3、DQL - 聚合函数

案例:
-- 聚合函数
-- 1.统计该企业员工数量
select count(*) from empployee;
select count(id) from empployee;-- 2.统计该企业员工的平均年龄
select avg(age) from empployee;-- 3.统计该企业员工的最大年龄
select max(age) from empployee;-- 4.统计该企业员工的最小年龄
select min(age) from empployee;-- 5.统计北京地区员工的年龄之和
select sum(age) from empployee where workaddress = '北京';

4、DQL - 分组查询

案例:
-- 分组查询
-- 1.根据性别分组,统计男性员工 和 女性员工的数量
select genger,count(*) from empployee group by genger;-- 2.根据性别分组,统计男性员工 和 女性员工的平均年龄
select genger,avg(age) from empployee group by genger;-- 3.查询年龄小于 45 的员工,并根据工作地址分组,获取员工数量大于等于 3 的工作地址
select workaddress, count(*) from empployee where age < 45 group by workaddress having count(*) >= 3;
select workaddress, count(*) address_count from empployee where age < 45 group by workaddress having address_count >= 3;

5、DQL - 排序查询

案例:
-- 排序查询
-- 1.根据年龄对公司的员工进行升序排序
-- 升序:从小到大
select name,age from empployee order by age asc;-- 2.根据入职时间,对员工进行降序排序
-- 降序:由大到小
select name,entrydate from empployee order by entrydate desc ;-- 3.根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
select name,age,entrydate from empployee order by age asc,entrydate desc ;

6、DQL- 分页查询

案例:
-- 分页查询
-- 1.查询第 1 页员工数据,每页展示 10 条记录
select * from empployee limit 0,10;
select * from empployee limit 10;-- 2.查询第 2 页员工数据,每页展示 10 条记录 ------> (页码 - 1)* 页展示记录数
select * from empployee limit 10,10;

7、案例

-- 1.查询年龄为 20,21,22,23岁的女性员工信息
select * from empployee where genger = '女' and age in(20,21,22,23);-- 2.查询性别为 男,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工
select * from empployee where (genger = '男') and (age between 20 and 40 ) and (name like '___');-- 3.统计员工表中,年龄小于 60 岁的,男性员工 和 女性员工的人数
select genger,count(*) from empployee where age < 60 group by genger;-- 4.查询所有年龄小于等于 35 岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序
select name,age,entrydate from empployee where age <= 35 order by age asc,entrydate desc;-- 5.查询性别为男,且年龄在 20-40 岁(含)以内的前 5 个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序
select * from empployee where (genger = '男') and (age between 20 and 40) order by age asc,entrydate asc limit 5;

8、DQL - 执行顺序

什么别名去验证

9、总结

2.6 DCL(数据控制语言)

作用:用来创建数据库用户、控制数据库的访问权限

DCL(Data Control Language)数据控制语言,用来管理数据库用户、控制数据库的访问权限。

1、DCL - 管理用户

2、DCL - 权限控制


 


三、函数

函数:是指一段可以直接被另一段程序调用的程序或代码。

3.1 字符串函数

-- concat 字符串连接
select concat('Hello',' MySQL');-- lower 把大写字符转成小写
select lower('Hello');-- upper 把小写字符转成大写
select upper('Hello');-- lpad str 左侧填充
select lpad('01',5,'-');
select lpad('01',3,'-');-- rpad str 右侧填充
select rpad('01',5,'-');-- trim 去除字符串前后空格
select trim(' Hello MySQL   ');-- substring 截取字符串
select substring('Hello MySQL',1,5);

3.2 数值函数

3.3 日期函数

3.4 流程函数

四、约束

五、多表查询

六、事务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/6596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java spring 09 Bean的销毁过程

1.Bean销毁是发送在Spring容器关闭过程中的 AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);UserService userService (UserService) context.getBean("userService");userService.test();// 容器关闭cont…

手撕spring框架(5)

手撕spring框架(5) 相关系列 手撕spring框架&#xff08;1&#xff09; 手撕spring框架&#xff08;2&#xff09; 手撕spring框架&#xff08;3&#xff09; 手撕spring框架&#xff08;4&#xff09; 这是本专题最后一节了&#xff0c;主要是讲述自定义一个注解&#xff0c;实…

14_Scala面向对象编程_属性

属性 1.类中属性声明 // 1.给Scala声明属性&#xff1b;var name :String "zhangsan"val age :Int 302.系统默认赋值 scala由于初始化变量必须赋值&#xff0c;为了解决此问题可以采用下划线赋值&#xff0c;表示系统默认赋值 , –但是此方法局限于变量&…

太阳能光伏光热综合利用(PVT)

PVT系统介绍 传统太阳能系统是太阳光直接加热水&#xff0c;效率高&#xff0c;但是需要有防冻措施&#xff0c;且在太阳光不充足时需要增加电辅热&#xff0c;受天气影响大&#xff0c;且电加热能耗高。传统发电是将直流电转化为交流电&#xff0c;再提供给用户使用。此PVT技…

特斯拉全自动驾驶系统Tesla‘s Full-Self Driving (FSD)

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Overview Tesla’s FSD is a suite of features that includes Autopilot, Navigate on Autopilot, Auto Lane Change, Autopark, Summon, and Traffic Light and Stop Sig…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-12-蜂鸣器

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

力扣每日一题104:二叉树的最大深度

题目 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,null,2…

C#中.net8WebApi加密解密

尤其在公网之中&#xff0c;数据的安全及其的重要&#xff0c;除过我们使用jwt之外&#xff0c;还可以对传送的数据进行加密&#xff0c;就算别人使用抓包工具&#xff0c;抓到数据&#xff0c;一时半会儿也解密不了数据&#xff0c;当然&#xff0c;加密也影响了效率&#xff…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-11.1,11.2-BSP文件目录组织

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Redis-三主三从高可用集群搭建

正式搭建之前&#xff0c;注意事项&#xff08;坑&#xff09;提前放到最开始&#xff0c;也可以出问题回来看&#xff0c; &#xff08;1&#xff09;第二步中最好将配置文件中的logfile自定义一个目录&#xff0c;以便于在第五步中启动出错的时候迅速定位错误。 &#xff0…

2024五一赛数学建模A题B题C题完整思路+数据代码+参考论文

A题 钢板最优切割路径问题 &#xff08;完整资料在文末获取&#xff09; 1. 建立坐标系和表示方法&#xff1a; 在建模之前&#xff0c;我们需要将切割布局转换为数学表示。首先&#xff0c;我们可以将布局中的每个点表示为二维坐标系中的一个点。例如&#xff0c;B1可以表示…

计算机毕业设计Python+Spark知识图谱高考志愿推荐系统 高考数据分析 高考可视化 高考大数据 大数据毕业设计

毕业设计&#xff08;论文&#xff09;任务书 毕业设计&#xff08;论文&#xff09;题目&#xff1a; 基于大数据的高考志愿推荐系统 设计&#xff08;论文&#xff09;的主要内容与要求&#xff1a; 主要内容&#xff1a; 高…

OpenCV如何为我们的应用程序添加跟踪栏(71)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV的周期性噪声去除滤波器(70) 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 在前面的教程中&#xff08;关于使用 OpenCV 添加&#xff08;混合&#xff09;两个图像和…

【Leetcode每日一题】 综合练习 - 全排列 II(难度⭐⭐)(71)

1. 题目解析 题目链接&#xff1a;47. 全排列 II 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路梳理 为了生成给定数组nums的全排列&#xff0c;同时避免由于重复元素导致的重复排列&#xff0c;我们可以遵…

关于YOLO8学习(五)安卓部署ncnn模型--视频检测

前文 关于YOLO8学习(一)环境搭建,官方检测模型部署到手机 关于YOLO8学习(二)数据集收集,处理 关于YOLO8学习(三)训练自定义的数据集 关于YOLO8学习(四)模型转换为ncnn 简介 本文将会讲解: (1)使用前文生成的ncnn模型,部署到安卓端,并且实现视频中,人脸的检测…

02_Java综述

目录 面向对象编程两种范式抽象OOP 三原则封装继承多态多态、封装与继承协同工作 面向对象编程 面向对象编程(Object-Oriented Programming&#xff0c;OOP)在Java中核心地位。几乎所有的Java程序至少在某种程度上都是面向对象的。OOP与java是密不可分的。下面说一下OOP的理论…

【Java探索之旅】内部类 静态、实例、局部、匿名内部类全面解析

文章目录 &#x1f4d1;前言一、内部类1.1 概念1.2 静态内部类1.3 实例内部类1.4 局部内部类1.5 匿名内部类 &#x1f324;️全篇总结 &#x1f4d1;前言 在Java编程中&#xff0c;内部类是一种强大的特性&#xff0c;允许在一个类的内部定义另一个类&#xff0c;从而实现更好的…

SFOS1:开发环境搭建

一、简介 最近在学习sailfish os的应用开发&#xff0c;主要内容是QmlPython。所以&#xff0c;在开发之前需要对开发环境&#xff08;virtualBox官方SDKcmake编译器python&#xff09;进行搭建。值得注意的是&#xff0c;我的开发环境是ubuntu22.04。如果是windows可能大同小异…

Docker-Compose编排LNMP并部署WordPress

前言 随着云计算和容器化技术的快速发展&#xff0c;使用 Docker Compose 编排 LNMP 环境已经成为快速部署 Web 应用程序的一种流行方式。LNMP 环境由 Linux、Nginx、MySQL 和 PHP 组成&#xff0c;为运行 Web 应用提供了稳定的基础。本文将介绍如何通过 Docker Compose 编排 …

Pytorch: nn.Embedding

文章目录 1. 本质2. 用Embedding产生一个10 x 5 的随机词典3. 用这个词典编码两个简单单词4. Embedding的词典是可以学习的5. 例子完整代码 1. 本质 P y t o r c h \mathrm{Pytorch} Pytorch 的 E m b e d d i n g \mathrm{Embedding} Embedding 模块是一个简单的查找表&#…