一、mysql数据库常见数据类型

数值型、日期/时间、字符串。

数值型:int、smallint、tinyint、mediumint、bigint  ;浮点型:float、double、decimal(两数比较,大的+2)

日期/时间:date(YYYY-MM-DD)、time(HH:MM:SS)、year、datetime、timestamp(随其他字段修改自动刷新时间)

字符串:char(定长)、varchar(变长)、tinyblob、tinytext、blob(二进制长文本)、text(长文本)、medlumblob、medlumtext、longblob、longtext

二、事务

1.作用:

用于处理操作量大,复杂度高的数据。

2.事务的特性:

原子性:即不可分割性,一个事务的所有操作要么都完成,要么都完不成,执行过程中发生错误回滚到事务开始前的状态。

一致性:数据的修改符合预设规则,数据间的联系规则正常自发性地完成,如B给A转账100,A的金额+100,B的金额就必须-100。

隔离性:多个并发事务不能同时对同一行数据进行修改。事务隔离级别:未提交、读提交、可重复读、串行化。

持久性:事务对数据的修改是永久的。

3.如何开启事务

begin 或 start

4.索引优缺点

优点:大大提高了查询速度。缺点:占用磁盘空间,降低表的更新速度。

5.创建索引语法

create index [tablename] on [tablename]([indexfield]);

6.如何防止出现重复数据

使用 PRIMARY  KEY 主键或者 UNIQUE 唯一索引来保证数据的唯一性。insert ignore into在插入数据时,数据库中已存在的数据会忽略。

7.过滤重复数据

需要读取不重复数据可以使用 DISTINCT 或者 GROUP  BY。

8.删除重复数据

第一种方法:将原表数据通过 GROUP  BY 查询出来并复制到临时表中,删除原表,将临时表改名。

第二种方法:修改表结构,添加唯一索引或主键。

9.sql注入5种漏洞

数据库联合查询注入攻击、数据库报错查询注入攻击、字符型数据库注入攻击、数据库盲注sql注入攻击、字符型注入攻击。

10.防止sql注入方法

pymysql中使用args传递参数,pymysql会对参数进行自动转义。

限制特殊字符的输入,如单引号,逗号,*,反斜杠,写入过滤代码过滤带有AND 1=1、select、union等的数据。

开启网站防火墙,IIS防火墙,apache防火墙,nginx防火墙都有内置过滤sql注入的参数。

11.mysql导出数据及备份

导出:SELECT * FROM table INTO OUTFILE '/tmp/runoob.txt'

备份:mysqldump -u root -p --all-databases > database_dump.txt

12.mysql导入数据

mysql -u root -p 密码 < runoob.sql

source /home/abc/abc.sql  (要进入数据库)

mysqlimport -u root -p --local database_name dump.txt

13.数据库常见函数

replace, reverse, strcmp, upper, abs, avg, count, floor, max, min, sum, current_date, localtimestamp, now, cast(x as type)转换数据类型如字符串日期转日期

14.触发器、存储过程、视图

触发器:满足触发条件时,系统自动执行触发器的触发体,可调用多个存储过程。触发时间:before, after,触发事件:insert, update, delete,触发类型:行触发,语句触发。

存储过程:编译好的sql语句集合。优点:运行速度快,保证数据安全性和完整性,减少网络流量,重复性;缺点:调试麻烦,维护麻烦,不易移植,存在重新编译问题。

视图:select返回结果组成的虚拟表,类似存储过程,但存储过程范围更广,可以传参数。

15.内存溢出和内存泄漏

内存溢出:指程序在申请内存时,没有足够的内存空间供其使用。

内存泄漏:指程序在申请内存后,无法释放已申请的内存空间。

16.查看、更改表结构命令

查看:desc  table_name;

更改:alter  table  [table_name]  drop/add/modify/change  [字段]

17.mysql常见数据库引擎及区别

常见引擎有InnoDB、MyISAM、MEMORY(HEAP)、BLACKHOLE

MyISAM:高速存储和检索,有全文搜索能力,不支持事务,只有表级锁,没有行级锁,不支持外键。

InnoDB:支持事务、外键、行级锁、并发控制,提供了事务安全,但其写入数据速度慢,占用磁盘空间大。

MEMORY:放在内存中的表,关机或重启,数据消失。

BLACKHOLE:写入的任何数据都会消失,用于记录二进制sql语句用于主从复制中的中继存储。

18.mysql索引种类

普通索引,唯一索引,主键索引,组合索引,全文索引

19.索引合并、覆盖索引、分库分表、聚集索引、辅助索引、读写分离

索引合并:指使用多个索引查询,然后合并结果。

覆盖索引:所查询数据的列只需从索引中就能得到,不必读取数据行。

分库分表:垂直切分指依据不同的表分给不同的数据库,水平切分指依据表中数据的逻辑关系,将同一个表数据拆分到多个表中。

聚集索引:索引表的树的叶子节点存放整行数据,每个叶子节点通过双向链表连接。

辅助索引:叶子节点只包含索引列的值和主键id,不需双向链表。

读写分离:让主数据库处理事务性增(insert)、删(delete)、改(update),从数据库处理查询(select)操作。

20.创建索引但无法命中索引的情况

  • 使用通配符%和_开头的模糊查询
  • 条件中有or,条件字段不全是索引字段
  • 组合索引没有用到索引的第一个字段(没有遵循最左前缀规则)
  • 查询列类型是字符串,但没用引号引起来
  • 查询范围较大
  • 使用反向条件,如not、!、<>

21.数据库优化方案

  • 尽量使用char代替varchar,尽量不使用*,尽量不使用游标
  • 使用join代替子查询
  • 使用联合(union)代替手动创建临时表
  • 创建索引
  • 尽量避免进行null值判断
  • update语句,更改少量字段不要update全部字段
  • 分库分表
  • 读写分离
  • 调整数据库引擎
  • 优化查询语句

22.mysql慢日志

记录运行时间超过预设值的日志。

posted on 2019-03-21 21:07  回忆唯U你  阅读(142)  评论(0编辑  收藏  举报