二、MySQL学习 | 初识-SELECT【1】

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加密(扩展)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值