一、初识数据库
JavaEE:企业级Java开发 Web
前端:(页面:展示,数据!)
后台:(连接点:连接数据库JDBC,连接前端【控制、控制视图跳转,给前端传数据】)
数据库:(存数据,txt/excel/word)
只会写代码,学好数据库,基本混饭吃 操作系统、数据结构与算法!不错的程序员 离散数学、数字电路、体系结构、编译原理、实战经验!优秀的程序员
1.1为什么学数据库
1.岗位需求(趋势)
2.现在大数据时代,得数据者的天下!
3.被迫营业:存数据 ===去IOE
4.数据库是所有软件体系中最核心的存在 ===DBA
1.2什么是数据库
DB:数据库,DataBase
概念:数据仓库,软件,安装在操作系统(Windows,Linux,macOS)之上!SQL可以存储大量数据,500万!
作用:存储数据,管理数据
1.3数据库分类
关系型数据库:(SQL)
-
MySQL、Oracle、SQLServer、DB2、SQLite
-
通过表和表之间,行和列之间的关系进行存储,学员信息表、考勤表······
非关系型数据库:(NoSQL=not only SQL)
-
Redis、MongDB
-
对象存储,通过对象自身的属性来决定
DBMS:数据库管理系统
-
数据库的管理软件,科学有效的管理数据,维护和获取数据
-
MySQL 数据库管理系统
1.4 MySQL简介
MySQL是一个关系型数据库管理系统
前世:瑞典MySQL AB公司
今生: Oracle旗下产品
MySQL是最好的 RDBMS(Relational Database Management System,关系数据库管理系统) 应用软件之一
开源的数据库软件
体积小、速度快、总体拥有成本低,招人成本低,所有人必须会
中小型网站、或者大型网站,集群!
官网: MySQL
1.5MySQL安装
官网下载地址:MySQL :: Download MySQL Community Server (Archived Versions)
安装建议:
1.尽量不要使用exe,注册表很麻烦
2.尽可能使用压缩包安装
安装教程:自己网上随便找就行,基本上都是下一步下一步。
-
解压
-
放自己环境下
-
配置环境变量
-
新建配置文件ini(my.ini)
-
编辑配置文件
[mysqld] basedir=自己环境下的目录 datadir=会自动生成 port=3306 skip-grant-tables
-
管理员模式cmd,切换到MySQLbin目录,运行mysqld -install
-
再输入mysqld --initialize-insecure --user=mysql 初始化数据文件(自动生成datadir)
-
然后再次启动Mysql 用mysql -u root -p进入mysql管理界面(密码可以空)
-
进入界面后更改root密码
update mysql.user set authentication_string=password('123456') where user='root' and Host='localhost';
-
输入flush privileges;刷新权限
-
修改my.ini文件,删除最后一行skip-grant-tables
-
重启MySQL
net stop mysql; net start mysql;
-
连接测试即可
如果服务安装错了可以清控服务:sc delete mysql
1.6可视化工具的安装
SQLyog
Navicat
自己安装就好了,很简单的。
二、基本的命令行操作
2.1连接数据库
mysql -u root -p Enter password: *********
2.2查看全部数据库
show databases;
2.3使用某个数据库
use dbName;
2.4查看全部表
show tables;
2.5查看表信息
describe dbName;
2.6创建数据库
create database dbName;
2.7退出链接
exit --SQL的单行注释 /* SQL的多行注释 */
三、操作数据库
操作数据库===>操作数据库中的表===>操作数据库中表数据
3.1操作数据库
如果表名或者字段名是特殊字符,加`就行了。
3.1.1创建数据库
create database [if not exists] dbName;
3.1.2删除数据库
drop database [if exists] dbName;
3.1.3使用数据库
use dbName;
3.1.4查询数据库
show databases;
3.2数据库的数据类型
3.2.1数值
名称 | 含义 | 字节数(Byte) |
---|---|---|
tinyint | 特小整数 | 1 |
smallint | 较小整数 | 2 |
mediumint | 中等大小整数 | 3 |
int | 标准整数 | 4 |
bigint | 较大整数 | 8 |
float | 单精度浮点数 | 4 |
double | 双精度浮点数 | 8 |
decimal | 字符串形式浮点数 | 金融计算用 |
3.2.2字符串
名称 | 含义 | 大小 |
---|---|---|
char | 固定大小字符串 | 0~2^8-1 |
varchar | 可变长字符串 | 0~2^16-1 |
tinytext | 微型文本 | 0~2^8-1 |
text | 文本 | 0~2^16-1 |
3.2.3时间和日期
名称 | 含义 | 格式 |
---|---|---|
date | 日期格式 | YYYY-MM-DD |
time | 时间格式 | HH:mm:ss |
datetime | 时间格式 | YYYY-MM-DD HH:mm:ss |
timestamp | 时间戳 | 1970.1.1到现在的毫秒数 |
year | 年份 | YYYY |
3.2.4null
空值,不要用null进行运算,如果用了,结果一定是null。
3.3数据库的字段属性
3.3.1Unsigned:
-
无符号的整数
-
不能声明为复数
3.3.2zerofill:
-
0填充
-
不足的位数用0填充===> int(3) 5--->005
3.3.3自增:
-
自动在上一条记录的基础上+1
-
通常用来作为主键,必须是整数类型
-
可以自定义设置主键的起始值
3.3.4非空:
-
如果设置NOT NULL,如果不赋值会报错
-
NULL,如果不填值,默认就是NULL
3.3.5默认值:
-
设置默认值
-
如果不指定该列值,则为默认值填充
3.4创建数据库表
3.4.1建表语句
create table [if not exists] `表名`( `字段名` 列类型 [属性] [索引] [注释], `字段名` 列类型 [属性] [索引] [注释], …… `字段名` 列类型 [属性] [索引] [注释] )[表类型] [字符集] [注释]
3.4.2常用命令
show create database dbName; --查看创建数据库的语句 show cretae table tbName; --查看创建表的语句 desc tbName; --显示表结构
3.4.3数据库引擎
InnoDB(默认使用)与MyISAM(早些年使用)
MyISAM | InnoDB | |
---|---|---|
事物支持 | N | Y |
数据行锁定 | N(表锁) | Y |
外键约束 | N | Y |
全文索引 | Y | N |
表空间大小 | 较小 | 较大,约MyISAM2倍 |
特点 | 节约空间,速度较快 | 安全性高,事务处理,多表多用户操作 |
物理存放位置 | .frm文件,.MYD文件和.MYI文件 | .frm文件和上级目录的ibdata1文件 |
3.5修改删除表
3.5.1修改
alter table dbName_old rename as dbName_new; --修改表名 alter table dbName add `字段名` 列类型 ; --增加字段 alter table dbName modify `字段名` 列类型 ; --修改(重定义)字段(修改约束) alter table dbName change `旧字段名` `新字段名` 列类型 ; --修改字段名(重命名) alter table dbName drop `字段名` ; --删除字段
3.5.2删除
drop table [if exists] dbName; --删除表
四、MySQL数据管理
4.1外键
1.在创建表时候,增加约束(太复杂,不会用到的)
2.修改表,添加外键(也不简单,很麻烦,也不用)
alter table `表名` add constraint `FK_外键字段名` foreign key(`外键字段名`) references `外表名`(`外键字段名`);
3.可视化界面操作
4.外键在程序级别处理
4.2DML语言
数据库意义:数据存储、数据管理
DML语言:数据库操作语言
-
insert
-
update
-
delete
4.3添加
insert into 表名([字段名1,字段名2,...,字段名n]) values('1值1','1值2',...,'1值n'),('2值1','2值2',...,'2值n'),...,('n值1','n值2',...,'n值n');
4.4修改
update 表名 set 字段名1=值1[,字段名2=值2,...,字段名n=值n] [where 条件];
where子句运算符:
操作符 | 含义 | 范围 | 结果 |
---|---|---|---|
= | 等于 | 5=6 | false |
<>或!= | 不等于 | 5<>6 | true |
> | 大于 | 5>6 | false |
< | 小于 | 5<6 | true |
>= | 大于等于 | 5>=6 | false |
<= | 小于等于 | 5<=6 | true |
between...and... | 介于 | 5 [2,5] | true |
and | 且 | 5>1 and 1>2 | false |
or | 或 | 5>1 or 1>2 | true |
not | 非 | 5 not 6 | true |
4.5删除
delete from 表名 [where 条件]; --删除数据(只删除数据)
truncate table 表名; --清空表(删了重建表)
delete删除的问题:重启数据库现象
-
InnoDB 自增列会从1开始(存在内存里,断电即失)
-
MyISAM 自增量会继续自增(存在文件中,不会丢失)
五、DQL查询数据
5.1DQL
Data Query Language:数据查询语言
-
所有的查询操作都用它 select
-
简单查询、复杂查询都能做
-
数据库中最核心的语言,最重要的语句
-
使用频率最高的语句
5.2指定查询字段
--查询表的所有数据 select * from 表名; --查询指定字段 select 字段1,字段2,...,字段n from 表名; --字段别名与表别名 select 字段 as 字段别名 from 表 as 表别名; --函数concat(a,b):连接两个字段的值 select concat(字段1,字段2) as 新字段名 from 表名; --去重 select distinct 字段 from 表名; --查询数据库版本 select version(); --计算 select 100*3-2 as 计算结果; --查询自增的步长 select @@auto_increment_increment; --加入计算表达式 select 字段+1 as 加一后 from 表名;
5.3where条件子句
官网文档中函数和操作:
MySQL :: MySQL 8.0 Reference Manual :: 12.1 Built-In Function and Operator Reference
模糊查询:比较运算符
运算符 | 语法 | 结果 |
---|---|---|
is null | a is null | a为空,则为true |
is not null | a is not null | a不为空,则为true |
between...and... | a between b and c | a介于b和c之间(包含b/c),则为真 |
like | a like b | SQL匹配,a匹配b成功,则为真 |
in | a in (a1,a2,...,a3) | a若在(a1,a2,...,a3)中,则为真 |
--查询姓刘的,'%'代表任意字符 select 字段名 from 表名 where 字段名 like '刘%'; --查询叫刘某的,'_'代表一个字符 select 字段名 from 表名 where 字段名 like '刘_'; --查询(1001,1002,1003)中的 select 字段名 from 表名 where 字段名 in (1001,1002,1003);
5.4连表查询(7种)
5.5排序和分页
--升序ASC,降序DESC select 字段名 from 表名 [where 条件] order by 字段名 ASC; --limit分页 limit start,size select 字段名 from 表名 [where 条件] limit start,size; --现在好多用瀑布
5.6子查询和嵌套查询
select 字段名 from 表名 [where 条件(select 字段名1 from 表名1)];
六、MySQL函数
官网资料:MySQL :: MySQL 8.0 Reference Manual :: 12.1 Built-In Function and Operator Reference
6.1常用函数
--数学运算符 select ABS(-8); --绝对值 8 select CEILING(9.4); --向上取整 10 select FLOOR(9.4); --向下取整 9 select RAND(); --随机数 0~1之间的随机数 0.5 select SIGN(-10); --判断一个数的符号 0返回0,负数返回-1,正数返回1
--字符串函数 select CHAR_LENGTH('今天是20211202对称日'); --字符串长度 select CONCAT('I','want','nothing!'); --拼接字符串 select INSERT('我爱编程很喜欢',1,3,'拉布拉多犬'); --从1开始删掉3个字符并插入'拉布拉多犬' select LOWER('ShangHai'); --转小写 select UPPER('nba'); --转大写 select INSTR('pandaboy','b'); --返回第一次出现的索引 select REPLACE('只有爱拼才会赢','只有','不一定是'); --替换出现的指定字符串 select SUBSTR('听说只有爱拼才会赢',3,5); --返回指定起始位置和长度的子串 select REVERSE('上海自来水来自浙江'); --反转字符串
--时间和日期函数 select CURRENT_DATE(); --获取当前日期 select CURDATE(); --获取当前日期 select NOW(); --获取当前时间 select LOCALTIME(); --本地时间 select SYSDATE(); --系统时间 select YEAR(NOW()); select MONTH(NOW()); select DAY(NOW()); select HOUR(NOW()); select MINUTE(NOW()); select SECOND(NOW());
--系统函数 select SYSTEM_USER(); select USER(); select VERSION();
6.2聚合函数
函数名称 | 描述 |
---|---|
COUNT() | 计数 |
SUM() | 求和 |
AVG() | 平均值 |
MAX() | 最大值 |
MIN() | 最小值 |
... | ... |
--关于count select count(列名) from 表名; --忽略所有null select count(*) from 表名; --不会忽略null,包括所有列 select count(1) from 表名; --不会忽略null,用1代表代码行
6.3分组过滤
select 字段名 from 表名 [where 条件] order by 字段名 [having 条件]; --order by 分组 --having 分组后的过滤
6.4数据库级别的MD5加密
什么是MD5?
主要是增强算法复杂度和不可逆性。
MD5不可逆,具体的值的md5是一样的
MD5破解网站的原理是:背后有一个字典,MD5加密前后对应
MD5(字段名/值); --sql中加密
七、事物
7.1什么是事物?
要么都成功,要么都失败。
未完......
感谢狂神提供的免费课程: