1.初识
前端(页面:展示,数据!)
后台(连接点:连接数据库JDBC,连接前端(控制,控制试图跳转,和给前端传递数据))
数据库(存数据,TxT,Excel,Word)
CRUD 增删改查
操作系统,数据结构与算法,离散数学,数字电路,体系结构,编译原理 + 实战经验。
数据库是所有软件体系中最核心的存在 DBA(DataBaseAdministrator)
DB 作用:存储数据, 管理数据
使用SQL语句运行, 可以存储大量数据, 一般不高于500万
DBMS (DataBase ManageSystem)
关系型数据库{SQL}, 非关系数据库{NoSQL, Not Only}
关系: e.g. excel, Oracle, Sql Server, DB2, SQLite 通过表和表之间,行和列之间的关系进行数据存储
非关系:Json Redis, MongDB 以对象存储, 通过对象的属性来决定
DBMS(数据库管理系统)
- 数据库管理软件
- 科学有效的管理我们的数据.维护和获取数据;
- MySQL
2.什么是MySQL?
MySQL是RDBMS.是最好的,开源的数据库软件, 体积小,速度快,成本低,所有人必须会
可以适用于中小型网站, 大型网站, 集群.
3.如何安装MySQL和SQLyog?
https://zhuanlan.zhihu.com/p/610793026
使用navicat代替SQLyog
3.1.新建一个数据库school
每一个navicat的执行操作,本质上对应了一个SQL, 可以在软件的历史记录中查看
3.2.新建一张表student
字段 name. id. age
3.3.查看一个表
3.4.自己增加或删除数据
4.连接数据库
命令行连接
mysql -u root -p **** --这是连接数据库的命令
update mysql.user set authentication_string=passw('123456') where user='root' and Host = 'localhost'; -- 修改用户密码
flush privileges; --刷新权限
------------------------------------------------------------
--所有语句以 ; 结尾
show databases; -- 查看所有数据库
mysql> use school -- 切换数据库 use 数据库名
Database changed
show tables; --查看数据库中所有的表
describe student; --现实数据库中所有的表的结构
create database westwood; --创建一个数据库
-- 单行注释
/**/ 多行注释
5.各种语言 CRUD 增删改查
DDL: Data Definition Lauguage
DML: Management
DQL: Query
DCL: Control
6.创建数据库 using sql
操作数据库->操作数据库中的表->操作数据库中表的数据=
== mysql关键字 不区分大小写==
6.1 操作数据库
1.创建 > CREATE DATABASE [IF not exists] iipa
2.删除 > DROP DATABASE [IF EXISTS] iipa
-> 如果你的表名或字段名是一个特殊字符, 就要加上 `` 这是为了避免关键词和名称冲突
3.使用 > USE SCHOOL > SELECT user FROM school
4.查看数据库 > SHOW DATABASE – 查看所有的数据库
然后对比Navicat的可视化操作
学习思路: 参考Navicat的历史记录
6.2 数据库的列类型
数值
- tinyint 十分小的数据 1个字节
- smallint 较小的数据 2个字节
- midiumint 中等大小的数据 3个字节
- int 标准整数 4个字节 [常用]
- bigint 较大数据 8个字节
- float 浮点数 4个字节
- double 浮点数 8个字节 (精度问题)
- decimal 字符串形式的浮点数 金融计算的时候, 一般是使用decimal
字符串
- char 字符串 固定大小的 0~255
- varchar 可变字符串 0~65535 [常用] <–>String
- tinytext 微型文本 2^8-1
- text 文本串 2^16-1 [保存大文本]
时间日期
java.util.Date
- data YYYY-MM-DD, 日期
- time HH:mm:ss 时间格式
- datetime YYYY-MM-DD HH:mm:ss [最常用]
- timestamp 时间戳 1970.1.1 到现在的毫秒数 [较为常用]
- year 年份表示
null
- 没有值, 未知
- 未知, 不要用它计算, 结果是null
6.3 数据库的字段属性(重点)
Unsigned
: 无符号整数 声明该列不能申明为负数
zerofill
: 0填充的 不足位数会使用0来填充
自增
: 通常理解为自增, 自动在上一条记录的基础上+1
通常用来设计唯一的主键~index, 必须是整型
可以自定义设计主键自增的起始值和步长
非空
: Null not null
假设设置为 not null, 如果不赋值就会报错
Null,如果不填写值,默认为null
默认
: 设置默认的值
扩展: 听听即可
6.4 创建数据库表
- 字符串使用 单引号 括起来
- 创建语句后加() 里面写字段等代码
- PRIMARY KEY 主键 一个表只有一个!
格式:
Create Table if not exists `student`(
`id` Int(4) Not Null auto_increment Comment 'Uid',
`name` Varchar(30) Not Null Default 'unname' Comment 'name',
`birthday` Datetime Default Null Comment 'birthday date',
Primary Key(`id`)
)Engine=Innodb Default CHARSET=utf8
--常用命令:
- SHOW CREATE DATABASE school -- 查看创建数据库的语句
- SHOW CREATE TABLE student -- 查看创建表的语句
- DESC student -- 显示表的结构
关于数据库引擎
- INNODB 默认使用
- MYISAM 早些年使用
常规使用操作: - MYISAM 节约空间 速度较快
- INNODB 安全性高 失误处理 多表多用户操作
在物理空间中存在的位置
所有数据库文件都存在data目录下, 本质上还是文件的存储
MySQL: 引擎在物理文件上的区别
- INNODB 在数据库表中只有一个 *.frm文件, 以及上级目录下的ibdata1文件
- MYISAM 文件,
- *.frm 表结构定义文件
- *.MYD 数据文件(data)
- *.MYI 索引文件(index)
设计数据库表的字符集编码
CHARSET=utf8
不设置就不支持中文, MySQL默认编码是Latin1, 在my.ini中配置默认编码
6.5 修改删除表
-- 修改表名
ALTER TABLE teacher RENAME AS teacher1
--增加表的字段
ALTER TABLE teacher1 ADD age INT(11)
--修改表的字段(重命名和修改约束)
ALTER TABLE teacher1 MODIFY age VARCHAR(11) --修改约束
-- 旧名->新名
ALTER TABLE teacher1 CHANGE age age1 INT(11) --重命名
-- 删除表的字段
ALTER TABLE teacher1 DROP age1
-- 删除表
DROP TABLE IF EXISTS teacher1
所有创建和删除操作尽量加上判断,以免报错
7.MySQL数据管理
7.1 外键(了解)
一个表的外键=另一个表的主键
一个表存在引用时, 是不能被删除的.必须先删除引用别人的表(从表)
创建表成功后, 添加外键约束.
这些操作都是物理外键, 数据库级别的外键, 不建议使用,(避免数据库过多造成困扰)
最佳实践
数据库就是单纯的表, 只用来存数据, 只有行(数据)和列(字段)
我们想使用多张表的数据,想使用外键(程序去实现)
7.2 DML语言(全部记住, 增删改) 数据操作语言
数据库意义: 数据存储, 数据管理
- insert
- update
- delete
--7.2.1 添加 INSERT
-- insert into 表名([字段1, 字段2, 字段3]) values(`值1`), (`值2`), (`值3`)
INSERT INTO `grade` (`gradename`) VALUES(`大四`);
-- 如果不写字段, 那么就会一一匹配
-- 写插入语句, 数据和字段必须一一对应
-- 单字段多数据
INSERT INTO `grade` (`gradename`)
VALUES(`大二`), (`大一`);
-- 多字段多数据
INSERT INTO `student` (`name`, `pwd`, `sex`)
VALUES (`张三`,`aaaa`,`男`)
INSERT INTO `student` (`name`, `pwd`, `sex`)
VALUES (`李思`,`aaaa`,`男`), (`张三`,`aaaa`,`男`)
-- 字段和字段之间用 , 隔开
-- 字段是可以省略的, 但后面的值要一一对应, 缺一不可
-- 可以同时插入多条数据, VALUES后面的值, 需要使用, 隔开即可
--7.2.2 修改 UPDATE
> update 修改谁 带条件语句
UPDATE `student` SET `name`='ch' WHERE id = 1; -- id BETWEEN 2 AND 5 [2,5]
-- 如果不指定条件, 会改动所有表~
UPDATE `student` SET `name`='dd'
-- 语法:
-- UPDATE 表名 SET col_name = value,[col_name = value] WHERE [条件];
-- 设置多个属性
UPDATE `student` SET `name`='dd', `email`='102020@qq.com' WHERE id <= 2;
>条件: where子句 运算符 id等于某个值, 大于某个值, 在某个区间修改
操作符会返回布尔值
-- 通过多个条件来定位数据
UPDATE `student` SET `name`='dd' WHERE `name`='ch' AND `sex`='女';
注意:
- 条件, 筛选的条件, 必须指定, 否则修改所有的
- value 可以是一个具体值 也可以是变量
- 不同属性间用,隔开
--7.2.3 delete 删除
--全部删除
DELETE FROM `student`
-- 删除指定数据
DELETE FROM `student` WHERE id = 1;
> TRUNCATE 命令 清空表
TRUNCATE `student`;
> 相同点和区别
--相同点: 都能删除数据, 都不会删除表结构
--不同:
> TRUNCATE 重新设置 自增列 计数器归零
> TRUNCATE 不会影响事务
了解: DELETE删除的问题, 重启数据库,
- INNODB 自增列会从1开始(存在内存中, 断电即失)
- MYISAM 继续从上一个自增量开始, (存在文件中,不会丢失)
7.3.DQL 查询数据(重点)
7.3.1 Data Query Language: 数据查询语言
- 所有查询语句都用它 select
- 简单复杂的都可以
- 数据库中最核心的语言, 最重要的语句
- 使用频率最高的语句
-- 查询 SELECT 字段 FROM 表
-- 查询全部
SELECT * FROM `student`
-- 查询指定
SELECT `StudentNO`, `StudentName` FROM `student`
-- 查询重命名
SELECT `StudentNO` AS 学号, `StudentName` AS 学生姓名 FROM `student` AS s
-- 函数
SELECT concat('姓名:', StudentNme) AS 新名字 FROM `student`
有时候, 列名不一定见名知意 别名AS
去重: distinct
作用: 去除查询出来的结果中重复的数据, 仅显示一条
--查询那些人参加考试
SELECT * FROM result -- 查询全部成绩
SELECT `StudentNO` FROM result --查询参加者
-- 发现重复数据, 去重
SELECT DISTINCT `StudentNO` FROM result --发现重复数据, 去除
数据库的列(表达式)
SELECT VERSION -- 查询系统版本 (函数)
SELECT 100*3-1 -- 查询计算结果 (表达式)
SELECT @@auto_increment_increment --查询自增步长 (变量)
-- 学员考试成绩 + 1分
SELECT `StudentNO`, `StudentResult`+1 AS `提分后` FROM result
数据库中的表达式: 文本值, 列, Null, 函数, 计算表达式, 系统变量…
select 表达式 from 表
7.4 where 调节子句
作用: 检索数据中 符合调节 的值
搜索的结果返回布尔值
逻辑运算符:
-- 查询学生成绩在95~100分之间
-- using and &&
SELECT `StudentNO`, `StudentResult` FROM result
WHERE StudentResult>=95 && StudentResult<=100;
-- 模糊查询(区间)
SELECT `StudentNO`, `StudentResult` FROM result
WHERE StudentResult BETWEEN 95 AND 100;
-- 除了1000号学生之外的同学的成绩
SELECT `StudentNO`, `StudentResult` FROM result
WHERE StudentNO!=1000; -- WHERE NOT StudentNO=1000;
尽量使用英文字母
模糊查询: 比较运算符
使用is null 而不是 =
JOIN 联表查询
on是连表前的条件,where是连表后的过滤
where 可以对on条件里面查询的内容再次进行过滤
自连接: 自己表和自己相连接, 核心: 一张表拆成两张一样的表
8.分页和排序
分页 LIMIT 和 排序 ORDER BY
ORDER BY 通过哪个字段排序, 怎么排
怎么排序:
升序 ASC 降序 DESC
为什么要分页?
缓解数据库压力,体验,优化 > 瀑布流
语法: LIMIT(查询起始下标, pagesize)
9.子查询
顺序: 由里及外
WHERE嵌套
10.MySQL 常用函数
官网:
10.1 常用函数**[不常用]**
--数学运算
SELECT ABS(-1) -- 绝对值
SELECT CEILING(-1.1) -- 向上取整
SELECT FLOOR(-1.1) -- 向下取整
SELECT RAND(-1.1) -- 返回随机数(0~1)
SELECT SIGN --判断一个数的符号
10.2 聚合函数**[常用]**
HAVING是对GROUP BY的对象进行过滤
10.3 数据库级别的MD5加密(扩展)