数据库常识

Mysql数据结构初解

页是承装行的容器,也是mysql写入提取出磁盘的最小单位。而区是向磁盘申请连续数据块,这样页与页之间保持连续,可以实现连续读。段用来给表空间划分功能,分为数据段,索引段,回滚段等。表空间是一张表所有数据的集合,是表的代表。
所以从大到小分别是:表空间,段,区,页

关系型和非关系型数据库

sql数据库:以严格的行列存储数据,通过外键联系表和表的关系
mysql,oracle,sql server

nosql数据库:以对象形式存储数据,关系由对象的属性决定
redis,MongoDB

数据库组成

数据库(硬件)->数据库管理系统(mysql)->数据库应用软件(b站)

SQL语句分类

类别 功能 命令
DDL 管理数据结构 CREATE,ALTER,DROP
DML 管理结构中的详细数据 INSERT,DELETE,UPDATE
DCL 管理数据库 GRANT,COMMIT,ROOLBACK
DQL 查询数据 SELECT

Mysql使用前须知

mysql建表前要给库和表选择字符集和排序规则防止乱码
engine默认为INNODB
mysql尽量用bin下载,否则卸载困难
字段名表名不区分大小写,应在两边加入`,这样就算字段名和关键字同名时也可以被区别开来

语句

命令行

连接mysql:mysql -uusername -ppassword
修改密码:
刷新:flush privilege
显示:describe

DDL

数据库
增(create)删(drop)用(use)查(show)

DDL必知字段常识

字段类型
数值:int float double decimal(字符串形式浮点数)
字符串:varchar 0-65535字节 text(2^16-1字节)保存大文本
时间日期 datetime(YYYY-MM-DD HH:mm:ss) timestamp(时间戳 1970.1.1到现在的毫秒数) year

字段属性:
unsigned:无符号,必须是整数,必须非负
zerofill:不足位数用0填充
自增:必须是整数,常用于主键
not null:规定该字段不能为零
comment'字段名':用于给该字段取别名

创建数据表基本格式:

CREATE TABLE 表名(
`字段名` 字段类型 字段属性,
...,
primary key(`字段名`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

删除数据表基本格式:

DROP TABLE IF EXISTS `表名`
/*删除时为了避免错误应优先判断是否存在*/

查看数据表信息

SHOW TABLE STATUS FROM `数据库名` WHERE NAME='表名'

改变字段名或类型

--无法避开字段类型时更改字段名
Alter `表名` CHANGE `旧字段名``新字段名` 字段类型

修改外键

1

ALTER TABLE `外键的表`
ADD FOREIGN KEY (`外键字段`)
REFERENCES `主键的表`(`主键字段`)

2
SQLYog:在具体表/栏目/任意字段右键/管理列/外部键可加
根据名/外键字段/主键数据库/主键表/主键填好

DML

插入记录

INSERT INTO `表名`(可省`字段名`,...) VALUES(当前记录字段值,...),(...),...

插入datetime方法:按照格式输入后加引号转成字符串,如'2013-12-11 09:00:00'

修改记录

UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHERE condition];

DQL(重点)

总体格式(必须按该顺序)

SELECT [ALL | DISTINCT]
{* | table.* | [table.field1[as alias1][,table.field2[as alias2]][,...]]}
FROM table_name [as table_alias][left | right | inner join table_name2]  -- 联合查询[WHERE ...]  -- 指定结果需满足的条件[GROUP BY ...]  -- 指定结果按照哪几个字段来分组[HAVING]  -- 过滤分组的记录必须满足的次要条件[ORDER BY ...]  -- 指定查询记录按一个或多个条件排序[LIMIT {[offset,]row_count | row_countOFFSET offset}];-- 指定查询的记录从哪条至哪条

简单查询

SELECT * FROM `表名`
SELECT `字段名` AS `显示字段名` FROM `表名`
select `字段名`+1 FROM `表名`

Distinct

用于开头,将完全相同的搜索记录去除(一般用于搜索少量字段时)

where查询

> >= < <= = !=
BETWEEN...AND... IN(...)
LIKE % #0到多个字符   _ #1个字符
IS NULL   IS NOT NULL
--多条件时:
AND OR NOT

联表查询

SELECT *
FROM `student` AS s
LEFT/RIGHT/INNER JOIN `subject` r
ON r.StudentNo=s.StudentNo

搜索的字段值为null或空,也会根据此填上相应字段
LEFT:将左表所有含StudentNo值的记录显现
RIGHT:将所有右表记录显现
INNER:左右两边都必须有StudentNo属性

注意"and"条件
left/right join table on key1=key2 and table.field = value 先筛从表,再连主表
inner join on table on key1=key2 and table.field = value 先连从表,再筛

自连接

SELECT p.`categoryName` AS '父',s.categoryName AS '子'
FROM `category` p,`category` s
WHERE p.categoryid=s.pid

当同张表以表中某些记录值作为筛选条件时用该方法
理解:根据where条件先合出一张表,然后再通过搜索字段缩短表

联表与自连接

mysql倾向于联表查询的优化,所以大数据量尽量用联表查询

ORDER BY

尾部加入asc用于升序排序
尾部加入desc用于降序排序

在排序中相同关键值的记录可以再根据排序调整顺序,如下实现两次排序

ORDER BY StudentResult ASC,StudentNo DESC

order后的组无法进行where筛选,一般使用having()进行筛选

分页

LIMIT 开始记录序号(从0开始),页面容量

函数

常用函数

###常用函数SELECT NOW();   /*获取当前日期和时间*/-- 获取年月日,时分秒SELECT YEAR(NOW());SELECT MONTH(NOW());SELECT DAY(NOW());SELECT HOUR(NOW());SELECT MINUTE(NOW());SELECT SECOND(NOW());SELECT VERSION();  /*版本*/SELECT USER();     /*用户*/

聚合函数

count(1)/ count(*):计算记录数,不忽略null字段,有区别
count(字段):计算拥有该字段的记录数,忽略null字段AVG():平均值
MIN():最小值
MAX():最大值
SUM():总和GROUP BY 字段名:控制聚合函数的范围而非整体聚合,具体示范如下
HAVING :对于聚合后列表进行筛选,where无法对聚合后的字段进行筛选
--以下可以获得不同科目的平均分
SELECT SubjectName,AVG(StudentResult) AS 平均分,MAX(StudentResult),MIN(StudentResult)
FROM result r
INNER JOIN `subject` s
ON s.SubjectNo = r.SubjectNo
GROUP BY s.subjectNo
HAVING(平均分>80)

MD5函数

MD5:一种常用加密方法,将一个字符串加密成一个固定的字符串

 UPDATE `tab` SET pwd = MD5(pwd) where `id` = 1;INSERT INTO `tab` VALUES(2,'user',MD5('123456'));SELECT * FROM `tab` WHERE `pwd`=MD5('123456');

三大范式

第一范式

每个字段值都不再能分割

第二范式

当主键为多值联合时,每一字段值都和完整的主键直接相关,意思是说主键中不能出现可有可无的部分

第三范式

所有的非主属性不依赖于其他的非主属性,这是为了防止数据冗余。

注意

阿里:“每条sql联表查询不应超过三张表”,在真正工作场景中,往往因为对效率的要求而偏离三大范式,所以三大范式只是一个参考

入门Mysql(弱鸡待更)相关推荐

  1. 变速更顺滑_CVT变速箱中的小弱鸡?10万公里必坏?变速箱该如何养护?

    一提到CVT变速箱,会有两股势力,一股人说好,舒适性佳,经济省油:一股人说不好,CVT脆弱容易坏.10万公里必坏,变速箱中的小弱鸡.为此已经开上CVT的车主,心里不免有些担忧,这CVT到底行不行?不知 ...

  2. mysql key_block_size_Mysql入门mysql Key_buffer_size参数的优化设置

    <Mysql入门mysql Key_buffer_size参数的优化设置>要点: 本文介绍了Mysql入门mysql Key_buffer_size参数的优化设置,希望对您有用.如果有疑问 ...

  3. navc mysql函数备份_入门MySQL——备份与恢复

    前言: 前面几篇文章为大家介绍了 MySQL 各种语句语法的用法及用户权限相关知识.本篇文章将主要讲解 MySQL 数据库数据备份与恢复相关知识,主要聚焦于逻辑备份,介绍mysqldump工具的使用以 ...

  4. 关于模拟题的一些弱鸡总结

    首先要感谢某位不知名大佬(当时没关注博客事后找不到了...)给了我很大的启发,然后本弱鸡在此写一下关于模拟题的一些个人见解(大佬求轻踩_(:з」∠)_). 众所周知,模拟题在ACM比赛中主要属于签到或 ...

  5. 2021-12-19 老杨博客推荐\TCP像串口的多程编写的一个弱鸡版本类MQTT的TCP实现\字典值查键\微PYTHON与PYTHON的JSON区别\以及一个ESP32领导多个ESP8266组网模式

    都说程序员最拿手的好戏是复制粘贴,对于这件事我也是深以为然,遇到问题先看看别人,有么有写好的,没有写好的看看类似的,实在不行继续百度群里问问,最后再自己操刀上吧,microPython作为小众的控制器 ...

  6. 楚河怎么下rust_沙盒战神在这游戏变弱鸡,疯狂被教做事!

    我们能在游戏里模拟进入的角色远远不只是人类,还有很多生物包括一些现在已经灭绝的史前生物,比如曾经的地球霸主--恐龙. 恐龙支配地球长达1.6亿年,这个时间跨度远远长于人类诞生以来的历史,相信每个人少年 ...

  7. mysql使用新建用户的好处_入门MySQL——用户与权限

    前言: 前面几篇文章为大家介绍了各种SQL语法的使用,本篇文章将主要介绍MySQL用户及权限相关知识,如果你不是DBA的话可能平时用的不多,但是了解下也是好处多多. 1.创建用户 官方推荐创建语法为: ...

  8. 为什么道理懂那么多,你依然是个弱鸡

    为什么道理懂那么多,你依然是个弱鸡 已经两个月没写文章了,有因为工作的事情.有因为个人的私事,更多是因为懒,最近因为准备晋级答辩,重新审视了下自己,发现确实有很多不足的地方,有一些思考,写篇文章分享下 ...

  9. MySQL弱密码和webshell

    MySQL弱密码和webshell问题文档 一.了解漏洞 1.mysql是什么 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational ...

最新文章

  1. 《皇帝:中国的崛起》从入门到精通
  2. 【转】C#对象的深拷贝与浅拷贝
  3. ZH奶酪:Java调用NLPIR汉语分词系统
  4. python比java简单好学-是不是Python比Java更容易学,更容易就业?
  5. 如何知道网站的IP,然后利用IP登陆网站?
  6. PHP获取POST数据的几种方法汇总
  7. 无法打开物理文件“E:\Database\VRVIES6841-FZ01-Global\VRVEIS.mdf”。操作系统错误 5:“5(拒绝访问。)”...
  8. JEECG整合finereport快速搭建与开发
  9. 喵喵遇到java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter怎么办
  10. 在C 编程语言中 静态数组的替代模板,以编译方式在C ++中编译时创建静态数组...
  11. android 手机固定mac地址吗,Android手机获取Mac地址的几种方法
  12. 学了python可以干嘛-学 Python 都用来干嘛的?
  13. 宏、函数、宏和函数的区别
  14. 多磁盘自动分区自动挂载脚本
  15. Oracle 开放源代码项目
  16. python二进制处理详述
  17. 招银网络Java后端笔试题
  18. Beyond Compare比较class文件
  19. kubelet源码分析(四)之 syncLoopIteration
  20. 基于Python的豆果网食谱数据爬取及可视化分析系统

热门文章

  1. python画建筑分析图_| 建筑智囊团 | 流线分析图怎么画?
  2. Vue复刻华为官网 (一)
  3. 动漫人物五官画法教程
  4. 毕业设计-微信公众平台开发与设计(一:准备材料)
  5. 详解步进电机原理及其正反转驱动程序(51单片机)
  6. 作为审稿人如何审稿?
  7. “锦绣桃花源”在新浪上开博啦
  8. Cocos Creator实现Google Play obb 分包
  9. JAVA-MySQL四{MySQL重点DQL查询数据}JAVA从基础开始 --7
  10. python(二)的面向对象---继承