当前位置: 首页 > news >正文

.mysql secret在哪_MYSQL基本操作(上)

很久之前,就想做个Mysql的小结,毕竟数据库知识是软件研发的基本技能,这里话不多说,开始总结一波。

数据库基本概念

数据库为高效的存储和处理数据的介质(主要分为磁盘和内存两种),一般关系型数据库存储在硬盘中,比如Mysql, Access,Oracle等,非关系型数据库则存储在内存中,比如NoSQL等,其中各自的优缺点很明显了。关系型数据库是一种建立在关系模型(数学模型)上的数据库,以二维表(行和列--结构角度 or 记录和字段--数据角度)的形式进行数据存储,常见的关键字的含义为:

DB:Database,数据库;

DBMS:Database Management System,数据库管理系统;

DBS:Database System = DBMS + DB,数据库系统;

DBA:Database Administrator,数据库管理员。

SQL:Structured Query Language,结构化查询语言。

DDL:数据定义语言,用来维护存储数据的结构(数据库、表),代表指令为create、drop和alter等。

DML:数据操作语言,用来对数据进行操作(表中的内容)代表指令为insert、delete和update等。

DQL:数据查询语言,代表指令为select。

DCL:数据控制语言,主要是负责(用户)权限管理,代表指令为grant和revoke等。

这里为了方便弄清整个数据库的各个命令及意义,将按照DDL----DML-----DQL的顺序详细讲解Mysql由建库到跑路的详细历程。

Mysql 之 基础上

库操作

连接:  Mysql -h 127.0.0.1 -P 3306 -uroot -p111111  注意其中的大小写,其中各个含义相比很清晰了

建库:  create database + 数据库名称 + [库选项]  库选项主要包括两个:字符集和校对集,例如: create database funsql  charset utf8 collate utf8_general_ci

删库:  drop database + 数据库名  建议先备份再删除,除非你要跑路了

改库:  alter database + 数据库名 + [库选择]

查库:  show database  [like  "_fun%"]  这里可以使用模糊查询来实现查询数据库(可选),只能说很灵活。

其它:  show create database + 数据库名  可查看数据库的创建语句

表操作

建表:  create table [if not exists] + 表名( 字段名称 数据类型, ···,字段名称 数据类型)[表选项]  其中表选项主要包括三个:字符集、校对集以及存储引擎,例如:create table ifnotexists manager( name char(8), age int, grade varchar(10) )charset utf8 collate utf8_general_ciengine InnoDB

删表:  drop table + 表名1,表名2  可实现多重删除

改表列:  alter table + 表名 + 操作符 + [column] + 字段名 + 数据类型 + [列属性][位置]  这里操作符主要包括:add, drop,modify, change, 列属性主要包括:null、not null、default、primary key、unique key、auto_increment和comment等,位置主要包括:first,  after

改表外:  rename table 旧表名 to 新表名;alter table + 表名 + 表选项[=] + 值  分别为更改表的名字以及表选项

查表: show tables [like  "_fun%"] 同查库一样,如需要查看表中的字段信息:desc/describe/show columns from + 表名;

数据操作

增数:  insert into + 表名(字段列表) + values(值列表)[,(值列表)]  插数据亦可用select实现叠加赋值,例如insert into fun select * from fun1(字段数及类型一致), 假如有主键冲突,可在语句后面添加 on duplicate key update 主键名 = '需要的数值';

删数:  delete from + 表名 + [where 条件];

改数:  update + 表名 + set + 字段 = 值 + [where 条件];

查数:  select * from + 表名 + [where 条件];

清空:  truncate + 表名;

数据进阶操作之查询:

select + [distint/all] + 字段列表[字段别名]/* + from + 数据源 + [where 条件] + [group by 子句 [asc/desc] ] +[having 条件] +[order by 子句 [asc/desc] ]  + [limit 子句];

这里的distinct 是实现去重,它只能跟随字段哦;

字段列表不仅仅可以是检索列,亦可以是有效表达式,比如聚合函数count(distinct *)、max(列名)、min(列名)、avg(列名)、sum(列名)等

字段别名可用AS关键字来实现,常见的用法为:字段名 + [as] + 别名,当然数据源也可以使用别名哦,理论上讲,只要是集合便能用别名另称;

数据来源可以是单表、多表、视图、子查询等;

where 条件实现行过滤,其中常用的比较运算符为>、、=、like、between and、in和not in以及逻辑运算符&&、||、和!, where是从磁盘读取数据,而磁盘中数据的名字只能是字段名,不能是别名哦;

having 条件实现组过滤,其一定是在行过滤之后哦,功能及用法类似大于where,数据进入内存之后,会需要分组操作,分组结果就需要having来处理,可用别名哦,因为别名是数据(字段)进入到内存后才产生的;

group by 子句实现组排序,这里切记分组的目的是为了(按分组字段)统计数据,并不是为了单纯的进行分组而分组哦,子句不能是聚合函数哦;

order by子句实现行排序,这个就很简单了;

limit 主要目的限制结果的数量,例如:limit 2,2则只显示结果的3,4两行,可以用它实现分页效果哦。

联结查询,所需数据时常会在多个表中存在,进行多表查询时,联结便可大派用场了

内联结:左表 + [inner] + join + 右表 + on + 左表.字段 = 右表.字段;  这里on实现的效果与where类似,但on效率更高。从左表中取出每一条记录,和右表中的所有记录进行匹配,并且仅当某个条件在左表和右表中的值相同时,结果才会保留,否则不保留。

外联结:左表 + left\right + join + 右表 + on + 左表.字段 = 右表.字段;  这里以某张表为主表,取出里面的所有记录,然后让主表中的每条记录都与另外一张表进行连接,不管能否匹配成功,其最终结果都会保留,匹配成功,则正确保留;匹配失败,则将另外一张表的字段都置为NULL.

自然连接:左表 + nature + [left/right] + join + 右表; 这里实现的效果对应着相应的内外联结,只是去除了重复行。

为方便理解,copy一张图帮助理解:

f8f07fcfb5e33498c66209302f2d00f7.png

数据进阶操作之外键:

外键:foreign key,外面的键,即不在自己表中的键。如果一张表中有一个非主键的字段指向另外一张表的主键,那么将该字段称之为外键。每张表中,可以有多个外键。外键默认的作用有两个,分别对子表和父表进行约束,当然也可以进行自定义设置模式,常见的模式包括:district(严格模式,默认),cascade(级联模式),set null(置空)。

增: foreign key(外键字段) + references + 外部表名(主键字段) [on delete + 模式 + on update + 模式];

删: alter table my_foreign1 drop foreign key my_foreign1_ibfk_1;

改增: alter table + 表名 + add[constraint + 外键名字] + foreign key(外键字段) + references + 外部表名(主键字段) [on delete + 模式 + on update + 模式];

数据进阶操作之联合查询及子查询:

联合查询关键字:select 语句1 + union + [union选项] + select 语句2 + ...; 其中union选项包括:distinct,all, 检索项数量必须一致,意义主要在于排序,需要时加上括号。

子查询:等价于小型视图:select * from tableName1 where (age, height) =[any|some|all](select max(age), max(height) from tableName2);

视图操作

视图:是一种有结构(有行有列),但没有结果(结构中不真实存放数据)的虚拟表,虚拟表的结构来源不是自己定义的,而是从对应的基表(视图的数据来源)中产生的。

表操作:

新建:create view + 视图名 + as + select语句;

查询:把视图假想成一个表,其查询操作同表一模一样(desc 视图名/show tables 视图名/ show create tables 视图名)

修改:alter view + 视图名 + as + 新的select语句;  视图本身并不支持修改,修改视图,就是修改视图的来源(select)语句。

删除:drop view + 视图名;

视图算法: create + [algorithm = temptable/merge/undefined] + view + 视图名 + as + select语句;,其中三种算法,主要表现在视图语句和外部查询语句的执行顺序,undefined让系统自己判断,temptable让系统先执行视图的select语句,后执行外部查询语句,merge让系统先将视图对应的select语句与外部查询视图的select语句进行合并,然后再执行。通常如果视图的select语句中包含一个查询子句(五子句,包括where、group by、order by 、having和limit),而且很有可能查询子句的顺序比外部的查询语句的顺序要靠后(五子句的顺序),那么一定要使用temptable算法,其他情况可以不用指定,默认即可。

数据操作: 虽说视图跟表有着千丝万缕的相似,但是在进行数据操作时还是多了许多限制

多表视图不能进行新增数据,显然,不然无法维护真是各表中的数据的完整性

可以向单表视图新增数据,但视图中包含的字段必须有基表中所有不能为空的字段,这个显然也是为了保证数据的完整性

多表视图不能删除数据

理论上,无论多表视图还是单表视图,都可以进行数据的更新

视图最重要的功能就是查询,其他如增、删、改的操作一般不会使用,也不建议通过视图来操作基表的数据。

数据库备份与还原

终于到本节的最后一部分了,如果真想删库跑路的话,可以忽略,数据备份与还原的方式有很多种,具体可以分为:数据表备份、单表数据备份、SQL备份和增量备份。

数据表备份: 不需要通过 SQL 来备份,我们可以直接进入到数据库文件夹复制对应的表结构以及数据;在需要还原数据的时候,直接将备份(复制)的内容放回去即可。不同的数据引擎会有不同的区别,比如数据存储方法:

Myisam:表、数据和索引全部单独分开存储,直接复制 Myisam 存储引擎产生的.frm、.MYD和.MYI三个存储文件到新的数据库即可;

InnoDB:只有表结构,数据全部存储到ibd文件中,可以将通过 InnoDB 存储引擎产生的.frm和.idb文件复制到另一个数据库;

单表数据备份:select */字段列表 + into outfile + '文件存储路径' + fields + 字段处理 + lines + 行处理 + from 数据源;   每次只能备份一张表,而且只能备份数据,不能备份表结构。使用备份:load data infile + '文件存储路径' + into table + 表名 + [字段列表] + fields + 字段处理 + lines + 行处理;

SQL 备份:备份的是 SQL 语句。在进行 SQL 备份的时候,系统会对表结构以及数据进行处理,变成相应的 SQL 语句,然后执行备份。在还原的时候,只要执行备份的 SQL 语句即可,此种备份方式主要是针对表结构。这里需要客户端支持,暂时忽略。

增量备份: 不是针对数据或者 SQL 进行备份,而是针对 MySQL 服务器的日志进行备份,其日志内容包括了我们对数据库的各种操作的历史记录,如增删改查等。

好了,暂时小结到这里,有时间再进行基本操作(下)~

相关文章:

  • mysql pxc 表分片_MySQL PXC集群如何导入无主键表
  • 如何将d盘空间转到c盘_如何拯救你的C盘?labview2019深度学习教你如何安装到D盘...
  • mysql 取top 10_mysql分组取topn
  • kvo实现原理_详细了解Cocoa中KVO机制是什么
  • gitee如何搭建mysql_gitee中项目到运行操作,包括:打包、热部署、数据库操作
  • php mysql 并发写入_php+mysql高并发插入数据重复问题!
  • python pickle模块_python pickle 模块的使用
  • python 曲线拟合参数能否为数组_Python曲线将多个参数拟合到多个数据集
  • plsql trim去不掉空格_Excel中使用TRIM与CALEN都无法清除空格与不可见字符时怎么办...
  • java日历算法分析_Java基础算法分析之一
  • ssh连接docker vscode_VScode远程连接Docker容器实现X11转发
  • linux mysql 最全安装_最全的mysql 5.7.13 安装配置方法图文教程(linux) 强烈推荐!
  • centos7镜像带mysql吗_【系列7】使用Dockerfile创建带mysql的Centos Docker镜像
  • spark mysql 环境搭建_Hive搭建
  • mysql vsftp_vsftp配置验证方式mysql和文件虑拟用户
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Angular 响应式表单 基础例子
  • KMP算法及优化
  • leetcode388. Longest Absolute File Path
  • LintCode 31. partitionArray 数组划分
  • Spark学习笔记之相关记录
  • Vim Clutch | 面向脚踏板编程……
  • Vue 动态创建 component
  • 将 Measurements 和 Units 应用到物理学
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 小李飞刀:SQL题目刷起来!
  • 异常机制详解
  • 白色的风信子
  • Semaphore
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #微信小程序(布局、渲染层基础知识)
  • $ git push -u origin master 推送到远程库出错
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (1)(1.13) SiK无线电高级配置(六)
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (二)c52学习之旅-简单了解单片机
  • (二)springcloud实战之config配置中心
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)基于IDEA的JAVA基础1
  • (转)ABI是什么
  • .Net程序帮助文档制作
  • .NET中winform传递参数至Url并获得返回值或文件
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • @Service注解让spring找到你的Service bean
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [Android学习笔记]ScrollView的使用
  • [BROADCASTING]tensor的扩散机制
  • [CSS] 点击事件触发的动画
  • [JavaScript]_[初级]_[关于forin或for...in循环语句的用法]
  • [LeetCode]—Longest Palindromic Substring 最长回文子串
  • [Linux]创建新用户并授予root权限