Mysql知识点总结

一、学习环节 1、数据:描述事物的符号记录(文本、图表、图形、图像、声音、语言、视频等); 2、信息:具有特定意义的数据(具有感知、存储、加工、传播和再生等属性); 3、数据库:长期存储在计算机内、有组织、可共享的大数据的集合; 4、SQL语言特点:一体化(集数据定义DDL、操控DML和控制DCL)、使用方式灵活、非过程化、语言简洁等; 5、基本数据库管理系统的系统架构:存储管理、查询处理、事务管理、恢复管理; 6、数据库系统组成:硬件、软件、数据和用户,管理对象是数据; 7、数据库系统体系: (1)集中式:运行在一台计算机上,不与其他计算机系统交互的数据库系统; (2)C/S:将数据库功能分为前台客户端系统和后台服务器系统; (3)B/S:将客户机上的应用层从客户机中分离出来,集中于一台高性能的计算机上,成为应用服务器,也称Web服务器; (4)分布式:由多台计算机组成,每台计算机都配有各自的本地数据库; 8、实体:客观存在并可以相互区分的事物; 9、属性:实体所具有的某些特征,通过属性对实体进行描述,表的每一列; 10、主键:表中可指定一个字段作为主键,也可指定两个及以上的字段作为联合主键,其值唯一标识表中每行记录,且其列不为空。 11、实体型:由实体名和属性集合刻画; 12、实体集:同型实体的集合; 13、联系:事物之间的联系; 14、实体间的联系:一对一、一对多、多对多; 15、概念模型表示:长方框表示对象,椭圆表属性,菱形表联系; 16、数据模型三要素:数据结构(数据库系统的静态特征)、数据操作(数据库系统的动态特征)、完整性约束条件,注:在关系模型中,一般关系必须满足实体完整性和参照完整性; 17、常用数据模型:(1)层次模型;(2)网状模型;(3)关系模型;(4)面向对象模型。 18、关系运算:(1)选择;(2)投影;(3)连接。 19、关系模型规范化设计:(1)第一范式(1NF):为确保每列的原子性,使每列都是不可再分的最小数据单元,(2)2NF:在1NF基础上,使每列都和主码相关;(3)3NF:在2NF基础上,使每列与主码直接相关。 20、关系数据完整性:(1)实体完整性,即关系的主关键字不取空值(2)域完整性,确保属性只有一个有效数据(3)参照完整性,(4)事务完整性,(5)用户定义完整性。 21、常用命令符:net start mysql --- 启动服务;net stop mysql --- 关闭服务; (;or\g)---结束符;exit;/quit;/\q; --- 退出界面;show character set --- 查看MySQL的39种字符集; 22、SQL语言又称为结构化查询语言 23、DBS(数据库系统)包括DB(数据库)和DBMS(数据库管理系统) 24、关系:一个满足特定规范要求的二维表 25、元组:表的一行即为一个元组 26、主码:表中的某个属性组,它可以唯一确定一个元组 27、域:属性的取值范围 28、分量:元组中的一个属性值 29、关系模式:对关系的描述。一般表示为:关系名(属性1、属性2,…,属性n) 30、MySQL对字符集的支持细化到了4个层次:服务器(Server)、数据库(DataBase)、数据表(Table)和连接(Connection)。 31、连接:内连接、外连接(左连接、右连接、全外连接) 32、关系数据库基本性质:① 列是同质的(Homogeneous)每一列中的分量是同一类型的数据,来自同一个域。② 不同的列可出自同一个域其中的每一列称为一个属性,不同的属性要给予不同的属性名。③ 列的顺序无所谓列的次序可以任意交换。④ 任意两个元组不能完全相同⑤ 行的顺序无所谓行的次序可以任意交换⑥ 分量必须取原子值每一个分量都必须是不可分的数据项。 33、作为主码的属性上取值不能为NULL; 34、1.综合统一;2. 高度非过程化;3. 面向集合的操作方式;4. 语言简洁,易学易用; 35、说明:在创建表时,使用哪种数字类型,应遵循以下原则。(1)选择最小的可用类型,如果值永远不超过127,则使用tin)yin)t比in)t强。(2)对于完全都是数字的,可以选择整数类型。(3)浮点类型用于可能具有小数部分的数。例如货物单价、网上购物交付金额等。 36、说明:在 创建表时,使用字符串类型时应遵循 以下原则:(1)从速度方面考虑,要选择固定的列,可以使用char类型。(2)要 节省 空间,使用动态 的列,可以使用varchar类型。(3)要 将列中 的内容限 制在一种选择,可以使用enum(‘m’,’f’)类型。(4)允许在一个列中有多于一个的条目 ,可以使用set类型。(5)如果要 搜索的内容 不区分大小写,可以使用text类型。 37、concat()函数返回来自于参数连接的字符串。如果任何参数是null,返回null,可以有超过两个的参数。数字参数会被变换为等价的字符串形式。 38、char和varchar 区别一,定长和变长 char 表示定长,长度固定,varchar表示变长,即长度可变。char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,还是按实际长度存储,插入多长就存多长。 因为其长度固定,char的存取速度还是要比varchar要快得多,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以会占据多余的空间,可谓是以空间换取时间效率。varchar则刚好相反,以时间换空间。 区别之二,存储的容量不同 对 char 来说,最多能存放的字符个数 255,和编码无关。 而 varchar 呢,最多能存放 65532 个字符。varchar的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是 65,532字节。 39、insert: 插入一条新的数据, 假如主键相同的话会报错 replace: 要插入的数据中索引值不同于表中任意一条数据的索引值,就增加一条新的数据,等同于insert,否则,替换原来的数据,等同于先delete再insert。 40、数据库命名规则:1、不重名;2、字母、数字、下划线、组成,不能使用单独数字;3、名称最长64字符,别名最多256字符;4、不能使用关键字命名。 41、create schema/database if not exists databasename (创建数据库); use databasename(打开数据库); alter {database|schema} [db_name](%E4%BF%AE%E6%94%B9%E6%95%B0%E6%8D%AE%E5%BA%93); show create database teaching(显示数据库结构信息); drop database [if exists] db_name(删除数据库); insert|replace into tbl_name (属性) values(); insert into table namel select * from table name2(向表中插入其他表的数据,要求表结构相同); insert into tal_name set 属性=''(set子句插入数据); 图片以路径存储,插入时以路径插入,若要插入图片本身则用load_file('路径')函数。 update table_name set col_name1 = expr1[, col_name2=expr2…] [where 子句](修改表数据);eg:update student01 set entrance = entrance * 1.08 where entrance < 700; delete [low_priority](#)[ignore] from tbl_name [where 子句] [order by 子句] [limit row_count](表记录删除);eg:delete from student01 where entrance < 750; 42、表的用途分类为:系统表、用户表、分区表;表的存储时间分类:永久表、临时表。 43、临时表说明:1、创建时必须有create temporary table权限;2、show tables语句不会列举临时表;3、不能用rename重命名。 44、数据插入时,数据顺序要和列的顺序相对应,若表名后不给出列名,则在values子句中给出每一列(除identity/timestamp类型的列)的值,如列值为空则值必置为null,否则报错。 45、将文本文件数据插入表中时需注意:1、各行文本之间用制表符<Tab>分隔,行末也加;2、路径使用双斜杠。 46、表数据完整性:1、非空约束;2、主键约束;(主键可为单一字段、表级约束、列级约束。当表中主键为复合主键时,只能定义为表的完整性约束)3、外键约束;4、检查约束;5、唯一性约束。 47、数据检索:select [distinct(去除重复)] 列名(多个时逗号隔开,*表所有)from 表名(多个时逗号隔开) where + 条件(in关键字可将某字段指定在特定点,between…and…即可指定闭区间集合,like对所有数据进行查询,is null查询空值,and、or多条件查询); as为表替换别名,也可省略;order by对结果排序(asc升desc降),order by 不可使用text、blob、longtext、mediumblob等类型的列; having通常和group by结合使用是对筛选结果的二次筛选; limit限制查询数据结果的数量 limit n(从第一行开始两行),limit ; count()加*时null值数量也算,不加时返回符合条件的非空值个数; sum()返回和,avg()返回平均,max()求最大,min()求最小; group by与with rollup统计,求得目标终值*; 48、多表连接、显式定义连接关键字:(1)Inner Join:内连接,结果只包含满足条件的行。(2)Left Outer Join:左外连接,结果包含满足条件的行及左侧表中的全部行。(3)Right Outer Join:右外连接,结果包含满足条件的行及左侧表中的全部行。(4)Cross Join:交叉连接,结果只包含两个表中所有行的组合,指明两个表中所有行的组合,指明两表间的笛卡尔操作。 49、合并多个结果集时,union:指定多个结果集返回单个结果集,all:将所有行合并到结果中,包括重复行,如果不指定,将删除重复的行。 50、子查询:嵌套在select、insert、update等语句或其他查询中的查询;利用子查询做表达式;利用子查询生成派生表; 51、正则表达式进行模糊查询:where 字段名 regexp ‘操作符’; 52、round(变量名,n(小数点位数));alter table 表名 modify 属性名 需要修改的数据类型;order by子句按多个结果排序时,只写一次,用逗号间隔条件,默认升序可不写。group_concat()函数可显示每组中的所有字段值,其作为查询结果,放在句首。limit 起始编号,结束编号;union合并多个结果集; 53、mySql中alter table的使用 1.修改表名:alter table 原表名 rename to 新表名; rename table_name OldName to NewName; 2.新增列:alter table 表名 add column 列名 varchar(20) ; 3.删除列:alter table 表名 drop column 列名; 4.修改列名: alter table 表名 change 原列名 新列名 varchar(20) ; 5.修改列属性:alter table 表名 modify 列名 varchar(20) ; 54、select语句中使用聚合函数时不能直接用于where;having后接group by;通配符标识词为like,正则表达式标识符为regexp;union语句将结果合并到一起; 55,使用正则表达式可匹配字符串,如指定多个字符时,可用“|”隔开。“^”表字符串开始位置,"表字符串结束位置,“.”代表字符串任意字符, 56、 特别字符 描述 也匹配 '\n' 或 '\r'。要匹配 。 ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。

  • 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。

  • 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。 . 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 . 。 [ 标记一个中括号表达式的开始。要匹配 [,请使用 [。 ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。 \ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '' 匹配 "",而 '(' 则匹配 "("。 ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 ^。 { 标记限定符表达式的开始。要匹配 {,请使用 {。 | 指明两项之间的一个选择。要匹配 |,请使用 |。 57、MySQL编程:一条或多条MySQL脚本组成,后缀名为.sql, 1、基本语句:顺序、选择、循环; 2、自定义变量:变量名、变量类型、变量值构成; 3、变量类型:1、以@开头的用户会话变量,2、局部变量; 4、系统会话于用户会话共同点:变量名大小写不敏感,区别:用户会话以一个@开头,系统会话以两个@开头,系统变量无需定义可直接使用。 5、会话的数据类型根据赋值运算符“=”右边表达式自动分配,select语句赋值采用“:=”赋值号形式,产生结果集,而“=”一般只做比较操作符使用,特殊情况下,“=”旨在set语句下做赋值号用; 6、declare命令专门定义局部变量,如declare myvar int default 100;赋值:set myvar = 77; 7、局部变量作用范围仅在存储程序中,运用场合:1、先定义,再用set、select赋值。2、局部变量作为存储过程或者函数的参数使用。3、在SQL语句中使用局部变量。 8、局部变量与用户会话区别:1、用户会话定义无需指定数据类型,2、用户会话变量的作用范围、生存周期大于局部变量,3、若局部变量嵌入到SQL语句中,由于其前面无“@”符号,则要求局部变量名不能与表字段同名。 9、SQl表达式:1、按照表达式值类型分类(字符型、数值型、日期型)。2、按值形式分类(标量表达式、行表达式、表表达式)。3、按表达式形式分类(单一表达式,复合表达式)。 58、视图和索引 视图可分为检查视图和普通视图:不使用with check option子句时,表其值为0,为普通视图,其不具检查功能。如使用时,只有满足检查条件才能成功执行。 59、视图作用:1、简化数据查询和处理。2、屏蔽数据库的复杂性。3、安全性。 创建视图:视图可创建在单表或多表上,也可创建在既有视图上,语法格式:create or replace={undefined|merde|temptable} view viewname [(column_list)] as select_statement [with [caseaded| local] check option];1、create view语句创建新的视图,如给定了or replace还可以替换已有视图。2、algorithm={undefined|merge|temptable}:undefined表自动选择算法,merge表合并视图定义和视图语句,使视图定义的某以部分取代语句对应部分,temptable,表将视图存储在临时表,利用临时表执行语句。3、视图定义限制:(1、其from子句不能使用子查询;2、其语句不能引用系统或用户变量;3、其语句不能引用预处理语句参数;4、视图定义中允许使用order by语句,但从特定视图进行选择,该视图使用具有自己order by语句,他将被忽略;5、定义时不能使用temporary表,不能创建temporary视图;6、不能将触发程序与视图关联在一起。)注:已存在视图上创建视图:create view newview ... from oldview ...; 60、索引 1、加速数据检索:由一列或多列组合而成的一种特殊的数据库结构,利用索引可以快速查询表中记录数据;2、优化查询:索引可以加速连接、排序和分组等;3、强制实施行的唯一性。 2、索引分为:普通索引(index)、主键索引(PK)、唯一性索引(unique),索引列值唯一,允许有空值,如为组合索引,则列值的组合唯一,一表可有多个唯一性索引、全文索引(full text)、空间索引(sqatial)。 3、设置索引原则:1、索引过多,影响其他语句性能(insert、update、delete),避免对经常更新的表创建更多的索引,要限制索引个数;2、数据量大、更新较少、查询较多,可建多个索引,提高性能,包含大量重复值的列创建索引,查询时间会较长;3、不对数据库中某个含大量重复值字段建立索引,其可能会影响性能;4、对于不经常使用和不再使用的索引要及时删除。5、若创建时有两个空值或重复值,则索引不能被成功建立,6、InnoDB数据引擎的索引键最长支持767字节,MYISAM数据引擎支持1000字节;7、经常需要排序、分组和联合操作的字段一定要建立索引,即将用于join、where、order by的字段上创建索引。 4、创建索引:1、create [unique|fulltext|spatial] index index_name on table_name (index_col_name,...),2、创建表时在后面直接添加就行index indexname();,3、通过alter table 修改时add index indexname();添加即可。 5、删除索引:drop index indexname on tablename; 61、自定义函数: delimiter 开始符号 create function fun_name(有参加参(参数名称 参数数据类型),无参空) returns 返回值数据类型 begin 函数体 end 结束符号 SHOW FUNCTION STATUS;#少量时索引全部 SHOW FUNCTION STATUS LIKE 'my_%';#大量时特征查找 SHOW CREATE FUNCTION 函数名;#查找详细信息 alter function fun_name 修改部分; drop function fun_name;#删除函数 62、条件语句 if 条件 then; elseif 条件 then; else end if;

case value when value then…; …… else … end case;

case when 表达式 then…; …… else end case;

条件判断函数 if(条件,v1,v2): 满足条件返回v1,不满足返回v2。 ifnull(v1,v2):如果v1为null,返回v2,否则返回v1。 63、循环语句 while 条件 do end while;

loop_label:loop leave loop_label; end loop; 注:leave退出循环返回结果,iterate结束本次循环。

repeat until 条件(为真则退出) end repeat; 64、自定义变量 1、会话数据类型由等号后面的结果决定; 2、采用":="形式时能够产生结果集,而赋值形式的语句,仅仅用于会话变量的定义和赋值。 1、set定义: SET @number=100; SET @number1:=110; SET @char='abcde'; SET @number=(语句); 2、select定义: select @user_variable := experssion1; select expersion1 into @user_variable; 3、局部变量:必须定义在函数、触发器、存储过程等存储程序,其作用范围仅在存储程序中 declare 变量名 数据类型 default 初始值; 4、系统变量与局部变量对大小写都不敏感,但系统变量有@@,局部变量有@,且系统变量使用无需定义,而局部变量需定义。 set 变量名=数据; 5、在Mysql语言中,局部变量、begin…end语句块和流程控制语句等只能用于函数、存储过程、游标和触发器的定义内部。 6、MySQL数据库中的prepare、execute、deallocate统称为预处理语句,预处理语句的范围是客户端会话,在此会话内,语句被创建,其他客户端看不到。 7、预处理SQl语句的使用步骤:1、创建、处理、释放预处理SQL语句。 65、定界符delimiter和begin...end语句块。 66、describe table_name;查看已创建好的数据表结构。 67、SQL语言支持数据库三级模式结构,在SQL中,模式对应于基本表,内模式对应于存储文件,外模式对应于视图和部分基本表,元组对应于表中的行,属性对应于表中的列。 68、存储过程:一组完成特定功能的SQl语句集合,即将一些固定操作集中起来由SQL服务器完成,应用程序只需调用它就可以实现某个特定的任务。存储过程是可以通过用户、其他存储过程或触发器来调用执行的。 69、游标:一种实现对select结果集中的数据进行访问和处理的机制,允许用户访问单独的数据行。SQL中一般通过存储过程来实现其操作。 70、触发器是一种特殊的存储过程。实现了强制业务规划和数据完整性等。 71、事件又称事件调度器,有时也可称为临时触发器,事件调度器是基于特定时刻或时间周期触发来执行某些任务,而触发器是基于对表进行操作所产生的事件触发的。 72、1、视图若只依赖一个基表,则可以直接通过视图来来更新基表的数据;2、若一个视图依赖于多张基本表,则一次只能修改一张基表的数据。 73、存储过程创建:create procedure prcd_name(in/out/inout){};执行call prcd_name(value); 执行存储过程需要有execute权限,其在数据库information_schema下的user_privileges表中。 74、查看存储过程定义:1、show procedure status like ''; 2、show create procedure prcd_name; 3、select * from information_schema.routines where routine_name='prcd_name'; 75、修改存储过程:alter procedure prcd_name [characteristic...]; 76、删除存储过程:drop procedure prcd_name(); 77、1、声明游标:declare cursor_name cursor for select_statement; 2、打开游标:open cursor_name; 3、数据提取:fetch cursor_name into var1[,var2,...];注:数据只能从前往后提取。4、关闭游标:close cursor_name; 78、触发器:分为insert、update、delete三类,每类又可以根据after、before区分。 创建触发器:create trigger trgr_name after/before insert/update/delete on table_name for each row trigger_statement(操作语句);可用new.或old.来访问新旧值。 79、查看触发器:show trigger;select * from information_schema.trigger; 80、注:1、触发器程序中含select语句,该select语句不能返回结果集;2、触发器中不能使用显式或隐式方式打开、开始或结束事务的语句,如:start、transaction、commit、rollback或者set autocommit=0等语句。3、在MyISAM存储引擎中,触发器不能保证原子性,InnoDB存储引擎支持事务,使用触发器可以保证操作与触发过程的原子性,此时触发程序和更新程序是在同一个事务中完成的。4、触发器对记录进行操作,当批量更新数据时,引入触发器会导致更新操作性能降低。5、InnoDB存储引擎建议使用级联选项维护外键数据,MyISAM存储引擎虽不支持外键约束,但可以使用触发器实现级联修改和级联删除,进而维护外键数据,模拟实现外键约束关系。6、用触发器维护InnoDB外键约束的级联选项时,先维护子表数据,再维护父表数据。7、Mysql触发程序不能对本表使用更新语句,触发器更新操作用set命令代替,否则出现错误,甚至死循环。8、在before触发程序中,auto_increment字段的new值为0,不是实际插入新记录时自动生成的自增型字段值。9、添加触发器后,建议对其反复测试,确认无误后再使用。 81、删除触发器,drop trigger trigger_name; 82、事件:开启事件调度器:SET @@global.event_scheduler = TRUE;或者:在MySQL配置文件my.ini中加一行,event_scheduler=1;重启MySQL服务器。查看事务调度器:SHOW VARIABLES LIKE 'event_scheduler'; SELECT @@event_scheduler; 83、创建事件,create event [if not exists] event_name on schedule schedule (do sql_statement)/(begin...end). 84、查看事件:show events from schema_name; 85、修改事件:alter event event_name doing; 86、删除事件:drop event event_name;


二、复习环节 1、MySQL为开源数据库。 2、结构化查询语言包含:1、数据定义语言(DDL){语句包含动词:create、alter、drop等};2、数据操作语言(DML){动词包括select、insert、update、delete};3、数据控制语言(DCL){grant、revoke}; 3、数据库设计基本过程:需求分析、概念设计、逻辑设计、物理设计。 4、规范化的关系模式存在数据冗余度大,更新异常,插入异常,删除异常的可能性小。 5、 6、SHOW VARIABLES LIKE 'InnoDB_data%';查看数据库的表空间。 7、SHOW VARIABLES LIKE "InnoDB_file_per_table";查看当前数据库的表空间管理类型,on代表独立空间类型,off代表共享空间管理类型。 8、创建表时前加temporary,表示此表为临时表。 9、describe tablename;查看表的基本结构,查看表的详细结构:show create table tablename; 10、用load data语句把数据装到数据库表中。如:load data local infile "文件路径" into table tablename;注:各行文本间用分隔,每行最后也分隔,书写路径时用""表示斜线。 11、数据库创建过程:需求分析->概念模型->关系模型->逻辑分析->物理模型->后台维护。 12、select语句可实现库与库,表与表之间的联系。 13、无where子句的count(*)是经过内部优化的,能够快速返回表中所有的记录数据。 14、索引优点:1、加速数据检索,索引能以一列或多列值为基础实现快速查找数据行。2、优化查询,查询优化器依赖索引起作用,索引能加速连接、排序和分组等。3、强制实施行的唯一性,通过给列创建唯一索引,保证表中数据不重复。 15、视图、定义视图时基本表可以是当前数据库的表,也可以是另一数据库的基本表,只需在表名前添加数据库名即可,如mysql.table; 16、视图查询时,若基表中添加了新字段,则该视图不包含新字段;如与视图相关联的表或视图被删除,则该视图将不能再使用。 17、存在以下情况:1、视图列含有聚合函数;2、视图列含通过表达式计算其他列;3、含distinct关键字;4、含group by,order by,having子句,含union运算符;5、视图列位于选择列表的子查询;6、from子句中包含多表,select语句中引用了不可更新视图;7、where子句中的子查询,引用from子句中的表。 18、存储过程优势:1、提高了处理复杂任务的能力。2、增强代码的复用率和共享性。3、减少网络中数据的流量。4、存储过程在服务器注册,加快了过程的运行速度。5、加强了系统的安全性。 19、


三、课外学习* 1、通过autocommit设置事务值。 2、通过begin手动开启事务。 3、事务开启后,一旦commit提交,就不可回滚,(也就是当前这个事务在提交的时候就结束了)。 4、事务的四大特征: A:原子性,事务为最小的单位,不可以再分割。 C:一致性,事务要求,同一事务的SQL语句,必须保证同时成功或失败。 I:隔离性,事务1和事务2之间是具有隔离的。 D:持久性,事务一旦结束(commit,rollback),就不可以返回。 5、事务开启: 1、修改默认提交,set autocommit=0; 2、begin; 3、start transaction; 6、事务提交:commit; 7、事务手动回滚:rollback; 8、事务的隔离性:注:隔离级别不同产生结果不同 1、read uncommitted; 读未提交的 *有事务A,事务B,A事务对数据进行操作,在操作过程中,事务未被提交,但是B可以看见A操作的结果(脏读)。 查询、修改隔离级别,系统级别的:select @@global.transaction_isolation;会话级别的:select @@transaction_isolation;修改set global transaction isolation level read uncommitted; 2、read commited; 读已经提交的 隔离级别:read commited 有A,B,A对数据进行查询,B在A不知情的情况下对数据进行修改,A再次对数据进行操作,发现前后操作结果不同(不可重复读现象)。 3、repeatable read; 可以重复读 隔离界别:repeatable read 有A,B同时操作一张表,A提交的数据自己可读,B不可读,B在操作时发生错误(幻读)。 4、serializable; 串行化 隔离界别:serializable 有A,B操作同一张表,A对表进行操作时,B也在操作,则B进入等待状态。 串行化问题是,性能特差。 read uncommitted > read commited > repeatable read(系统默认状态) > serializable(隔离级别越高,性能越差)。 9、索引帮助MySQL高效获取数据的排好序的数据结构,索引数据结构(二叉树、红黑树(二叉平衡树)、Hash表、B-Tree); 10、索引规约:1、业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。如无唯一索引,根据墨菲定律,必然有脏数产生。2、超过三个表禁止join。3、在varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本建立索引。4、页面搜索严禁左模糊或者全模糊,如需要请走搜索引擎来解决。5、索引如果存在范围查询,那么索引有序性无法利用。,而其他情况需注意索引的有序性。6、利用覆盖索引来及进行查询操作,避免回表。7、利用延迟关联或者子查询优化超多分页场景。8、SQl优化目标:至少达到range级别(对索引进行范围检查),要求ref级别(使用普通索引),最好consts级别。(单表中最多只有一个主键或唯一索引,在优化阶段即可读取到数据。) 11、MySQL表关联的两种算法:Nested-Loop Join算法、Block Nested-Loop Join算法。 12、InnoDB索引实现聚焦:1、表数据文件本身就是按B+Tree组织的一个索引结构文件;2、聚焦索引-叶节点包含了完整的数据记录;3、建议InnoDB表必须建主键,并且推荐使用整性的自增主键。4、非主键索引结构的叶子节点存储主键值保证了一致性和节省了存储空间。 13、Hash结构:对索引的key进行一次hash计算就可以定位出数据存储的位置,很多时候Hash索引要比B+tree索引高效,其仅能满足“=”,“IN”,不支持范围查询,存在hash冲突问题。 14、B-tree变种:非叶子节点不存储data,只存储索引(冗余),可以放更多的索引;叶子节点包含所有索引字段;叶子节点用指针连接,提高区间访问的性能。 15、B-tree:叶节点具有相同深度,叶节点的指针为空;所有索引元素不重复;节点中的数据索引从左到右递增排列。 16、is null:仅可以判断null值,可读性较高,建议使用。<=>:既可以判断null值,也可判断普通的数值,可读性较低。 17、占位符使用时,可用其他符号代替原始数据中包含占位符的字段,但需要在其后申明。如:查询某表某段第二字符为""的字段,select * from table where something like ''; 18、登录MySQL的方式:mysql [-h主机名 -p端口号] -u用户名 -p密码(mysql -h localhost -P 3306 -u root -proot),退出操作:exit或ctrl + c;mysql版本查看:select version(); mysql --version; mysql --V;查看当前所处数据库:select database(); 19、数据库的好处:1、可以持久化数据到本地;2、结构化查询,方便管理。 20、查看系统变量:show [global|session] variables like '';如没有显式声明global还是session,则默认是session。 21、查看指定的系统变量的值,select @@globao|session.变量名;如没有显式声明global还是session,则默认是session。 22、更新值时:1、set @变量名 = 值 或 set @变量名 := 值 或 select @变量名 := 值。 2、select xx into @变量名 from table; 23、 查看存储过程名:show create procedure 存储过程名;删除存储过程名:drop procedure 存储过程名; 24、str_to_date函数:将日期格式的字符转换成指定格式的日期(str_to_date('9-13-1999',%m-%d-%Y),字母代表含义需查表)。 25、date_format函数:将日期转换成字符(date_format('2018/6/4','%Y年%m月%d日'))。 26、

你可能感兴趣的:(Mysql知识点总结)