假期(MySQL相关)
Posted 不会起名字
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了假期(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 \'123\'#初始化密码 mysqladmin -uroot -p \'123\' password \'456\' #修改密码 - 密码破解: 详细操作见: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(\'123\') 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=\'123\',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相关)的主要内容,如果未能解决你的问题,请参考以下文章