"""
一、初始数据库:
- 数据库管理软件的由来
四个字:存储数据(简单暴力)
- 数据库概述
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:
- 具体参考我的另一篇博客 """

最新文章

  1. 体验了微信小程序,发现安卓用户终于把果粉“碾压”了一次
  2. html5视频全频播放
  3. Javascript实现计数器,定时警告和停止
  4. pouchdb Conflicts
  5. GitHub使用教程及常见错误解决
  6. delphi 编写一个dos 窗体
  7. golang的linux安装
  8. CodeForces 631C Print Check
  9. 使用语句清除sqlserver数据库日志文件
  10. CleanWebpackPlugin 低版本失效
  11. linux上安装mysql,tomcat,jdk
  12. 如何读取R 的sumary()结果
  13. UVA12171-Sculpture(离散化+floodfill)
  14. eclipse启动速度优化
  15. eclipse安装主题插件(Color Theme)
  16. layui小封装方法
  17. 学了Python可以做什么工作
  18. POJ 3579 Median(二分答案)
  19. Ubuntu 配置网卡信息
  20. 搭建互联网架构学习--005--框架初步拆分ssm单一框架

热门文章

  1. Android基础TOP6_1:FrameLyayout和ImageView制作层叠图片
  2. C++(Typedef声明)
  3. jdbc 实现分页
  4. vue-quill-editor富文本焦点问题
  5. 浅谈java浅拷贝和深拷贝
  6. 剑指offer---正则表达式匹配
  7. Diango REST framework 视图继承图
  8. python爬取豆瓣小组700+话题加回复啦啦啦python open file with a variable name
  9. 用python写了一个猜年龄小游戏
  10. codeforces round #394 (div. 2) A\B 题解