Mysql数据库知识点总结

from https://www.cnblogs.com/immkoy/p/9822303.html

一、基本概念

1、数据库服务器

我们可以理解为数据库服务器即是一台内存较高的计算机,可以在上面运行数据库管理软件

2、数据库管理系统

如Mysql,是一个软件,用来管理数据库的软件

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 自增长

语法 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%’不走索引,即有且仅只有后面带上%时走索引

使用函数时索引不生效

分享到:更多 ()

抢沙发

评论前必须登录!