D最近总感觉自己的知识太琐碎,有时候回顾的时候也感觉有点凌乱,所以决定把自己学的知识笼统的整合一下,先从非关系型的MySQL数据库开始,后面会系统的整理别的后端开发的技术,同时也为下一年的面试做一下准备。
Tips: 仅供个人观看,菜鸡误喷。
学习之前,我们先明确数据库的相关概念,包括DBMS, DB, SQL,
关系型数据库:以表结构存储数据
DBMS: 数据库管理系统,本质是一个软件,帮助我们管理数据库
DB:数据库
SQL:一条语句,通过sql可以查询数据库,得到我们想要的表信息。
MySQL的下载(Windows)
Https://dev.mysql.com/downloads/mysql/
下载对应版本的.msi文件,无脑next就行, 应该不难,网上也有对应教程。
MySQL开机自启
启动MySQL
net start mysql80
关闭MySQL
net stop mysql80
对于客户端连接的话
我们既可以找到MySQL Command Line Client进行启动,输入密码,然后连接。
也可以输入mysql -u root -p 输入密码连接, 最后配置环境遍历,就是你MySQL-bin的地址。
注意:测试你cmd可以采用管理员模式运行
SQL语句
1. DDL
1.1数据库操作
/*
MySQL忽略大小写
文中 name 是数据库名
*/
#查询所有数据库
show databases;
#查询当前数据库
show database();
#创建一个数据库
/*
charset 编码
collate 默认排序
*/
create database if not exists name default charset utf8mb4 collate utf8_unicode_ci
#删除一个数据库
drop database if exists name
#使用数据库
use name
1.2表操作(创建和查询)
#创建一个用户表
create TABLE t_user(
id int COMMENT "用户Id",
username VARCHAR(40) DEFAULT NULL COMMENT "用户名",
passwords VARCHAR(40) COMMENT "密码"
)COMMENT"用户表"
#注意:此时默认ENGINE = InnoDB;
#查看表
show tables;
#查询表结构,就是查看所有内容
DESC 表名;
#查询指定建表语句
show create table 表名;
1.3数据类型
数值类型
字符串类型
日期类型
知识补充:not null 和 default
首先明确not null 和 default是两个独立的约束,not null指定的是这条数据非空,也就是insert into t_user value("张三", null)/姓名和年龄,如果定义了not null,那么这个插入就会报错,但是空字符串null不一样,也就是insert into t_user value("张三", “”)是成立的。default是指定一个默认值,前提是未传入参数insert into t_user value("张三")这时的默认defaut就会生效
1.4表操作(修改和删除)
#添加字段
alter table 表名 字段名 类型(长度) comment 注释 [约束]
#给emp表增加一个新的字段昵称为nickname,类型为varchar(20)
alter table emp add nickname varchar(20) comment "昵称";
#修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
#修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) 注释;
#test
alter emp change nickname username varchar(30) comment “用户名字;
#删除字段
alter table 表名 drop 字段名;
#test
alter table emp drop username;
#修改表名
alter table 表名 rename to 新表名;
#删除表名
drop table if exists 表名;
2. DML
注意1:插入数据时要注意字符串和日期需要加引号,数据长度不能超规定,且属性要一一对应。
插入数据
#插入数据
insert into 表名(字段1, 字段2) values(属性1, 属性2);
insert into 表名 values(属性1, 属性2);
insert into 表名 values(属性1, 属性2),(属性3, 属性4),(属性5, 属性6);
修改数据/删除数据
#修改数据
update 表名 set 字段名1 = 值1, 字段名2 = 值2 [where语句的条件]
#删除数据
delete from 表名 where 条件
3.DQL
3.1基础查询
#插入
select 字段1, 字段2 from 表名
select 字段1 as 别名1, 字段2 as 别名2 from 表明
//去重
select distinct from 表名
#test
select name workno age from table_test
select * from table_test
selct address as useradderss from table_test
思想有问题了.. 应该是 select address as "家庭住址" from table_test
或者 select address "家庭住址" from table_test
select distinct from table_test
3.2条件查询
图1
#1
select * from emp where age = 88;
#2
select * from emp where age < 20;
#3
select * from emp where age <= 20;
#4
select * from emp where idcard is NULL;
#5
select * from emp where idcard is NOT NULL;
#6
select * from emp where age != 88;
#7
select * from emp where age >= 15 && age <= 20;
selct * from emp where age between 15 andd 20;
#8
selct * from emp where sex = '女' and age < 25
#9
select * from emp where age In(18, 20, 40);
#10
selct * from where name like "__";
#11查询身份证最后一位是x的员工信息
select * from emp where idCard like "%x";
3.3聚合函数
数据库表如图1
注意:所有的null值不参与聚合函数运算
#统计该企业员工数量
select count(*) from emp;
#统计企业员工平均年龄
select avg(age) from emp;
#统计企业最大年龄
select max(age) from emp;
3.4分组查询
where和having
where再分组之前过滤,不满足where的不参与分组,分组后having过滤
where不能对聚合函数判断,而having可以
where > 聚合 > having
分组之后,查询的字段一般是聚合函数和分组字段,其他的也没什么意义
#男女性别分类,并统计
select gender, count(*) from emp group by gender;
#根据性别分组,统计男性员工和女性员工的平均年龄
select gender avg(age) from emp group by gender;
#查询年龄少于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select address, count(*) where age < 45 group by address having count(*) >= 3
3.5排序查询
select 字段列表 from 表名 order by 字段1 字段2
ASC 升序
DESC 降序
#根据年龄对公司员工进行升序排序,年龄相同按照入职时间进行降序排序
select * from emp order by age asc, entrydata desc;
3.6分页查询
开始索引从0开始,起始 = (查询页码 - 1) * 每页显示记录数
#1
select * from emp where gender = "女" and age in (20, 21, 22, 23)
#2
select * from emp where username like ("___") and age between 20 and 40 and sex = "男"
#3
select gender count(*) from emp where age < 60 group by gender
#4
select username, age from emp where <= 35 order by age asc entrydata desc;
#5
select * from emp where gender = "男" and age between 20 and 40 order by age asc entrydata desc limit 0, 5
总结执行顺序
4DCL