MySQL
2024-06-07 16:29:26 5 举报
AI智能生成
MySQL语言
作者其他创作
大纲/内容
mysql入门
数据库介绍
简称
DataBase,DB
定义
存储数据的仓库,数据是有组织的进行存储。
作用
持久性的存储
为什么要学习数据库
数据库可结构化存储大量的数据信息,方便用户进行有效的检索和访问。
数据库可有效地保持数据信息的一致性、完整性、降低数据冗余。
数据库可满足应用的共享和安全方面的要求,把数据放在数据库中在很多情况下也是出于安全的考虑。
数据库技术能够方便智能化地分析,产生新的有用信息。
主流的关系型数据库管理系统
Oracle
大型的收费数据库,Oracle公司产品,价格昂贵。
MySQL
开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle又收购了Sun公司。 目前Oracle推出了收费版本的MySQL,也提供了免费的社区版本。
SQL Server
Microsoft 公司推出的收费的中型数据库,C#、.net等语言常用。
关系型数据库与非关系型数据库
关系型数据库
采用了关系模型来组织数据的数据库。简单来说,关系模式就是二维表格模型。
非关系型数据库
指那些非关系型的、分布式的,且一般不保证ACID的数据存储系统;以键值来存储,且结构不稳定
mysql简介
概述
MySQL 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密 结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支 持,由 MySQL 的初始开发人员 David Axmark 和 Michael Monty Widenius 于 1995 年建立的。
目前 MySQL 被广泛地应用在中小型网站中。由于其体积小、速度快、总体拥有 成本低,尤其是开放源码这一特点,使得很多公司都采用 MySQL 数据库以降低 成本。
MySQL 数据库可以称得上是目前运行速度最快的 SQL 语言数据库之一。除了 具有许多其他数据库所不具备的功能外,MySQL 数据库还是一种完全免费的产 品,用户可以直接通过网络下载 MySQL 数据库,而不必支付任何费用。
版本问题
社区版(MySQL Community Server)👉 免费,MySQL不提供任何技术支持。
商业版(MySQL Enterprise Edition) 👉 收费,可以试用30天,官方提供技术支持。
数据库
数据库
数据库基本操作
使用navicate图形化工具
创建数据库
删除数据库
切换当前数据库
使用SQL
删除数据库
drop database if exists 数据库名
创建数据库
create database 数据库名
显示所有数据库
show database
切换当前数据库
use 数据库名
数据表
基本操作
使用SQL
删除数据表
drop table if exists 表名
创建数据表
create table 表名(字段名表)
添加数据
语法
insert into 表名[(列名表)] values (值表)
查询表中的所有列和行
select * from tb_users;
数据表
数据模型
关系型数据库(RDBMS)
概念
建立在关系模型基础上,由多张相互连接的二维表组成的数据库
特点
使用表存储数据,格式统一,便于维护
使用SQL语言操作,标准统一,使用方便
数据库系统
DBA数据库管理员,DBMS数据库管理系统,数据库DB,软件,硬件组合而成
DBA利用了SQL语言借助了DBMS数据库管理系统的操作平台来创建的各种需求的数据库DB
我们可以通过MySQL客户端连接数据库管理系统DBMS,然后通过DBMS操作数据库。
可以使用SQL语句,通过数据库管理系统操作数据库,以及操作数据库中的表结构及数据。
一个数据库服务器中可以创建多个数据库,一个数据库中也可以包含多张表,而一张表中又可以包 含多行记录
SQL介绍
概述
全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
SQL通用语法
SQL语句可以单行或多行书写,以分号结尾
SQL语句可以使用空格/缩进来增强语句的可读性。
MySQL数据库的SQL语句不区分大小写,关键字建议用大写。
注释:单行注释:-- 注释内容 或 # 注释内容 多行注释:/* 注释内容 */
SQL分类
DDL
全称
Data Definition Language
说明
数据定义语言,用来定义数据库对象(数据库,表,字段)
DML
全称
Data Manipulation Language
说明
数据操作语言,用来对数据表中的数据进行增删改
DQL
全称
Data Query Language
说明
数据查询语言,用来查询数据库中表的记录
DCL
全称
Data Control Language
说明
数据控制语言,用来创建数据库用户、控制数据库的访问权限
数据类型
Java的数据类型
基本类型
整数
byte short int long
小数
float double
单字符
char
布尔值
boolean
引用类型:数不清
类
string
数组
接口
MySQL支持多种类型,常见及使用分为三类:数值、日期/时间和字符串(字符)类型,除此之外还有其他类型
整数类型
TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT
浮点类型
FLOAT、DOUBLE
丁点数类型
DECIMAL
位类型
BIT
日期时间类型
YEAR、TIME、DATE、DATETIME、EIMESTAMP
文本字符串类型
CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
枚举类型
ENUM
集合类型
SET
二进制字符串类型
BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
JSON类型
JSON对象、JSON数组
空间数据类型
单值类型
GEOMETRY、POINT、LINESTRING、POLYGON;
集合类型
MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION
字符类型
mysql
定义一个字符串 存储性别
字节 一个中文-2个字节
char(2)-----男
varchar(8)---男
char:固定长度;
varchar:可变长度;
text:长文本
blob:二进制的,可以存储图片或者声音文件。但在实际中一般不会直接把图 片存储到数据库里面,因为数据库扛不起那么大的内存压力,会用专用的图片存 储服务器存储图片。
数值类型
int:整型,对应 java里面的 int/Integer;
bigint:长整型,对应 java里面的 BigInteger/Long;
float:小数,单精度。单精度小数部分只能精确到后面6位,加上小数点前的一 位,即有效数字为7位。
优点: float单精度在一些处理器上比double双精度更快而且只占用double 双精度一半的空间。
缺点: 但是当值很大或很小的时候,它将变得不精确。
double:小数,双精度。双精度小数部分能精确到小数点后的15位,加上小数 点前的一位 有效位数为16位。
优点: double 跟 float比较, 必然是 double 精度高,尾数可以有 16 位,而 float 尾数精度只有 7 位。
- - 缺点: double 双精度是消耗内存的,并且是 float 单精度的两倍! ,double 的 运算速度比 float 慢得多, 因为double 尾数比float 的尾数多, 所以计算起 来必然是有开销的。
-
-
decimal:小数,一般用来存储与货币相关的数据,对应的java类 型: java.math.BigDecimal;
日期类型
date:年月日,对应java里面的:yyyy-MM-dd格式;
time:时分秒,对应java里面的:HH:mm:ss格式;
datetime:年月日时分秒,对应yyyy-MM-dd HH:mm:ss格式;
timestamp:时间戳从1970-1-1开始计算到现在的总毫秒数,就是java里面的 格林尼治时间;
标识列及约束
主键约束(primary key)
作用
- 主键是能确定一条记录的唯一标识,主键字段必须唯一,必须非空,一个 表中只能有一个主键,但是一个主键可以由多个字段组成。
虽然现实主键1、主键2,其实是由两个列组成的一个主键。在设置的时候 主键1必须是一个key,主键2无所谓。
默认值约束(default)
作用
字段设置默认值,可以不用手动插入值。
日期案例
- adddate timestamp default current_timestamp;👉 current_timestamp 是当前系统时间的意思。
- adddate timestamp default current_timestamp;👉 current_timestamp 是当前系统时间的意思。
非空约束(not null)
作用
字段的值不能为空
唯一约束(unique)
作用
字段的值必须唯一。
检查约束(check)
作用
通过表达式约束字段的值。
标识列(auto_increment)
作用
实现字段的自动增长,可以不用手动插入值。
特点
一个表中最多只能有一个标识列;
标识列的类型必须是数值类型(int/float/double),一般 int类型用的比较 多;
标识列必须是一个key/键,比如:主键、唯一约束等。一般用于主键比较 多;
DML
创建外键约束
外键约束(foreign key...references)
作用
在 MySQL 中,外键(Foreign Key)是一种用于建立表与表之间关联关 系的约束。通过外键,可以在一个表中引用另一个表的主键或唯一键,从而实现 数据的关联和一致性。
- 至少涉及到两张表:主表和从表。以及两个键:主键和外键。
主外键的主键不一定是主表上的主键,但它必须是主表上唯一且非空的列。
语法
foreign key(从表字段名) ceferences 主表名(主表字段名)
数据的导入导出
数据导出
整个数据库转储SQL文件(结构和数据)
单张数据表转储SQL文件(结构和数据)
单张数据表导出为 excel表格
数据导入
运行sql文件;
导入excel表格。
SQL中的运算符
Java中的运算符:
算术:+ - * / % ++ --
赋值= += -= *= /= %=
关系> >= < <= == !=
逻辑! && ||
关系运算符
=:等于;
>:大于;
<:小于;
>=:大于或等于
<=:小于或等于;
<>:不等于; a<>1 a!=1
!:非;
!=:不等于;
逻辑运算符&其它运算符
and/&&:并且;
or/||:或者;
not/!:非;
in(...):在某个范围内; check(sex in(’男‘,’女‘))
- not in:不在某个范围内;
is null:字段值是null(系统默认null,手写null无法识别); tfsj is null is not null
is not null:字段值不是null(系统默认null,手写null无法识 别);
between...and:在某个范围之内(含最小、最大值);
DML-INSERT(数据插入)
功能
insert语句可以实现向表中添加新纪录的操作,该语句可以向表中插入一条新纪录或者插入一个结果集。
语法格式
默认插入
insert into tb_数据表名称 values(数据1,数据2,.......);
对应插入
insert into tb_数据表名称(列名1,列名2,......) values(数据1,数据2,.......);
多行插入1
insert into tb_数据表名称(列名1,列名2,......) values(数据1,数据2,......),(数据1,数据2,......),......(数据1,数据2,......);
多行插入2
insert into tb_数据表名称(列名1,列名2,......) select 列名 from 表名;
注意事项
- 如果该表上主键被设置为标识列,则插入数据时,该字段必须省略,否则报错;因为标识列不可手动维护。
如果向表中添加所有的字段,可以省略要插入的数据的列名。insert into tb_student values ( '翠花' , '女' , 21 , '湖南省株洲市' , '13317845678' , '2000-07-09' , '281');
如果想表中添加所有的字段,value后面的值不能缺省。
DML-DELETE(删除)
功能
数据的删除将删除表的部分或全部记录,删除时可以指定删除条件从而删除一条或多条记录。
如果不指定删除条件,**delete**语句将删除表中全部的记录,清空数据表。
语法
删除所有数据
delete from tb_表名
条件删除数据
delete from tb_表名 where 某属性='某值';
注意:from关键词可省略
DML-UPDATE(修改)
语法
修改表中所有行
update tb_表名 set 某属性 = '修改后的新值';
按指定条件进行修改数据
update tb_表名 set 某属性 = '修改后的新值' where 某属性 = '某值'; update tb_表名 set 某属性 = '修改后的新值', 某属性 = '修改后的新值', 某属性 = '修改后的新值', 某属性 = '修改后的新值' where 某属性 = '某值';
DQL
DQL
基础查询语句(select)
语法
select 字段1,字段2,字段3,...,字段n from tb_表名;
如需查询所有字段使用*代替所有字段
select * from tb_表名;
字段别名语法
select 字段 as '别名' from tb_表名;
select 字段 '别名' from tb_表名;
select '别名' = 字段 from tb_表名;
MySQL5.7语法不支持
条件查询
运算符:>(大于) <(小于) >=(大于或等于) <=(小于或等于) =(等于) (!=、<>)不等于
语法
select * from tb_表名 where 某属性 = '某值';
between...and 在...之间
select * from tb_表名 where 某属性 between 某值 and 某值;
模糊查询
模糊查询一般于通配符结合使用 #_ 代表一个字符[任意的] #% 代表任意字符[1个字符以上]
语法
select * from tb_表名 where 某属性 like '%关键词';
排序查询
# 升序[asc],默认 降序[dasc]
语法
select * from tb_表名 order by 属性 asc;
top查询(MySQL5.7语法不支持)
语法
select * top 3 * from tb_表名;
去除查询
语法
select distinct(字段) from tb_表名;
分页查询
limit的使用
limit作用1:取前N条数据
limit:限制、限量、边界;
语法
select * from 表名 limit 数值;
limit作用2:分页查询
定义
**什么是分页,就是查询时候数据量太大,一次性返回所有查询结果既耗费网络资源、又降低了查询效率,用户也不可能一下子看完成千上万条数据。所以分页的技术就应运而生。分页可以只显示指定数量的数据。**
语法
select * from 表名 limit a,b;
a
代表每页开始条数的上一条数据;
b
代表页大小(每业最多展示的数据量)
字符串函数
concat(s1,s2,...,sn)-->字符串拼接,将s1,s2,...,sn拼接成一个字符串
lower(str)-->将字符串str全部转为小写
upper(str)-->将字符串str全部转为大写
lpad(str,n,pad)-->左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
rpad(str,n,pad)-->右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
trim(str)-->去掉字符串头部和尾部的空格
substring(str,start,len)-->返回字符串str从start位置起len个长度的字符串
uuid()-->数字+字母+四个横杠组成的一个36位的一个随机字符串.
replace(str,str1,str2)-->替换字符串
length()-->获取字节的个数(MySQL)默认编码是utf8,每个汉字占三个字节
char_length-->获取字符的个数
数值函数
ceil(x)向上取整
floor(x)向下取整
mod(x,y)返回x/y的模
rand()返回0,1内的随机数
round(x,y)求参数x的四舍五入的值,保留y微笑
日期函数
current_Date() -->返回当前日期
current_time() -->返回当前时间
now() -->返回当前日期和时间
sysdate() -->返回当前日期和时间
year(date) -->获取指定date的年份
month(date) -->获取指定date的月份
day(date) -->获取指定date的日期
高级查询
聚合函数
概述
将一列数据作为一个整体,进行纵向计算。
常见的聚合函数
count
统计数量
max
最大值
min
最小值
avg
平均值
sum
求和
语法结构
select 聚合函数(字段列表) from 表名;
NULL值是不参与所有聚合函数运算的
分组查询
语法
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
where与having区别
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
DQL执行顺序
FROM 表名列表--> WHERE 条件列表--> GROUP BY 分组字段列表 HAVING 分组后条件列表--> SELECT 字段列表--> ORDER BY 排序字段列表--> LIMIT 分页参数
连接查询
内连接
相当于查询A、B交集部分数据
内连接查询的是两张表交集部分的数据
内连接的语法分为两种
隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 条件...;
显示内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件 ...;
外连接
分类
左外连接
查询左表所有数据,以及两张表交集部分数据
语法
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...;
右外连接
查询右表所有数据,以及两张表交集部分数据
语法
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
全外连接
MySQL废除了
自连接
当前表与自身的连接查询,自连接必须使用表别名
高级子查询
概述
SQL语句中嵌套SELECT语句,称为嵌套查询,又称为子查询。
语法
SELECT * FROM t1 WHERE column1 = (SELECT columnl FROM t2)
位置
子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT的任何一个。
分类
根据子查询结果不同,分为
标量子查询(子查询结果为单个值)
列子查询(子查询结果为一列)
行子查询(子查询结果为一行)
表子查询(子查询结果为多行多列)
根据子查询位置,分为
WHERE之后
FROM之后
SELECT之后
子查询的使用
标量子查询
子查询返回的结果是单个值(数字、字符串、日期等);最简单的形式,这种子查询称为标量子查询
常用的操作符
= <> > >= < <=
列子查询
子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。
常用的操作符
IN
在指定的集合范围之内,多选一
NOT IN
不在指定集合范围之内
ANY
子查询返回列表中,有任何一个满足即可
SOME
与ANY等同,使用SOME的地方都可以使用ANY
ALL
子查询返回列表的所有值必须满足
行子查询
子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
常用的操作符
=、<>、IN、NOT IN
表子查询
子查询返回的结果是多行多列,这种子查询称为表子查询。
常用操作符
IN
0 条评论
下一页