- 一、基本概念
- 1、数据库服务器
- 我们可以理解为数据库服务器即是一台内存较高的计算机,可以在上面运行数据库管理软件
- 2、数据库管理系统
- 3、数据库
- 4、表
- 即文件,用来存放多条记录,每条记录为多个字段组成的一行数据
- 二、Mysql基本介绍
- Mysql是目前WEB应用最好的RDBMS(Relation Database Mangement System)关系数据库管理系统之一
- 关系型数据库是将数据保存到不同的表里面,而不是将数据放到一个大仓库内
- 关系型数据库与非关系型数据库的区别是:关系型数据库有表结构,非关系型数据库是通过key-value存储,无表结构
- Mysql使用的是标准的SQL数据语言形式,支持多种语言,支持5000万条的数据仓库,32位系统表文件最大支持4GB,64位系统最大支持表文件为8TB
- 通俗的讲:Mysql就是一个基于socket编写的C/S架构的软件
- 储存引擎
- mysql默认的查询引擎为innodb,可以自行进行更改
- 语法:
- win:
- 启动mysql服务端,在cmd窗口运行mysqld
- 数据库初始化命令:mysql-initialize-insecure
- 启动mysql客户端,并连接服务端mysql -uroot -p
- 连接其他ip数据库,mysql -u账号 -hIP地址 -P端口号 -p密码
- 查看当前登陆用户:select user( )
- 刷新权限,执行命令:flush privileges;
- 查看进程:tasklist | findstr mysql
- 杀死进程:tasklist /F /PID 进程号
- mac:
- 设置新密码:set password for '用户名'@'IP地址'=password('');
- 查看系统进程:ps -A
- 杀死系统进程:sudo kill -9 PID
- 操作文件夹(库):
- 增加一个库:create database db1 charset utf8;
- 查看所有库: show databases;
- 查看特定库: show create database db1;
- 删库跑路: drop database db1;
- 操作文件(表):
- 切换进数据库:use db1;
- 查看当前所在文件夹;select database( );
- 增加表:create table t1(id int,name char(6));
- 查看特定表:show create table t1;
- 查看所有表:show tables;或者desc t1;
- 改:
- alter table t1 modify name char(10);name字段改为10字节;
- alter table t1 modify name NAME char(10);name字段名改成NAME
- 复制表
- 即复制表数据也复制表结构:create table t1 select * from db1.t1;
- 只复制表结构create table a1 like db1.t1;
- 清空表
- delete from t1;但是这种方法会保留自增的ID
- truncate table t1;这种方法不会保留自增ID
- 操作文件内容
- 增加内容:insert into (id,name) values(1,'aa'),(2,'bb'),(3,'cc');
- 查看内容:select * from db1.t1;
- 删除内容:delete from t1 where id =1;
- 查看用户权限:select * from mysql.user where user='root'\G;
- 三、SQL数据类型
- SQL之中没有bool值,tinyint[1]表示true;tinyint[0]表示fasle.
- int数据类型后面存储的是显示宽度,而不是存储宽度,其他的数据类型则表示的是存储宽度
- now()sql中的内置函数,根据数据类型生成相对应的时间模式
- char( )定长字符串,存储速度快,但是浪费空间
- varchar( )变长字符串,存储速度慢,可是节省空间
- enum() 表示枚举 多选一
- set( )表示集合 多选多
- 四、约束:作用是保证数据的完整性和一致性
- not null 表示该字段数据不能为空
- default 表示该字段的默认值
- unique 唯一(列唯一,组合唯一)
- primary key 主键 一张列表中只允许出现一个主键(not null + unique)
- auto-increment 自增长
- foregin key 外键 建立两个表之间的联系
- 语法 constraint fk_dep foreign key(关联列名) references 被关联表(被关联列)
- on delete cascade 同步删除
- on update cascade 同步更新
- 五、查询:
- 单表查询的关键字执行顺序
- from 说明是来自那一张表
- where 条件 后面可以跟比较运算符 between and in(. ). like(%表示任意字符 _表示一个字符)逻辑运算符
- group by 以某个字段的值进行分组,发生在where之后,查看组类信息依赖于聚合函数max min avg sum count
- having 过滤,在group by 后面的条件筛选
- order by 排序 asc升序 desc降序
- limite 限制查询 记录数 limte a, b. a表示从第a个开始,b表示查询b条
- 多表连接查询
- 语法:select 字段 from t1 inner/left/right join t2 on t1.字段=t2.字段;
- inner 表示只显示连接匹配的行
- left:优先显示左表的全部记录
- right:优先显示右表的全部记录
- 子查询中的关键字
- in/not in:查询的结果是否在子表中
- 运算符:= < > !=
- exits:表示存在,使用此关键字时,内层查询语句不返回查询的记录,而是返回一个布尔值,当此布尔值为真时外层语句进查询,反之不进行查询
- 六、pymysql简单使用
- 连接:conn=pymysql.connect(host='IP',port=端口号,user='root',password='',db=db1,charset='utf8')
- 创建游标:cursor=conn.cursor( )
- 写sql语句:sql=‘’
- 执行sql语句,返回在数据库中查询成功的记录行数,result=cursor.execute(sql);在result中可以进行字符的拼接,execute(sql,[user,pwd]),即execute注入,防治恶意语法
- 使用mysql模块进行增删改操作时需使用commit( )方法进行提交,否则数据库更改不生效;conn.commit( )
- 查询操作:fetchone( )获取下一行数据,从第一行开始;fetchall( )获取所有行数据,;fetchany(n),获取n行数据
- 查询操作默认返回的是元组,使用如下语句获取游标,改变cursor属性,会返回字典:cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
- 移动指针:
- cursor.scroll(1,mode='relative')相对定位,相对当前位置向下移动
- cursor.scroll(1,mode='abusolute'绝对定位,相对左上角向下移动
- 关闭连接,游标和连接都需要关闭:cursor.close( ). conn.close( )
- 七、索引
- 索引的作用:约束和加速查找
- 无索引的时候一般会 从前至后一条条查找
- 有索引的时候:创建索引的本质就是创造额外的文件,查询时先去额外的文件找,定好位置,再去原始表直接查询,提高查询速度,但是增删改的速度依然慢,创建索引后必须命中索引才有效
- 索引的分类
- 1、普通索引:加速查询
- 加入索引:create index 索引名 on 表名(列名)
- 删除索引: drop index 索引名 on 表名
- 查看索引:show index from 表名
- 2、唯一索引:加速查找和唯一约束(可含null)
- 加入索引:create unique index 索引名 on 表名(列名)
- 删除:drop index 索引名 on 表名
- 3、主键索引
- 加入索引:alter table 表名 add primary key(列名)
- 删除索引:alter table 表名 drop primary key(列名)和alter table 表名 modify 列名 int,drop primary key
- 4、组合索引:将多个列组合成一个索引
- 创建组合索引:create iindex 索引名 on 表名(列1,列2)
- 在使用组合索引时,若组合索引为(name,email),单独索引email时不走索引,这称为最左前缀匹配原则,最左匹配原则中,mysql会一直向右匹配知道遇到(< > between like)这一类的范围查询时停止
- explain + sql查询语句,用于查询sql执行信息参数
- 在使用关键字‘like’查询时:like ‘n%’ 走索引;但是like ‘%n%’不走索引,即有且仅只有后面带上%时走索引
- 使用函数时索引不生效
posted on
2018-10-20 17:07
哈尔斯塔特
阅读(
6312)
评论()
编辑
收藏
举报