假期(MySQL相关)
"""
一、初始数据库:
- 数据库管理软件的由来
四个字:存储数据(简单暴力)
- 数据库概述
1:什么是数据:简单的说就是描述事物的记录称为数据;可以是数字,文字,图片,视频,语言等
2:什么是数据库:即存放数据的仓库;
3:什么是数据库管理系统:如MySQL,Oracle,sqlite,access,sqlserver等
- MySQL主要用于大型门户;Oracle主要用于银行,铁路,飞机场等安全度较高的地方,sql server是微软公司的产品,主要用于中大型企业
4:数据库服务器、数据管理系统、数据库、表与记录的关系
1、数据库服务器:运行数据库的管理软件
2、数据库管理软件:管理数据库
3、数据库:即文件夹,用来组织文件/表
4、表:即文件,用来存放内容
- MySQL介绍:
1:MySQL是什么:MySQL就是一个机遇socket编写的C/S架构的软件
- 客户端软件:MySQL自带MySQL命令,mysqldump命令,Python模块有:pymysql
2:数据库管理软件的分类:(SQL语句通用)
- 关系型:如sqllite,db2,Oracle,access,sqlserver,MySQL
可以简单的理解为数据库需要有表结构
- 非关系型:MongoDB,redis,memeache
数据库的数据是key-value的形式存在的,没有表结构
- 登陆以及设置密码:
mysqladmin -uroot password ''#初始化密码
mysqladmin -uroot -p '' password '' #修改密码
- 密码破解:
详细操作见:http://www.cnblogs.com/linhaifeng/articles/7126847.html 二、库操作:
- 系统数据库
information_schema:虚拟库,不占用磁盘空间,存放的是数据库启动后的一些参数
performance_schema:MySQL5.5之后开始新增的一个数据库:主要用来收集一些性能参数,记录某些操作
mysql:授权库,主要存储系统用户的权限信息
test:MySQL数据库系统自动创建的测试数据库
- 创建数据库
1:语法:create database 数据库名 charset utf8;
2:命名规则:可以由字母,数字下划线,@,#,$等;区分大小写;唯一性;不能使用关键字,最大长度128位,不能单独使用数字
- 数据库相关的操作
1:查看数据库:show database;show create database db1;select database();
2:选择数据库:use 数据库名;
3:删除数据库:drop database 数据库名;
4:修改数据库:alter database db1 charset utf8; 三、存储引擎:
- 什么是存储引擎
表类型又称为存储引擎(数据库中的表有着不同的类型,类型不同,会对应者不同的存取机制)
- MySQL支持的存储引擎
1:show engines\G #查看所有支持的存储引擎
2:show variable like 'storage_engine%'; #查看正在使用的存储引擎
- innodb,myisam,ndb,memory,infobright,nise,blackhole
- 使用存储引擎
1:建表的时候指定:create table db1(id int,name char)engine=innodb;
2:在配置文件中加
- memory,balckhole存储引擎只有表结构,没有数据
memory,在重启MySQL或者机器后,数据清空
blackhole,往表中插入任何数据,都相当于丢入黑洞,表永远不会记录 四、表操作:
- 表介绍
表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录都有对应的标题,即表的字段
- 创建表
语法:create table 表名(字段名 类型 约束条件)
注意:在同一张表,字段不能相同;宽度和约束条件可选;字段名和值是必须的
- 查看表结构
1:describle t1; 查看表结构,可以简写为desc 表名
2:show create table t1\G; #查看表的详细结构可以加G参数
- 修改表alter table
1:修改表名 alter table 表名 rename 新表名;
2:增加字段 alter table 表名 add 字段名 数据类型 约束条件 (first|after=可选参数);
3:删除字段 alter table 表名 drop 字段名;
4:修改字段 alter table 表名 modify 字段名 数据类型 约束条件
alter table 表名 change 旧字段名 新字段名 数据类型 约束条件
- 复制表
1:复制表结构+记录(字典的key,即主键,外键和索引不会复制)
- create table new_service select * from service;
2:只复制表结构
- select * from service where 1=2; #条件为假,只复制字段
- create table new_service select * from service where 1=2;
- create table t4 like employee;
- 删除表
drop table 表名; 五、数据操作:
- 插入数据insert
1:插入完整顺序(顺序插入)
- insert into 表名(字段1,自负按2) values (值1,值2);
- insert into 表名 values (值1,值2,值3);
2:指定字段插入数据
insert into 表名 (字段1,字段2) values (值1,值2);
3:插入多条记录
insert into 表名 values(值1,值2),(值1,值2);
4:插入查询结果
select (字段1,字段2) from table2 where tiaojian;
- 更新数据update
updata 表名 set 字段1=值1, where condition;
- update mysql.user set password=password('') where user='root' and host='localhost';
- 删除数据delete
delete from 表名 where conition;
- delete from mysql.user where password=‘’
- 查询数据 select
- 单表查询
- so easy
- 多表查询
- you shijian zai xie 六、索引原理与慢查询优化:
- 为何要使用索引
为了加速查询,否则查询速度太快了,默认是以id为索引的
- 索引的数据结构
- 聚集索引与辅助索引
- MySQL索引管理
- 功能:
1:索引的功能就是加速查找
2:MySQL中的primary key,unique,联合唯一也都是索引,这些索引除了加速查找以为,还有约束的功能
- MySQL的常用索引
1:普通索引index,加速查找
2:唯一索引:
- 主键索引primary key:加速查找+约束(不为空,补重复)
- 唯一索引unique:加速查找+约束(不能重复)
3:联合索引:
- primary key(id,name):联合主键索引
- unique(id,name):联合唯一索引
- index(id,name):联合普通索引
- 索引的两大类型hash与btree
1:hash类型的索引:查询单条快,范围查询慢
2:btree类型的索引:b+树,层数越多,数据量指数级增长(默认用这个,因为innodb默认用)
- 创建/删除索引的语法
1:创建表时:
2:create在已经存在的表上创建索引:
3:alter table在已经存在的表上创建索引
4:删除索引:drop index 索引名 on table_name 七、数据备份,pymysql模块:
- MySQL数据备份
1:物理备份:直接复制,适用于大型数据库环境,但不能恢复到异构系统中
2:逻辑备份:备份的是建表,建库,插入等操作所执行的SQL语句,适用于中小型数据库,效率相对较低
3:导出表:将表导入到文本文件中
- 使用mysqldump实现逻辑备份
1:语法:mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
2:多库备份:mysqldump -uroot -p123 --databases db1 db2 > db1_db2.sql
3:备份所有数据库:mysqldump -uroot -p123 --all-databases > all.sql
- 恢复逻辑备份
1:mysql -uroot -p123 < /backup/all.sql
2:进入数据库;set sql_log_bin=0;source /root/db.sql
- 数据库迁移(版本必须相同)
mysqldump -h 源ip -uroot -p123 --databases db1 | mysql -h 目标ip -uroot -p456
- pymysql模块的使用(pip install pymysql)
#链接:conn = pymysql.connect(host='localhost',user='root',password='',database='zhang',charset='utf8')
#游标:cursor = conn.cursor()
#执行SQL语句:cursor.execute(SQL语句)
- execute会存在SQL注入,小心使用,具体可以参考我的另一篇博客xxxxxxx,名字忘了,自己搜搜
- 增删改:conn.commit()
- 查:fetchone,fetchmany,fetchall 八、视图,触发器,事务,存储过程,函数,流程控制:
-视图
1:一张虚拟的表,本质是根据SQL语句获取动态的数据集,并命名,用户使用只需要使用名称就好
2:创建视图:create view 视图名称 as SQL语句
3:使用视图:select * from 视图名称
4:修改视图:alter view 视图名称 as SQL语句
- 更新视图数据:update 视图名称 set xxx=ooo
- 插入数据:insert into 视图名称 values(xx,oo,xxoo)
5:删除视图:drop view 视图名称
-触发器
1:使用触发器可以定制用户对表进行增删改操作时前后的行为
2:创建触发器
- 插入前:
create trigger tri_before_insert_tb1 before insert on tb1 for each row
begin ... end
- 插入后:
create trigger tri_after_insert_tb1 after insert on tb1 for each row
begin ... end
3:使用触发器
- 触发器无法由用户直接调用,而是对于表的增删改操作被动引发执行的
4:删除触发器
- drop trigger tri_after_insert_cmd
-事务
- start transaction;开始事务 - commit 事务提交 - rollback出现异常回滚
- 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可会滚到原来的状态,从而保证数据的安全性
- 比如银行跨行转账,A给B转账,B收到之后从A中扣款,如果没收到就会滚到刚开始的状态
-存储过程
- 存储过程的创建:
delimiter // create procedure p1() begin ... end// delimiter;
存储过程包含了一系列可执行的SQL语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql
- 优点:
1:用于替代程序写的SQL语句,实现程序与SQL的语句
2:基于网络传输,传别名的数据量小,而直接传sql数据量大
- 缺点:
1:程序扩展功能不方便
- 程序与数据库结合使用的三种方式
1:MySQL:存储过程;程序:调用存储过程
2:MySQL: ;程序:纯SQL语句
3:MySQL: ;程序:类和对象,即orm(本质还是SQL语句)
- 有参存储过程和午餐存储过程
1:无参
delimiter //
create procedure p1()
BEGIN
select * from blog;
INSERT into blog(name,sub_time) values("xxx",now());
END //
delimiter ; #在mysql中调用
call p1() #在python中基于pymysql调用
cursor.callproc('p1')
print(cursor.fetchall())
2:有参:
in,out,inout三个参数,一个传入,一个传出另一个可进可出
- 执行存储过程
- 在MySQL中执行
- 在python中执行
- 删除存储过程
- drop procedure -函数(函数中不要写SQL语句)
- 内置函数:avg,sum,count等
- 自定义函数:
delimiter //
create function f1(
i1 int,
i2 int
)
result int
begin
.....
end//
delimiter;
- 删除函数:
- drop function func_name;
- 执行函数:
1:获取返回值:
select upper('egon') into @res;
select @res
2:在查询中使用:
select f1(11,nid),name from tb2;
-流程控制
- 条件语句
1:if条件语句
delimiter //
create procedure proc_if ()
begin ... end//
delimiter ;
- 循环语句
1:while循环
delimiter //
create procedure proc_while()
begin ... end//
delimiter
2:repeat循环
delimiter //
create procedure proc_repeat()
begin ... end//
delimiter ;
3:loop
begin ... end
九,orm框架sqlalchemy:
- 具体参考我的另一篇博客 """
假期(MySQL相关)的更多相关文章
- 关于MySQL相关的查看显示信息:
关于MySQL相关的查看显示信息: 数据库范围: 一.查看所有的数据库:(仅仅是看数据库数量与名字) mysql> show databases; 二.查看某个数据库的创建信息:(主要看数据库的 ...
- .NetCore关于Cap(RabbitMQ)结合MySql使用出现MySql相关类冲突问题解决办法
问题还原 引用了 DotNetCore.CAP.MySql MySql.Data.EntityFrameworkCore 在使用MySql相关对象的时候会出现如下冲突,在命名空间加入伪空间名称是不能解 ...
- MySQL相关问题总结
希望此贴能够将MySQL安装周围的问题总结清楚,也免得自己再遇到问题时而不知所措.本帖中所有关于MySQL的问题均涉及到两个平台:Ubuntu 和 Windows(本人没有Mac) 问题1:MySQL ...
- 09js、MySQL相关
09js.MySQL相关-2018/07/19 1.js的dom 理解一下文档对象模型:html文件加载到内存之后会形成一颗dom树,根据这些节点对象可以进行脚本代码的动态修改;在dom树当中 一切皆 ...
- Linux下mysql相关操作
Linux下mysql相关操作 1.创建MySQL mysql -u root -p create user 'username'@'%' identified by 'password'; %可以选 ...
- MySQL相关参数总结
保留个原文链接,避免被爬虫爬了过去,以便后续更正补充:https://www.cnblogs.com/wy123/p/11273023.html MySQL参数繁多,是一个需要根据具体业务.软硬件环境 ...
- sql注入原理+mysql相关知识点
什么是SQL注入 sql就是经常说的数据库,而sql注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.SQL注入是比较常见的网络攻击 ...
- visual studio 2015连接到MySql相关问题
vs中使用服务器资源管理器连接到MySQL没有成功.按照网上提供的解决方法,相关插件已经安装: 1.控制面板中,MySQL Connector Net 6.9.9已经安装(原安装版本为6.9.8,后升 ...
- MySQL相关
1.进入安装目录 cd E:\ZYXDocument\Software\mariadb-10.0.20-win32\bin 2.安装mysql服务将E:\ZYXDocument\Software\ma ...
随机推荐
- dede手机端首页点击文章内容、列表,却跳到pc端
手机访问到手机端首页,点击列表.内容.图片等都跳到pc端,是什么原因? 查看m模板里面的index.html文件生成的代码是绝对路径(数字随机)13.html 而不是view.php?aid=13 解 ...
- TI 77GHZ雷达开发套件 RDP-DC100
RDP-DC100用户使用手册 目录 1. 硬件说明... 3 1.1. 官方处理板的修 ...
- NVIDIA各个领域芯片现阶段的性能和适应范围
NVIDIA作为老牌显卡厂商,在AI领域深耕多年.功夫不负有心人,一朝AI火,NVIDIA大爆发,NVIDIA每年送给科研院所和高校的大量显卡,大力推广Physix和CUDA,终于钓了产业的大鱼. 由 ...
- Stanford coursera Andrew Ng 机器学习课程第四周总结(附Exercise 3)
Introduction Neural NetWork的由来 时,我们可以对它进行处理,分类.但是当特征数增长为时,分类器的效率就会很低了. Neural NetWork模型 该图是最简单的神经网络, ...
- 【sqli-labs】【jsp/tomcat】 less29 less30 less31 less32 (GET型利用HTTP参数污染的注入)
sqli-labs带了几个Java版本的web注入,在tomcat-files.zip里 以Less29为例,查看源码,可以看出请求最后还是提交给了php应用,难怪less29文件夹下有一个没有任何防 ...
- 【C++】朝花夕拾——树(开篇)
树 ===================我是分割线====================== 1. 定义: 一些结点的集合,集合可以为空.定义树的自然方式是递归的方法. 2. 相关概念: 根(ro ...
- (转)淘淘商城系列——使用JsonView来格式化json字符串
http://blog.csdn.net/yerenyuan_pku/article/details/72846025 有时从服务端返回的json字符串往往晦涩难懂,就像下面这样,一行显示出来,让人非 ...
- NGS数据格式介绍
一般情况下,从Illumina平台上得到的测序,其数据格式是Fastq格式,可以称之为原始数据(Raw data).事实上直接的下机数据是显微拍摄得到的图像信息.但是一般都会用Bcl2Fastq软件将 ...
- Vue指令7:v-model
可以用 v-model 指令在表单控件元素上创建双向数据绑定. v-model 会忽略所有表单元素的 value.checked.selected 特性的初始值. 因为它会选择 Vue 实例数据来作为 ...
- 梦想CAD控件文字COM接口知识点
一.参数绘制文字 在CAD设计时,需要绘制文字,用户可以设置设置绘制文字的高度等属性. 主要用到函数说明: _DMxDrawX::DrawText 绘制一个单行文字.详细说明如下: 参数 说明 DOU ...