MySQL数据库核心操作解析
mysql数据库
数据库--->服务器
核心功能是用来存储数据的
List、Dictionary集合--->对象是存储在内存当中当程序停止或者服务停止是存储在内存当中的数据就消失了,对于一些重要的数据(用户)是需要永久保存的,数据是存储在文件中,而文件是存储在硬盘上。
数据库本质上是一个文件系统,首先需要先创建一个数据库(database),创建的数据库是一个文件夹,在数据库中创建的表是一个文件
MY我的
SQL-->Struct Query Language 结构化 查询 语言
对于数据库来说,我们可以分类:
(根据数据库中存储的数据是否按照二维表行列存储),我们可以把数据库简单的分为:关系型数据库和非关系型数据库。
MYSQL他属于关系型数据库
根据sql的功能不同,我们可以大致的分为四类:
DDL:Data Definition Language 数据定义语言,主要是用来操作数据库和表 关键字:ceate alter drop
DML:DAta Manipulation Language数据操作语言,主要是用于进行对表增、删、改操作 关键字:insert delete update
DCL:Data Control Language数据控制语言,主要是用于对数据库的的用户权限和安全级别进行设置控制。
DQL:Data Query Language数据查询语言,主要用于对数据库中的表进行查询操作。关键字:select from where
数据库操作
用户:root----超管 超级管理员
用户:admin----管理员 具有普通权限
--创建数据库:create database 数据库名称; create database class1; --创建数据库指定编码字符集 create database数据库名称character set编码字符集; --查看数据库 show create database 数据库名称; --删除数据库 drop database数据库名称; --查看当前服务器下创建的所有的数据库 show databases; --使用数据库 use数据库名称; --查看操作的数据库 select database();
表的操作
表中的数据类型
整数类型:可以存放整数值,一般用int类型
小数类型:可以存储小数值,一般用double类型
日期类型:可以存储日期类型,一般用datetime类型
文本二进制类型:可以存储字符串和字节数据,一般用varchar类
常用约束
约束就是对表中的数据进行操作的一种限制,一般是为了保证数据的一种安全。
主键约束:唯一性,非空性 添加关键字:primary key
唯一约束:唯一性,可以为空,但只能有一个 添加关键字:unique
默认约束:给字段添加默认值,如果给表中的字段赋值时没有赋值,就会使用你自己设置的默认值赋值 添加关键字:default
自增长:类型一般都是整数类型,一般用于主键自动增长
非空约束:数据不能为空,添加关键字:not null
--创建表 creat table 表名( 字段名 类型(长度)[约束], 字段名 类型(长度)[约束], 。。。 ) --创建学生表 create table student(id int(15) primary key,sname varchar(20),age int(3),address varchar(30) ); --查看当前数据库中的表 show tables; --查看表结构 desc 表名 --删除表 drop table 表名; drop table user; --修改表 --1.添加1列 alter table 表名 add 字段名 类型(长度)[约束]; --2.修改列的类型(长度,类型) ---alter table 表名 modify 要修改的字段名 类型(长度)[约束]; alter table student modify id varchar(15); --3.修改列的列名 --alter table 表名 chang 旧列名 新列名 类型(长度)[约束]; alter table student change sname username varchar(20); --4.删除表中的列 alter table 表名 drop 列名; alter table student drop sex; --5.修改表名 rname table 旧表名 to 新表名; rname table student to stuTable; --6.修改表的字符集 alter table 表名 character set 编码字符集; alter table student charcter set gbk; --7.查看当前创建的表结构 show create table 表名;
数据库中的记录(数据)的操作
增删改查
--1.插入记录 --insert into 表名(列名1,列名2....)values(值1,值2,值3...); --第二种写法:insert into表名 values(值1,值2,值3,...); insert into stutable(id,username) values(3,'李四'); insert into stutable values(2,'张三',20,'河南省'); --2.修改表记录带有条件 --update 表名 set 字段名1=值1,字段名2=值2,....where 条件 update stutable set age = 22,address = '传说'where id = 3; --3.删除表记录带条件 --delete from 表名 where 条件 delete from stutable where id = 1; --4.删除表记录不带条件---->删除表中所有数据 --delete from 表名 ;或者 truncata table 表名; --truncate table 表名;会自动删除自增的序列 --delete from 表名;不会删除之前的自增序列 --5.查询操作 --查询所有 select * from 表名; select * from stutable; --查询指定列信息 select 列名1,列名2,....from表名; select username,address from stutable; --查询所有信息使用表的别名 select * from 表名 as 别名; select * from stutable as s; --查询列信息使用列别名 select 字段名 as 别名 from 表名; select username as '姓名',age as '年龄',address as '地址' from stutable as s; --查询去掉重复select distinct(字段) from 表名; select distinct(username) from stutable; --将所有的学生的年龄+5进行显示 select id,username,age+5,address from stutable;
条件查询
--查询学生表中地址为浙江省的学生信息 select * from stutable where address = '浙江省'; --查询年龄大于20岁的学生信息 select * from stutable where sge > 20; --查询姓名中包含“小”的学生信息 模糊查询 select * from stutable where username like '%小%'; select * from stutable where username like "%" '小' "%"; --查询年龄在(22,24,26)范围的学生信息 select * from stutable where age in(22,24,26); --查询年龄在(18,22)之间的所有学生信息 select * from stutable where age between 18 and 22; --查询学生名称带有三并且id为(6,10)之间的学生信息 select * from stutable where username like '%三%'and id between 6 and 10; --查询id为5或者为6的学生信息 select * from stutable where id = 5 or id = 6; --按照Id进行降序排序 select * from stutable order by id desc; --按照年龄进行降序排序展示 select * from stutable order by age desc; --按照年龄进行升序排序展示 select * from stutable order by age asc; --查询地址中带有河的并且按照年龄进行降序排序 select * from stutable where address like '%河%' order by age desc;
聚合函数查询
--查询学生表中所有学生的年龄总和为多少?select sum(age) as 年龄总和 from stutable;--查询学生年龄平均值select avg(age) as 平均年龄 from stytable;-- 查询学生表中学生的个数select count(id) as 总数量 from stutable;
分组操作
group by
--根据地址字段分组,分组后添加学生的个数 select address,count(id) from stutable group by address; --根据地址字段分组,分组后统计学生的评价年龄,并且平均年龄大于20的信息 select address,avg(age) as avgAge from stutable group by address having avgAge > 20;
分页操作
--select * from stutable limit a,b --其中a代表的是从第几条记录开始查询,b代表的是查询多少条记录 --如果a是5,那么记录的条数是从第六条开始 --当显示的内容小于b的时候,sql不会发生错误,会正常显示剩余的所有的条数记录 --从第四条开始,查询15条记录 select * from stutable limit 3,15;
单表查询总结
select 一般后面的内容都是要查询的字段 * ----->查询所有字段,如果查询指定字段,写上指定字段,如果有多个字段中间用逗号隔开
from 后面跟的是表名
where后面跟的是条件 Id=1 username ‘%小%’
group by 后面的是依据什么字段进行分组 分组统计总数
having 分组后如果带有条件不能使用where只能用having带条件
order by 后面跟的是依据什么字段排序 放的位置一般在sql语句中最后面
多表查询
表与表关系:一对一,一对多,多对多
一对多:
部门表与员工表
在部门表中一个记录对应员工表中多个记录 通用做法:在多的那一方添加一的那一方的主键id,就可以实现一对多的关系
多对多:
一般在多对多的情况下我们选择去创建第三张表来处理存放表与表之间的关系
总结:
一、数据库基础
本质:文件系统,用于永久存储数据(数据库对应文件夹,表对应文件)。
类型:MySQL 属于关系型数据库(数据按二维表行列存储)。
SQL 分类
:
DDL(数据定义语言):操作数据库和表(
create
、alter
、drop
)。DML(数据操作语言):操作表中数据(增
insert
、删delete
、改update
)。DCL(数据控制语言):控制用户权限和安全级别。
DQL(数据查询语言):查询表中数据(
select
)。
二、数据库操作(DDL)
操作 | SQL 语法 |
---|---|
创建数据库 | create database 数据库名 [character set 编码]; |
查看数据库详情 | show create database 数据库名; |
删除数据库 | drop database 数据库名; |
查看所有数据库 | show databases; |
使用数据库 | use 数据库名; |
查看当前使用的数据库 | select database(); |
三、表操作(DDL)
1. 表中数据类型
整数:
int
(常用)。小数:
double
(常用)。日期:
datetime
(常用)。字符串:
varchar(长度)
(常用,存储可变长度字符串)。
2. 常用约束(限制数据规则)
约束 | 关键字 | 作用 |
---|---|---|
主键约束 | primary key | 唯一且非空(表中唯一标识) |
唯一约束 | unique | 数据唯一,可空(最多一个空值) |
默认约束 | default | 未赋值时使用默认值 |
自增长 | (配合整数) | 主键自动递增(无需手动插入值) |
非空约束 | not null | 数据不能为空 |
3. 表的核心操作
操作 | SQL 语法 |
---|---|
创建表 | create table 表名(字段名 类型(长度) [约束], ...); |
查看当前库所有表 | show tables; |
查看表结构 | desc 表名; 或 show create table 表名; |
删除表 | drop table 表名; |
修改表 - 添加列 | alter table 表名 add 字段名 类型(长度) [约束]; |
修改列类型 / 长度 | alter table 表名 modify 字段名 新类型(新长度) [约束]; |
修改列名 | alter table 表名 change 旧列名 新列名 类型(长度) [约束]; |
删除列 | alter table 表名 drop 字段名; |
修改表名 | rename table 旧表名 to 新表名; |
修改表字符集 | alter table 表名 character set 编码; |
四、表中数据操作(DML+DQL)
1. 插入数据(DML)
指定列插入:
insert into 表名(列1, 列2...) values(值1, 值2...);
全列插入:
insert into 表名 values(值1, 值2...);
(需与表结构顺序一致)。
2. 修改数据(DML)
带条件修改:
update 表名 set 字段1=值1, 字段2=值2... where 条件;
(若不带
where
,则修改表中所有数据)。
3. 删除数据(DML)
带条件删除:
delete from 表名 where 条件;
全表删除:
delete from 表名;
(保留自增序列) 或truncate table 表名;
(清空并重置自增序列)。
4. 查询数据(DQL)
基础查询:
全列:
select * from 表名;
指定列:
select 列1, 列2... from 表名;
别名:
select 列 as 别名, 表 as 表别名 from 表名;
去重:
select distinct(字段) from 表名;
计算:
select 字段+数值 from 表名;
(如年龄 + 5)。
条件查询(
where
子句):比较:
=
、>
、<
、>=
、<=
。模糊:
like '%字符%'
(包含)、like '字符%'
(开头)、like '%字符'
(结尾)。范围:
in(值1,值2...)
(在列表中)、between 最小值 and 最大值
(区间内)。逻辑:
and
(且)、or
(或)、not
(非)。
排序(
order by
):升序(默认):
order by 字段 asc;
降序:
order by 字段 desc;
聚合函数:
总和:
sum(字段)
平均值:
avg(字段)
计数:
count(字段)
(统计非空值数量)。
分组(
group by
):按字段分组统计:
select 分组字段, 聚合函数 from 表名 group by 分组字段;
分组后条件:
having 条件
(替代where
,用于分组后过滤)。
分页(
limit
):语法:
select ... from 表名 limit 起始索引, 查询条数;
(起始索引从 0 开始,若不足查询条数则显示剩余所有)。
五、多表关系
一对多(如部门表与员工表):在 “多” 的表中添加 “一” 的表的主键作为外键(如员工表加
dept_id
关联部门表id
)。多对多(如学生表与课程表):创建第三张中间表,存储两表的主键作为联合外键(如
student_course
表存student_id
和course_id
)。