《MySQL必知必会》读书笔记

Posted by Waynerv on

category: 数据库

Tags: 读书笔记

使用Python连接MySQL数据库-PYMySQL

使用Python连接MySQL数据库-mysql-connector

第1章了解SQL

数据库基础

  1. 保存有组织的数据的容器(通常是一个文件或一组文件,想象为文件柜),而数据库软件应称为DBMS(数据库管理系统)
  2. 表是某种特定类型数据的结构化清单,表名是唯一的
  3. Schema(模式)关于数据库和表的布局及特性的信息
  4. 列(column)是表中的一个字段。所有表都是由一个或多个列组成的
  5. 所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。创建表时应多加关注数据类型
  6. 行(row)&记录(record)——在很大程度上,这两个术语是可以互相替代的,但从技术上说,行是正确的术语
  7. 主键,一列(或一组列),其值能够唯一区分表中每个行。
    • 任意两行都不具有相同的主键值
    • 每个行都必须有一个主键值(且不允许为NULL值)
    • 当主键为列值的组合时,列值的组合必须唯一,但单个列的值可以不唯一

SQL

  1. SQL是结构化查询语言,专门用来与数据库通信

第2章MySQL简介

MySQL简介

  1. 基于客户机-服务器的数据库

MySQL工具

  1. 直接使用mysql命令行程序

第3章使用MySQL

连接

  1. 安装:通过官网链接及指导文档使用apt-get安装,安装时需要设置root账户密码
  2. 登录数据库:Ubuntu使用命令mysql -u root -p,然后输入密码登入MySQL
  3. 主机名和端口:一般默认为localhost3306
  4. 执行任意数据库操作前,需要选择一个数据库:USE yourdatabase;
  5. 常用命令:SHOW DATABASES,SHOW TABLES,HELP SHOW, SHOW GRANTS, SHOW ERRORS, SHOW WARNINGS
    • DESCRIBE customersSHOW COLUMNS FROM customers的快捷方式

第4章检索数据

SELECT语句

  1. SELECT想选择什么,FROM从什么地方选择

检索单个列

  1. SELECT terms FROM table;,返回结果的顺序没有特殊意义
  2. SQL语句不区分大小写,习惯对SQl关键字大写,对所有列和表名使用小写,更易于阅读
  3. mysql命令行必须加上分号来结束SQL语句

检索多个列

  1. SELECT term01, term02, term03 FROM table;

检索所有列

  1. 使用星号*通配符:SELECT * FROM table;

检索不同行

  1. 使用DISTINCT关键字,它必须直接放在列名的前面,而且应用于所有列,不能部分使用

限制结果

  1. 使用LIMIT字句,指定检索的开始行和行数(类似于Python中的切片[x:y])

使用完全限定的表名

  1. 同时使用表明和列字(类似Python中的绝对导入,访问实例属性)

第5章排序检索数据

排序数据

  1. 如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义
  2. 使用ORDER BY子句:SELECT term01 FROM table ORDER BY term02;

按多个列排序

  1. 指定列名,列名之间用逗号分开即可(类似EXCEL中的多个排序条件)
  2. 语句为SELECT term01, term02 FROM table ORDER BY term02, term01;

指定排序方向

  1. 默认为升序(ASC),使用DESC关键字设置为降序(只应用到直接位于关键字前面的列名)
  2. 如果想在多个列上进行降序排序,必须对每个列指定DESC关键字
  3. 排序中是否区分大小写及他们排序顺序取决于数据库如何设置
  4. 子句顺序:FROM --> ORDER BY --> LIMIT

第6章过滤数据

使用WHERE子句

  1. SELECT term01, term02 FROM table WHERE term01 = condition;,位于FROM子句之后,ORDER BY子句之前
  2. 尽量通过数据库过滤数据,让应用处理数据过滤会极大影响应用性能且导致网络带宽的浪费

WHERE子句操作符

  1. 和Python比较操作符基本相同,特例:BETWEEN a AND b
  2. 检查单个值:WHERE prod_name=‘fuses’
    • MySQL在执行匹配时默认不区分大小写,所以fuses与Fuses匹配
  3. 不匹配检查:使用!=或<>,字符需要用单引号限定,数值不需要
  4. 范围值检查:BETWEEN匹配范围中所有的值,包括指定的开始值和结束值
  5. 空值检查:IS NULL是一个特殊的WHERE子句,用来检查具有NULL值的列
  6. 具有NULL值的行无法通过匹配过滤或不匹配过滤来返回,因此需要单独验证

第7章数据过滤

组合WHERE子句

  1. AND操作符:检索满足所有给定条件的行
  2. OR操作符:检索匹配任一条件的行
  3. 计算次序:AND的计算次序优先级更高,但任何时候都应该用圆括号明确的分组操作符
示例:WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;
  1. IN操作符:用来指定条件范围,范围中的每个条件都可以进行匹配,功能与OR相当
    • 一般来说比OR操作符执行得更快
  2. NOT操作符:否定后跟条件的关键字,MySQL支持使用NOT对IN、BETWEEN和EXISTS子句取反

第8章用通配符进行过滤

LIKE操作符

  1. 百分号%通配符:WHERE prod_name LIKE 'jet%'匹配任意以jet起头的词 ,接受jet之后的任意数量任意字符,%还能匹配0个字符,注意是否区分大小写
  2. 通配符可在搜索模式中任意位置使用,如'%anvil%'匹配'1 ton anvil',但注意%不能匹配NULL
  3. 下划线_通配符:总是匹配一个字符,不能多也不能少

使用通配符的技巧

  1. 通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长
  2. 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符
  3. 注意LIKE操作符匹配的是整个列,如果被匹配的文本在列值中出现,LIKE无法匹配

第9章用正则表达式进行搜索

正则表达式介绍

  1. MySQL仅支持多数正则表达式实现的一个很小的子集

使用MySQL正则表示式

  1. 基本字符匹配:WHERE prod——name REGEXP '1000','.'匹配任意一个字符
  2. 正则表示匹配不区分大小写,可使用BINARY关键字区分大小写:REGEXP BINARY ''
  3. 进行OR匹配:使用|从功能上类似于用OR语句,多个OR条件可并入单个正则表达式:'1000 | 2000 | 3000'
  4. 匹配几个字符之一:正则表达式[123]Ton为[1|2|3]Ton的缩写,[^123]匹配除这些字符外的任何东西
  5. 匹配范围:[0123456789]=[0-9],[a-z]和[A-Z]匹配任意字母字符
  6. 匹配特殊字符:MySQL要求使用两个反斜杠来转义,MySQL自己解释一个,正则表达式库解释另一个
  7. 匹配字符类:
说明
[:alnum:] 任意字母和数字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表(同[\t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与[:print:]相同,但不包括空格
[:lower:] 任意小写字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在内的任意空白字符(同[\f\n\r\t\v])
[:upper:] 任意大写字母(同[A-Z])
[:xdigit:] 任意十六进制数字(同[a-fA-F0-9])
  1. 匹配多个实例:REGEXP '\\([0-9] sticks?\\)',?匹配它前面的任何字符的0次或1次出现
元字符 说明
* 0个或多个匹配
+ 1个或多个匹配(等于{1,})
? 0个或1个匹配(等于{0,1})
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)
  1. 定位符:[0-9\.]只在.或任意数字为串中第一个字符时才匹配它们
元字符 说明
^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾
  1. LIKE匹配整个串而REGEXP匹配子串

第10章创建计算字段

计算字段

在数据库服务器上完成转换和格式化操作比在客户机中完成要快得多

拼接字段

  1. 使用Concat函数拼接多个列与字符串,用逗号分隔(字符串包括通配符)
  2. 使用LTrim,RTrim函数删除串左右的空格
  3. 使用AS关键字赋予别名,以便客户机可以引用

执行算术计算

  1. 支持加减乘除四个基本操作符
  2. 计算后用别名加以引用

第11章使用数据处理函数

文本处理函数

函数 说明
Left() 返回串左边的字符
Right() 返回串右边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Upper() 将串转换为大写
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值
SubString() 返回子串的字符

日期和时间处理函数

函数 说明
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
Time() 返回一个日期时间的时间部分
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Now() 返回当前日期和时间
Hour() Minute() Second() Month() Year() 返回一个日期或时间的对应部分

数值处理函数

常用:返回绝对值Abs(),返回余数Mod(),返回随机数Rand()

第12章汇总数据

聚集函数

  1. 聚集函数:运行在行组上,计算和返回单个值
  2. Avg():返回单个特定数值列的平均值,只作用于单个列,忽略列值为NULL的行
  3. COUNT():COUNT(*)对表中行的数目进行计数,包括NULL。用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。
  4. MAX()MIN()SUM()分别返回列的最大值、最小值、列值的和
  5. 聚集函数中可使用标准算术操作符,如:SUM(item_price*quantity)
  6. 只包含不同值,使用DISTINCT关键字(只作用于列名)
  7. SELECT语句可根据需要包含多个聚集函数

第13章分组数据

创建分组

  1. 类似与Excel中的数据透视,按GROUP BY指定列进行分组,对各组的结果集进行聚集计算然后分组展示
  2. GROUP BY子句可以包含任意数目的列
  3. 如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总
  4. GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)
  5. 除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出。

过滤分组

  1. 分组数据中WHERE不起作用,需使用HAVING,HAVING支持所有WHERE操作符
  2. WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤

分组和排序

ORDER BY GROUP BY
排序产生的输出 分组行。但输出可能不是分组的顺序
任意列都可以使用(甚至非选择的列也可以使用) 只可能使用选择列或表达式列,而且必须使用每个选择列表达式
不一定需要 如果与聚集函数一起使用列(或表达式),则必须使用

SELECT子句顺序

子句 说明 是否必须使用
SELECT 要返回的列或表达式
FROM 从中检索数据的表 仅在从表选择数据时使用
WHERE 行级过滤
GROUP BY 分组说明 仅在按组计算聚集时使用
HAVING 组级过滤
ORDER BY 输出排序顺序
LIMIT 要检索的行数

第14章使用子查询

  1. 在子查询的基础上再次进行查询,即把一条SELECT语句返回的结果用于另一条SELECT语句的WHERE子句
  2. 在WHERE子句中使用子查询,应该保证SELECT语句具有与WHERE子句中相同数目的列

第15章联结表

  1. FROM列出表名,WHERE指示联结条件即可创建联结
  2. 应该保证所有联结都有WHERE子句,否则会返回笛卡尔积
  3. 内部联结:SELECT item1, item2... FROM table1 INNER JOIN table2 ON %%%(与WHERE方式等同)
SELECT user.* FROM user JOIN address ON user.id = address.user_id
  1. 联结多个表时,性能会有所下降

第16章创建高级联结

  1. 自联结:使用表别名虚拟同原表相同的联结表,用来替代从相同表中检索数据时使用的子查询语句
  2. 自然联结:排除多次出现,使每个列只返回一次(没什么用的概念)
  3. 外部联结:* LEFT(RIGHT) OUTER IOIN * ON %%,从左边选择所有行,展示其关联行,没有关联行的表示为NULL
  4. 聚集函数可以与联结一同使用

第17章组合查询

  1. 任何具有多个WHERE子句的SELECT语句都可以作为一个组合查询给出
  2. 使用Union执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回(结果集之间为的关系
  3. UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过各个列不需要以相同的次序列出)
  4. UNION从查询结果集中自动去除重复的行
  5. 使用UNION ALL,不取消重复的行
  6. 在用UNION组合查询时,只能使用一条ORDER BY子句,必须出现在最后一条SELECT语句之后

第18章全文本搜索

  1. 仅MyISAM引擎支持全文本搜索,InnoDB引擎不支持
  2. 为了进行全文本搜索,必须索引被搜索的列,而且要随着数据的改变不断地重新自动索引
  3. 在CREATE TABLE 语句中使用FULLTEXT(列名)开启全文本搜索,需要时可指定多个列
  4. 其中Match()指定被搜索的列,Against()指定要使用的搜索表达式,SELECT Match()和Against()可建立一个计算列包含全文本搜索的等级值。
  5. 传递给Match()的值必须与FULLTEXT()定义中的相同
  6. 全文本搜索默认不区分大小写
  7. Against('%%' WITH QUERY EXPANSION)开启查询扩展找出尽可能相关的结果
  8. 如果一个词出现在50%以上的行中,则将它作为一个非用词忽略。50%规则不用于IN BOOLEAN MODE
  9. 如果表中的行数少于3行,则全文本搜索不返回结果
  10. 忽略词中的单引号,不具有词分隔符(包括日语和汉语)的语言不能恰当地返回全文本搜索结果

布尔文本搜索

  1. 没有定义FULLTEXT索引,也可以使用布尔文本搜索,但效率很低
  2. 布尔操作符:SELECT note_text FROM product_notes WHERE Match(note_text) Against('+rabbit +fat' IN BOOLEAN MODE);
布尔操作符 说明
+ 包含,词必须存在
- 排除,词必须不出现
> 包含,而且增加等级值
< 包含,且减少等级值
() 把词组成子表达式(允许这些子表达式作为一个组被包含、排除、排列等)
~ 取消一个词的排序值
* 词尾的通配符
"" 定义一个短语(与单个词的列表不一样,它匹配整个短语以便包含或排除这个短语)

第19章插入数据

插入一组或多组值

  1. 插入完整的行(也可不显式指定对应的列名按次序填充):
INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );
  1. 如果不提供列名,则必须给每个表列提供一个值,一般不要使用没有明确给出列的列表的INSERT语句
  2. 允许NULL值或有默认值的列INSERT时可省略
  3. 在INSERT和INTO之间添加关键字LOW_PRIORITY,指示MySQL降低INSERT语句的优先级以提高检索性能
  4. INSERT可一次性插入多组值,VALUES每组值用一对圆括号括起来,用逗号分隔(或使用多个INSERT语句用分号分隔)
  5. 用单条INSERT语句处理多个插入比使用多条INSERT语句快

插入检索出的数据

  1. 用SELECT替换VALUES语句可直接插入检索到的语句(不要求列名匹配),SELECT语句可包含WHERE过滤子句。

第20章 更新和删除数据

更新数据

  1. 更新表中特定行:UPDATE customers SET cust_mail = 'xxx@fudd.com' WHERE cust_id = 10005;
  2. 更新表中多个列:使用单个SET命令,每个’列=值‘对之间用逗号分隔
  3. 更新表中所有行:不使用WHERE

删除数据

  1. 删除某个列的值,可更新它为NULL
  2. 删除表中特定数据:DELETE FROM customers WHERE cust_id = 10006;
  3. 删除表中所有行:不加WHERE。
  4. DELETE不需要列名或通配符,DELETE删除整行而不是删除列。为了删除指定的列,请使用UPDATE语句
  5. DELETE删除表的所有内容但不删除表本身
  6. TRUNCATE TABLE语句快速删除所有行(实际是删除原来的表并重新创建一个表,而不是逐行删除)。
  7. 除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句

第21章创建和操纵表

创建表

  1. 创建表(NULL为默认设置):
CREATE TABLE [IF NOT EXISTS] runoob_tbl(
   runoob_id INT NOT NULL AUTO_INCREMENT,
   runoob_title VARCHAR(100) NOT NULL,
   runoob_author VARCHAR(40) NOT NULL,
   PRIMARY KEY (runoob_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. 空串是一个有效的值,它不是无值。NULL值用关键字NULL而不是空串指定
  2. 主键值必须唯一,主键中只能使用不允许NULL值的列
  3. 每个表只允许一个AUTO_INCREMENT列,而且必须被索引(如使它成为主键)
  4. 可使用last_insert_id()函数返回最后一个AUTO_INCREMENT值:SELECT last_insert_id();
  5. 使用DEFAULT关键字指定默认值
  6. 外键不能跨引擎
  7. InnoDB支持事务处理,但不支持全文本搜索;MyISAM支持全文本搜索,但不支持事务处理

更新表

  1. 当表中存储数据以后,该表就不应该再被更新
  2. 添加或删除列(必须明确数据类型):ALTER TABLE vendors ADD/DROP vend_phone CHAR(20);
  3. 添加外键:ALTER TABLE vendors ADD CONSTRAINT fkname(定义外键名称) FOREIGN KEY (cust_id) REFERENCES customers(cust_id);
  4. 结构较复杂的表建议不修改直接建新表复制原内容

删除表

  1. DROP TABLE cuetomers;

重命名表

  1. RENAME TABLE customers TO customers1;(逗号分隔可重命名多个)

第22章使用视图

  1. 使用视图将复杂的查询语句包装成一个虚拟表,在虚拟表基础上再查询或更新
  2. 作为视图,它不包含表中应该有的任何列或数据,它包含的是一个SQL查询,并在每次调用时执行查询。因此同一视图获取的内容是动态更新的
  3. 作用:重用SQL语句,简化复杂操作,保护数据,更改数据格式和表示
  4. 使用视图:CREATE VIEW viewname AS SELECT **
    • 视图用CREATE VIEW语句来创建,即在SELECT语句之前加上CREATE VIEW viewname AS。
    • 使用SHOW CREATE VIEW viewname;来查看创建视图的语句。
    • 用DROP删除视图,其语法为DROP VIEW viewname;。
    • 更新视图时,可以先用DROP再用CREATE,也可以直接用CREATE OR REPLACE VIEW。如果要更新的视图不存在,则第2条更新语句会创建一个视图;如果要更新的视图存在,则第2条更新语句会替换原有视图
  5. 从复杂联结的表中检索出指定列后创建视图
  6. 重新格式化检索出的数据后创建视图
  7. 用WHERE过滤不想要的数据后创建视图
  8. 对指定列进行计算后创建视图(使用别名)
  9. 视图可更新,但一般情况下应该仅用于检索

第23章存储过程

  1. 存储过程是为以后的使用而保存的一条或多条MySQL语句的集合,可将其视为包含多个复杂过程的批处理文件
  2. 好处:简单、安全、高性能
  3. 执行存储过程:CALL procedurename(@args01, @args02, args@03);
  4. 创建存储过程:CREATE PROCEDURE procedurename() BEGIN XXXXXXXXX END;
  5. 删除存储过程:DROP PROCEDURE [IF EXISTS]procedurename;
  6. 使用参数:MySQL支持IN(传递给存储过程)、OUT(从存储过程传出)和INOUT(对存储过程传入和传出)类型的参数。(通过指定INTO关键字,保存到相应的变量)
  7. 存储过程中记录集不是允许的类型,因此不能通过一个参数返回多个行和列
  8. 检查存储过程:SHOW CREATE PROCEDURE procedurename;

第24章使用游标

  1. MySQL游标只能用于存储过程(和函数)
  2. 定义游标DECLARE cursorname CURSOR FOR SELECT ......,使用游标前,必须先定义并打开
  3. 游标可以实现在存储过程内,对SELECT语句检索出的数据集,根据需要取出各行,并进行操作
  4. 打开和关闭游标:OPEN cursorname;,CLOSE cursorname;(到达END语句时自动关闭游标)
  5. 使用游标数据:FETCH cursorname INTO localvar,然后对localvar进行操作
  6. 定义循环:DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000’ SET done=1;重复语句:REPEAT

第25章使用触发器

  1. MYSQL响应DELETE、UPDATE、INSERT语句(之前或之后)而自动执行的一条语句(或一组语句)
  2. 创建触发器:CREATE TRIGGER triggername AFTER INSERT ON productsF FOR EACH ROW SELECT 'Product added';
    • 唯一的触发器名
    • 触发器关联的表
    • 触发器应该响应的活动( DELETE 、 INSERT 或 UPDATE )
    • 触发器何时执行(处理之前或之后)
  3. 删除触发器:DROP TRIGGER triggername;

使用触发器

  1. INSERT触发器:可引用NEW虚拟表访问修改被插入的行SELECT NEW.order_num
  2. DELETE触发器:可引用OLD虚拟表访问被删除的行(但不能更新),使用BEFORE DELETE触发器确保删除操作可存档
  3. UPDATE触发器:可引用NEW虚拟表访问修改要用于UPDATE的值,可引用OLD虚拟表访问被更新的值(OLD表不能更新)SET NEW.vend_state = Upper(NEW.vend_state)
  4. 创建触发器需要权限,但执行不需要

第26章管理事务处理

  1. 事务处理用来保证成批的MySQL操作要么完全执行,要么完全不执行
    • 事务( transaction )指一组SQL语句;
    • 回退( rollback )指撤销指定SQL语句的过程;
    • 提交( commit )指将未存储的SQL语句结果写入数据库表;
    • 保留点( savepoint )指事务处理中设置的临时占位符(place- holder),你可以对它发布回退(与回退整个事务处理不同) 。

控制事务处理

  1. 标识事务开始:START TRANSACTION;
  2. ROLLBACK 只能在一个事务处理内使用,回退所有INSERT 、 UPDATE和DELETE语句(不包括CREATE和DROP)
  3. 当 COMMIT 或 ROLLBACK 语句执行后,事务会自动关闭
  4. 使用保留点:SAVEPOINT delete1; ROLLBACK TO delete1;
  5. 更改默认提交行为:SET autocommit=0;

第27章全球化和本地化

  1. 给表指定字符集和校对顺序:DEFAULT CHARACTER SET utf8 COLLATE utf8_general-ci
  2. 区分大小写:_cs;不区分大小写:_ci
  3. 给每个列设置字符集和校对顺序:column VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general-ci 4.可以使用与创建表时不同的校对顺序排序特定的 SELECT语句(插入到ORDER BY语句后)

第28章安全管理

  1. 不应该在日常的MySQL操作中使用 root
  2. 访问用户管理库:USE mysql;SELECT user FROM user;
  3. 创建用户账号:CREATE USER kaka INDENTIFIED BY 'password'
  4. 删除用户账号:DROP USER kaka;
  5. 设置访问权限:GRANT SELECT,INSERT,UPDATE.... ON tablename.* TO kaka;
  6. 撤销特定权限:REVOKE SELECT,INSERT,UPDATE.... ON tablename.* TO kaka;
  7. 控制访问权限的层次:
    • 整个服务器,使用 GRANT ALL 和 REVOKE ALL
    • 整个数据库,使用 ON database.*
    • 特定的表,使用 ON database.table
    • 特定的列
    • 特定的存储过程
  8. 更改口令: SET PASSWORD FOR kaka = Password('newpassword')

第29章数据库维护

  1. 进行数据库维护:ANALYZE TABLE tablename;CHECK TABLE tablename01,tablename02;
  2. 查看日志文件:错误日志hostname.err,查询日志hostname.log,二进制日志hostname-bin,缓慢查询日志hostname-slow.log

第30章改善性能

  1. 使用 EXPLAIN 语句让MySQL解释它将如何执行一条 SELECT 语句
  2. 一般来说,存储过程执行得比一条一条地执行其中的各条MySQL语句快
  3. 必须索引数据库表以改善数据检索的性能
  4. 索引改善数据检索的性能,但损害数据插入、删除和更新的性能
  5. LIKE 很慢。一般来说,最好是使用 FULLTEXT 而不是 LIKE

附录:数据类型

字符串

  1. CHAR表示1-255个字符的定长字符串,长度必须在创建时指定,若未指定,假定为CHAR(1).
  2. VARCHAR长度可变字符串,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和结束位占去了3个字 节,在创建时必须指定为VARCHAR(n),n<=255。

注:转载本文,请与作者联系




如果觉得文章对您有价值,请作者喝杯咖啡吧

|
donate qrcode

欢迎通过微信与我联系

wechat qrcode

0 Comments latest

No comments.