【转载】《MySQL入门很简单》学习笔记

来源:互联网 发布:linux u盘启动盘 编辑:程序博客网 时间:2024/03/29 19:37

原文地址:http://blog.csdn.net/kimsoft/article/details/7099245

第 1章数据库概述

1.1、数据存储方式

1.人工管理阶段

2.文件系统阶段

3.数据库系统阶段

1.2、数据库泛型

数据库泛型就是数据库应该遵循的规则。数据库泛型也称为范式。目前关系数据库最常用的四种范式分别是:

第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和BCN范式(BCNF)

1.3、SQL语言

SQL(Structured Query Language)语言的全称是结构化查询语言。数据库管理系统通过SQL语言来管理数据库中的数据。

SQL语言分为三个部分:

数据定义语言(Data Definition Language,简称为DDL)、

数据操作语言(Data Manipulation Language,简称为DML)

数据控制语言(Data Control Language,简称为DCL)。

DDL语句:CREATE TABLE

DML语句:SELECT, INSERT, UPDATE ,DELETE

DCL语句:GRANT, REVOKE

1.4、为什么要使用MySQL

1.MySQL是开放源代码的数据库

2.MySQL的跨平台性

3.价格优势

4.功能强大且使用方便

1.5、常见数据库系统

1.甲骨文的Oracle

2.IBM的DB2

3.微软的Access和SQLServer

4.开源PostgreSQL

5.开源MySQL

6.文件数据库SQLite,

7.内存数据库HQL

 

第 2章 Windows平台下安装不配置MySQL

2.1、msi安装包

2.1.1、安装

特别要注意的是,安装前要删除原来的my.ini和原来的data目录,改名也行,不然在最后一步会“apply securitysettings”报个1045错误,原因1,防火墙,原因2,数据文件未清除。

一路next,选custom安装;可以指定data的位置,不要指定到系统盘;顺便配置,选择"detailed configuration";服务器类型和用途视开发还是生产环境

"best support for multilingualism"   支持大部分语系,默认字符集是UTF-8,用这个吧

"add firewall exception for this port" 最好选上,尤其在开发机

"enabled strict mode"  生产机推荐,开发机可以不用,选的话,容易出现刚开始要求注意的问题

"include bin directory in windows path"   强烈建议选上,不然要手动配置path路径

"create anonymous account" 就不要了

没有意外的话,成功搞定;安装后root登录不了的解决办法

mysql-h localhost -u root -p

cmd

net stop mysql

mysqld --skip-grant-tables

#注意,net start mysql --skip-grant-tables,能启动,但是好象达不到效果

窗口可能死掉,不管,另开一个窗口 cmd 

mysql -u root  发现直接进去了

use mysql

update user set password=password("新密码") where user='root' and host='localhost';

flush previliges;

OK了,注意几点:

1net start mysql --skip-grant-tables,能启动,但是好象达不到效果

2、mysql 内置的数据库

3、user表是mysql库里存储用户名密码和权限的表

4、密码要用password()函数加密一下

5、host='localhost'这个条件可以不要的,那么root所有的密码都变了,不建议这样做,后面会简单讲一下mysql的用户

6、此时set方法 mysqlamdin-u root -p password "新密码"的修改密码方法是行不通的,只有直接修改数据库

2.1.2、卸载

1、可以在控制面板里卸载

2、最好通过原来安装包,双击,选"remove"卸载,较彻底

2.2、zip文件(未验证)

2.2.1、安装

1、下载mysql

2、解压到c:/mysql

3、复制my-large.ini到c:/windows/my.ini

4、修改my.ini文件

basedir="c:/mysql" 安装目录

datadir="c:/mysql/data"数据目录

[WindowsMySQLServer]

Server="c:/mysql/bin/mysqld.exe"

5、安装服务

c:/mysql/bin/mysqld.exe --install

6、启动/关闭服务

net start/stop mysql

2.2.2、卸载

c:/mysql/bin/mysqld.exe --remove

2.3、命令常用参数及使用方法

List of all MySQL commands:

Note that all text commands must be first on line andend with ';'

?         (\?)Synonym for `help'.

clear     (\c)Clear the current input statement.(清除输入,不执行)

connect   (\r)Reconnect to the server. Optional arguments are db and host.

delimiter (\d) Set statement delimiter.

ego       (\G)Send command to mysql server, display result vertically.(垂直显示)

exit      (\q)Exit mysql. Same as quit.

go        (\g)Send command to mysql server.

help      (\h)Display this help.

notee     (\t)Don't write into outfile.

print     (\p)Print current command.

prompt(\R) Change your mysql prompt.

quit      (\q)Quit mysql.

rehash    (\#)Rebuild completion hash.

source    (\.)Execute an SQL script file. Takes a file name as an argument.

status    (\s) Getstatus information from the server.

tee       (\T) Setoutfile [to_outfile]. Append everything into given outfile.

use       (\u) Useanother database. Takes database name as argument.

charset   (\C)Switch to another charset. Might be needed for processing binlogwith multi-bytecharsets.

warnings  (\W)Show warnings after every statement.

nowarning (\w) Don't show warnings after everystatement.

For server side help, type 'help contents'

2.3.1、mysql

-h host

-u user

-p password(注意,一般不输密码,如果输,和-p之间不能有空格)

-P port,一般是3306不常用

databasename数据库名,相当于执行了usedatabase

-e"sql"执行语句

mysql -h localhost -u root -ppassword mysql -e"select user,host from user"

2.3.2、mysqladmin

a)修改密码

mysqladmin -u root -p password "新密码"

注意:

1、password相当于函数,必须要的

2、新密码要用双引号扩起来


第 3章 Linux平台下安装不配置MySQL

3.1、RPM文件安装

rpm -ivh mysql.rpm

3.2、二进制文件安装

groupadd mysql

useadd –g mysql mysql

tar –xzvf mysql.bin.tar.gz

scripts/mysql_install_db –user mysql

3.3、源码文件安装

groupadd mysql

useadd –g mysql mysql

tar –xzvf mysql.src.tar.gz

./configure –prfix=/usr/local/mysql

make

mack install

 

第 4章 MySQL数据类型

4.1、整数类型

tinyint(4)

smallint(6)

mediumint(9)

int(11)

bigint(20)

注意:后面的是默认显示宽度,以int为例,占用的存储字节数是4个,即4*8=32位,2的32次方,无符号的最大能达到4亿多。

tinyint(4)相当于bool

4.2、浮点数

float

double

decimal(m,d)

decimal(6,2)定义的数字形如1234.56,指总长6位,小数点后精确到2位

4.3、日期和时间

year   

date 日期

time   时间

datetime   日期时间

timestamp  时间(时区),范围小,支持时区

datetime最通用,year,date,time可以节省一些空间。

4.4、字符串

char(m)   定长

varchar(m)    不定长

enum,set和其它库不兼容,可暂不用 

tinytext

text

mediumtext

longtext

4.5、二进制

binary(m)

varbinary(m)

bit(m)

tinyblob

blob

mediumblob

longblob


第 5章 操作数据库

假设已经登录

mysql -h localhost -uroot -proot

5.1、显示、创建、删除数据库

showdatabases;    显示所有的数据库

createdatabase xxx; 创建数据库

dropdatabase xxx;  删除数据库

5.2、数据库存储引擎

show engines \G    mysql支持的所有的engine

show variables like '%engine%';查看当前库的engine

innodb

最常用,支持事务,回滚,自增,外键

表结构存在.frm文件中

数据和索引存在表空间中

读写效率稍差,占用空间大

myisam

表结构存在.frm文件中

.myd存储数据

.myi存储索引

快速,占空间小,不支持事务和并发

memory

演示系统


第 6章 创建、修改和删除表

6.1、创建表

6.1.1、创建表的语法形式

CREATE TABLE表名(属性名数据类型[完整性约束条件],

属性名数据类型[完整性约束条件],

......

属性名数据类型

);

完整性约束条件表:

PRIMARY KEY 主键

FOREIGN KEY 外键

NOT NULL 不能为空

UNIQUE 唯一索引

AUTO_INCREMENT 自动增加

DEFAULT 默认值

CREATE TABLE example0 (id INT, 

name VARCHAR(20), 

sexBOOLEAN );

6.1.2、设置表的主键

单字段主键

属性名数据类型 PRIMARY KEY

 CREATE TABLE example1(stu_id INTPRIMARY KEY,

stu_name VARCHAR(20),

stu_sex BOOLEAN,

);

多字段主键

PRIMARY KEY(属性名1,属性名2…属性名n)

CREATE TABLE example2(stu_id INT,

course_id INT,

grade FLOAT,

PRIMARY KEY(stu_id, course_id)

);

6.1.3、设置表的外键

CONSTRAINT外键别名FOREIGN KEY (属性1.1, 属性1.2,…, 属性1.n)

REFERENCES表名(属性2.1, 属性2.2,…, 属性2.n)

CREATE TABLE example3(stu_id INT,

course_id INT,

CONSTRAINT c_fk FOREIGN KEY (stu_id, course_id)

REFERENCES example2(stu_id, course_id)

);

6.1.4、设置表的非空约束

属性名数据类型NOT NULL

CREATE TABLE example4(id INTNOT NULLPRIMARY KEY,

name VARCHAR(20)NOT NULL,

stu_id INT,

CONSTRAINT d_fk FOREIGN KEY(stu_id),

REFERENCES example1(stu_id)

);

6.1.5、设置表的唯一性约束

属性名数据类型UNIQUE

CREATE TABLE example5(id INT PRIMARY KEY, 

stu_id INTUNIQUE,

name VARCHAR(20) NOT NULL

);

6.1.6、设置表的属性值自动增加

属性名数据类型AUTO_INCREMENT

CREATE TABLE example6(id INT PRIMARY KEY AUTO_INCREMENT,

stu_id INTUNIQUE,

name VARCHAR(20) NOT NULL

);

6.1.7、设置表的属性的默认值

属性名数据类型DEFAULT默认值

CREATE TABLE example7(id INT PRIMARY KEY AUTO_INCREMENT,

stu_id INT UNIQUE,

name VARCHAR(20) NOT NULL.

english VARCHAR(20) DEFAULT ‘zero’,

computer FLOAT DEFAULT 0

);

6.2、查看表结构

6.2.1、查看表基本结构语句DESCRIBE

DESC表名

desc example1

6.2.2、查看表详细结构语句SHOWCREATE TABLE

SHOW CREATE TABLE表名;

SHOW CREATE TABLE example example1;

 

6.3、修改表

6.3.1、修改表名

ALTER TABLE旧表名RENAME[TO]新表名;

DESC example0;

ALTER TABLE example0 RENAME TO user;

6.3.2、修改字段的数据类型

ALTER TABLE表名MODIFY属性名 数据类型;

DESC user;

ALTER TABLE user MODIFY name VARCHAR(30);

DESC user;

6.3.3~6.3.6、字段及数据类型的增、删,改以及改变位置

ALTER TABLE表名ADD 属性名1 数据类型 [完整性约束条件] [FIRST|AFTER属性名2];

ALTER TABLE表名DROP 属性名;

ALTER TABLE表名CHANGE旧属性名 新属性名 新数据类型;

利用上面的语句可以增加,删除,修改字段。修改字段名,数据类型,和位置

6.3.7、更改表的存储引擎

ALTER TABLE表名 ENGINE=INNODB|MYISAM|MEMOERY;

SHOW CREATE TABLE user;

ALTER TABLE user ENGINE=MyISAM;

6.3.8、删除表的外键约束

ALTER TABLE 表名 DROP FOREIGNKEY外键别名;

SHOW CREATE TABLE example3;

ALTER TABLE example3 DROP FOREIGN KEY c_fk;

SHOW CREATE TABLE example3;


6.4、删除表

6.4.1、删除没有被关联的普通表

DROP TABLE表名;

DESC example5;

DROP TABLE example5;

DESC example5;

6.4.2、删除被其他表关联的父表

删除外键后再删除表

DROP TABLE example1; --报错

SHOW TABLE example4;

ALTER TABLE example4 DROP FOREIGN KEY d_fk;

SHOW TABLE example4;

DROP TABLE example1;

DESC example1;


第 7章 索引

MySQL中,所有的数据类型都可以被索引,包括普通索引,唯一性索引,全文索引,单列索引,多列索引和空间索引等。

7.1、索引简介

7.1.1、索引的含义和特点

BTREE索引,HASH索引

优点:提高查询,联合查询,分级和排序的时间

缺点:索引占空间,维护(创建,更新,维护)索引时需要耗费时间 

7.1.2、索引的分类

1、普通索引不加任何限制条件

2、唯一性索引使用UNIQUE参数

3、全文索引使用FULLTEXT参数,只能创建在CHAR,VARCHAR,TEXT类型的字段上,只有MyISAM存储引擎支持全文索引。

4、单列索引在一个字段上建立的普通索引,唯一性索引或全文索引

5、多列索引在多个字段上建立的普通索引,唯一性索引或全文索引

6、空间索引使用SPATIAL参数,只有MyISAM存储引擎支持空间索引,必须建立在空间数据类型上,且必须非空,初学者很少用到。

7.1.3、索引的设计原则

1、选择唯一性索引

2、为经常需要排序、分组和联合操作的字段建立索引如ORDER BY、GROUP BY、DISTINCT,UNION等操作的字段,特别是排序

3、为常作为查询条件的字段建立索引

4、限制索引的数目避免过多地浪费空间

5、尽量使用数据量少的索引

6、尽量使用前缀来索引如指索引TEXT类型字段的前N个字符(,Oracle中有函数索引,这个是不是相当于left(field, n)式的函数索引?!

7、删除不再使用或者很少使用的索引

7.2、创建索引

三种方式:

1、 创建表时创建索引

2、 已经存在的表上创建索引

3、 使用ALTER TABLE语句来创建索引 

7.2.1、创建表的时候创建索引

CREATE TABLE表名(属性名数据类型[完整约束条件],

属性名数据类型[完整约束条件],

[UNIQUE|FULLTEXT|SPATIAL INDEX|KEY [别名] (属性名1 [(长度)] [ASC|DESC])

);

1、创建普通索引

CREATE TABLE index1 (id INT,

name VARCHAR(20),

sex BOOLEAN,

INDEX(id)

);

SHOW CREATE TABLE index1;

2、创建唯一性索引

CREATE TABLE index2(id INT UNIQUE,

name VARCHAR(20),

UNIQUE INDEX index2_id(id ASC)

);

SHOW CREATE TABLE index2;

看到在字段id上建立了两个唯一索引id和index2_id,当然这样是没有必要的。

3、创建全文索引

CREATE TABLE index3 (id INT,

info VARCHAR(20),

FULLTEXT INDEX index3_info(info)

) ENGINE=MyISAM;

4、创建单列索引

CREATE TABLE index4 (id INT, 

subject VARCHAR(30),

INDEX index4_st(subject(10))

);

注意:只索引subject前10个字符

5、创建多列索引

CREATE TABLE index5 (idINT,

name VARCHAR(20),

sex CHAR(4),

INDEX index5_ns(name, sex)

);

EXPLAIN select * from index5 where name=’123’;

EXPLAIN select * from index5 where name=’123’andsex=’N’;

6、创建空间索引

CREATE TABLE index6 (id INT,

Space GEOMETRY NOT NULL,

SPATIAL INDEX index6_sp(space)

)ENGINE=MyISAM;

7.2.2、在已经存在的表上创建索引

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX索引名 ON表名(属性名[(长度)] [ASC|DESC]);

1、创建普通索引

CREATE INDEX index7_id on example0(id);

2、创建唯一性索引

CREATE UNIQUE INDEX index_8_id ON index8(course_id); 

3、创建全文索引

CREATE FULLTEXT INDEX index9_info ON index9(info);

4、创建单列索引

CREATE INDEX index10_addr ON index10(address(4));

5、创建多列索引

CREATE INDEX index11_na ON index11(name, address);

6、创建空间索引

CREATE SPATIAL INDEX index12_line on index12(line);

7.2.3、用ALTER TABLE语句来创建索引

ALTER TABLE表名 ADD  [UNIQUE|FULLTEXT|SPATIAL] INDEX索引名 (属性名[(长度)] [ASC|DESC]);

1、创建普通索引

ALTER TABLE example0 ADD INDEX index12_name(name(20));

2、创建唯一性索引

ALTER TABLE index14 ADD UNIQUE INDEXindex14_id(course_id);

3、创建全文索引

ALTER TABLE index15 ADD INDEX index15_info(info); 

4、创建单列索引

ALTER TABLE index 16 ADD INDEX index16_addr(address(4));

5、创建多列索引

ALTER TABLE index17 ADD INDEX index17_na(name, address);

6、创建空间索引

ALTER TABLE index18 ADD INDEX index18_line(line);

7.3、删除索引

DROP INDEX索引名ON表名;

DROP INDEX id ON index1;


第 8章 视图

8.1、视图简介

视图由数据库中的一个表,视图或多个表,视图导出的虚拟表。其作用是方便用户对数据的操作。

8.2、创建视图

必须要有CREATE VIEW和SELECT权限

SELECT select_priv, create_view_priv from mysql.userWHERE user='root';

CREATE   [ALGORITHM= { UNDEFINED | MERGE | TEMPTABLE } ] 

VIEW 视图名[ (属性清单) ]

AS  SELECT语句

[ WITH  [ CASCADED| LOCAL ]  CHECK  OPTION ] ;

ALGORITHM参数表示视图选择的算法

UNDEFINED未指定,自动选择

MERGE表示将使用视图的语句和视图定义合并起来,使得视图定义的某一部分取代语句的对应部分

TEMPTABLE表示将视图的结果存入临时表,然后使用临时表执行语句

LOCAL参数表示更新视图时要满足该视图本身定义的条件即可;

CASCADED参数表示更新视图时要满足所有相关视图和表的条件,默认值。

使用CREATE VIEW语句创建视图时,最好加上WITH CHECK OPTION参数和CASCADED参数。这样,从视图上派生出来的新视图后,更新新视图需要考虑其父视图的约束条件。这种方式比较严格,可以保证数据的安全性。

create view department_view1 as

select * from department;

createview department_view2 (name, function, localtion)as

select d_name, function, address from department;

create algorithm=merge viewworker_view1(name,department, sex, age, address) as

select name, department.d_name,sex, 2009-birthday,address from worker, department where worker.d_id=department.d_id

with local check option;

8.3、查看视图

必须要有SHOW VIEW的权限

DESCRIBE|DESC视图名;

SHOW  TABLE  STATUS LIKE  ‘视图名’;

SHOW  CREATE  VIEW 视图名;

SELECT  *  FROM information_schema.views ;

8.4、修改视图

CREATE OR REPLACE | ALTER [ ALGORITHM = { UNDEFINED |MERGE | TEMPTABLE } ]

VIEW 视图名[ (属性清单) ]

AS  SELECT语句

[ WITH  [ CASCADED| LOCAL ]  CHECK  OPTION ] ;

语法和CREATE VIEW基本一样

8.5、更新视图

更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为是视图是一个虚拟表,其中没有数据。通过视图更新时,都是转换到基本表来更新。更新视图时,只能更新权限范围内的数据。超出了范围,就不能更新。

原则:尽量不要更新视图,语法和UPDATE语法一样

哪些视图更新不了:

1、视图中包含SUM(), COUNT()等聚焦函数的

2、视图中包含UNION、UNIONALL、DISTINCT、GROUP BY、HAVING等关键字

3、常量视图CREATE VIEWview_now AS SELECTNOW()

4、视图中包含子查询

5、由不可更新的视图导出的视图

6、创建视图时ALGORITHM为TEMPTABLE类型

7、视图对应的表上存在没有默认值的列,而且该列没有包含在视图里

8、WITH [CASCADED|LOCAL] CHECK OPTION也将决定视图是否可以更新

LOCAL参数表示更新视图时要满足该视图本身定义的条件即可;

CASCADED参数表示更新视图时要满足所有相关视图和表的条件,默认值。

8.6、删除视图

删除视图时,只能删除视图的定义,不会删除数据

用户必须拥有DROP权限

DROP  VIEW  [ IF EXISTS] 视图名列表[ RESTRICT | CASCADE]


第 9章 触发器

触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。MySQL从5.0.2版本开始支持触发器 

9.1、创建触发器

9.1.1、创建只有一个执行语句的触发器

CREATE  TRIGGER触发器名BEFORE | AFTER 触发事件

ON 表名FOR  EACH  ROW 执行语句

9.1.2、创建有多个执行语句的触发器

DELIMITER &&

CREATE TRIGGER 触发器名BEFORE | AFTER 触发事件

ON 表名FOR  EACH  ROW 

BEGIN

执行语句列表

END

&&

DELEMITER

DELIMITER,一般SQL “;”结束,在创建多个语句执行的触发器时,要用到“;”,所以用DELIMETER来切换一下。

CREATE TRIGGER dept_tig1 BEFORE INSERT ON department

FOR EACH ROW

INSERT INTO trigger_time VALUES(NOWS());

9.2、查看触发器

SHOW  TRIGGERS ;

SELECT  *  FROM information_schema. triggers ;

9.3、触发器的使用

MySQL中,触发器执行的顺序是BEFORE触发器、表操作(INSERT、UPDATE 和DELETE)、AFTER触发器

触发器中不能包含START TRANSACTION, COMMIT,ROLLBACK,CALL等。 

9.4、删除触发器

DROP  TRIGGER 触发器名;

第10章 查询数据

10.1、基本查询语句

SELECT属性列表

FROM表名和视图列表

[WHERE条件表达式1]

[GROUP BY属性名1 [HAVING条件表达式2]]

[ORDER BY属性名2[ASC|DESC]]

10.2、单表查询

列出所有字段*

指定字段

指定记录

WHERE条件表达式

=,<,>,!及其组合

[NOT] BETWEEN AND

[NOT] IN

[NOT] LIKE

%

_

IS [NOT] NULL

AND,OR

SELECT DISTINCT属性名

ORDER BY属性名[ASC|DESC]

GROUP BY, GROUP_CONTACT()函数非常好用

SELECT sex, GROUP_CONTACT(name) FROM employee GROUP BYsex;

GROUP BY与WITH ROLLUP一起使用,多一行,加统计

SELECT sexCOUNT(sex) FROM employee GROUP BY sex WITHROLLUP;

LIMIT [初始位置,] 记录数 

10.3、使用集合函数查询

COUNT(), AVG(), MAX(), MIN(), SUM()

10.4、连接查询

10.4.1、内连接查询

select a.*, b.* from a, b where a.xid=b.xid

10.4.2、外连接查询

SELECT属性名列表FROM表名1LEFT|RIGHT JOIN 表名2
ON 表名1.属性1=表名2.属性2;

LEFT JOIN 左表全记录,右表符合条件

RIGHT JOIN 右表全记录,左表符合条件

10.5、子查询

IN

EXISTS表示存在,内层查询语句不返回查询的记录,而是返回一个真假值(true|false

ANY任意一个值

SELECT * FROM computer_stu WHERE scrore >=ANY(SELECTscore FROM scholarship)

ALL满足所有条件

10.6、合并查询结果

SELECT语句1

UNION | UNION ALL

SELECT语句2

UNION所有的查询结果合并到一起,去掉重复项

UNION ALL简单合并

10.7、为表和字段取别名

表名表的别名

属性名[AS]属性的别名

10.8、使用正则表达式查询

属性名 REGEXP匹配方式’

^字符串开始

$字符串结束

.任意一个字符,包括回车和换行

[字符集合]匹配字符集合中的任一字符

S1|S2|S3三者之任一

*任意多个

+1+

字符串{N}字符串出现N次

字符串{M,N}字符串出现至少M次,至多N次

SELECT * FROM info WHERE name REGEXP ‘ab{1,3}’;

第11章 插入、更新不删除数据

11.1、插入数据

11.1.1、为表的所有字段插入数据

1、INSERT语句中不指定具体的字段名

insert into表名values (值1,值2…值n)

2、INSERT语句中列出所有字段

insert into表名(属性1,属性2…属性n) values (值1,值2…值n) 

11.1.2、为表的指定字段插入数据

insert into表名(属性1,属性2,属性3) values (值1,值2,值3)

11.1.3、同时插入多条数据

insert into  表名(属性1,属性2…属性n) values (值1,值2…值n),

(属性1,属性2…属性n) values (值1,值2…值n),

...

(属性1,属性2…属性n) values (值1,值2…值n);

MySQL特有的

11.1.4、将查询结果插入到表中

insert into表名(属性1,属性2…属性n)

select属性列表from表名2where 条件表达式

use mysql;

create table user1 (user char(16) not null);

insert into user1 (user) select user from user;

11.2、更新数据

update表名

set属性1=值1,属性2=值2,…

where条件表达式;

11.3、删除数据

delete from表名[条件表达式];

 

第12章 MySQL运算符

12.1、算术运算符

+

-

*

/或DIV

%或MOD

12.2、比较运算符

1.运算符“=”

2.运算符“<>”和“!=”

3.运算符“<=>”

4.运算符“>”

5.运算符“>=”

6.运算符“<”

7.运算符“<=”

8.运算符“IS NULL”

9.运算符“BETWEEN AND”

10.运算符“IN”

11.运算符“LIKE”

12.运算符“REGEXP”

12.3、逻辑运算符

1.与运算

2.或运算

3.非运算

4.异或运算

12.4、位运算符

1.按位与

2.按位或

3.按位取反

4.按位异或

5.按位左移与按位右移


第13章 MySQL函数

13.1、数学函数

随机数可能会用到,其他基本无视。

13.2、字符串函数

重点CONCAT(S1,S2….)

13.3、日期和时间函数

重点

13.4、条件判断函数

IF(expr,v1,v2)

IFNULL(v1,v2)

CASE

1.CASE WHEN expr1 THEN v1 [WHEN expr2THEN v2…] [ELSE vn] END

2.CASE expr WHEN e1 THEN v1 [WHEN e2THEN v2…] [ELSE vn] END

13.5、系统信息函数

VERSION()函数返回数据库的版本号;

CONNECTION_ID()函数返回服务器的连接数,也就是到现在为止MySQL服务的连接次数;

DATABASE()和SCHEMA()返回当前数据库名。

USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()和CURRENT_USER这几个函数可以返回当前用户的名称

CHARSET(str)函数返回字符串str的字符集,一般情况这个字符集就是系统的默认字符集;

COLLATION(str)函数返回字符串str的字符排列方式。

LAST_INSERT_ID()函数返回最后生成的AUTO_INCREMENT值。 

13.6、加密函数

PASSWORD(str)函数可以对字符串str进行加密。一般情况下,PASSWORD(str)函数主要是用来给用户的密码加密的。

MD5(str)函数可以对字符串str进行加密。MD5(str)函数主要对普通的数据进行加密。

ENCODE(str,pswd_str)函数可以使用字符串pswd_str来加密字符串str。加密的结果是一个二进制数,必须使用BLOB类型的字段来保存它。

DECODE(crypt_str,pswd_str)函数可以使用字符串pswd_str来为crypt_str解密

13.7、格式化函数

FORMAT(x,n)函数可以将数字x进行格式化,将x保留到小数点后n位。这个过程需要进行四舍五入。

ASCII(s)返回字符串s的第一个字符的ASCII码;

BIN(x)返回x的二进制编码;

HEX(x)返回x的十六进制编码;

OCT(x)返回x的八进制编码;

CONV(x,f1,f2)将x从f1进制数变成f2进制数。

INET_ATON(IP)函数可以将IP地址转换为数字表示;INET_NTOA(n)函数可以将数字n转换成IP的形式。其中,INET_ATON(IP)函数中IP值需要加上引号。这两个函数互为反函数。

GET_LOCT(name,time)函数定义一个名称为nam、持续时间长度为time秒的锁。如果锁定成功,返回1;如果尝试超时,返回0;如果遇到错误,返回NULL。

RELEASE_LOCK(name)函数解除名称为name的锁。如果解锁成功,返回1;如果尝试超时,返回0;如果解锁失败,返回NULL;

IS_FREE_LOCK(name)函数判断是否使用名为name的锁。如果使用,返回0;否则,返回1。

BENCHMARK(count,expr)函数将表达式expr重复执行count次,然后返回执行时间。该函数可以用来判断MySQL处理表达式的速度。

CONVERT(s USING cs)函数将字符串s的字符集变成cs

CAST(x AS type)和CONVERT(x,type)这两个函数将x变成type类型。这两个函数只对BINARY、CHAR、DATE、DATETIME、TIME、SIGNED INTEGER、UNSIGNEDINTEGER这些类型起作用。但两种方法只是改变了输出值的数据类型,并没有改变表中字段的类型


第14章 存储过程和函数

避免编写重复的语句

安全性可控

执行效率高

14.1、创建存储过程和函数

14.1.1、创建存储过程

CREATE PROCEDURE sp_name ([proc_parameter[,...]])

[characteristic ...] routine_body

procedure发音 [prə'si:dʒə]

proc_parameterIN|OUT|INOUT param_name type

characteristicn.特征;特性;特色

LANGUAGE SQL默认,routine_boyd由SQL组成

[NOT] DETERMINISTIC指明存储过程的执行结果是否是确定的,默认不确定

CONSTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQLDATA指定程序使用SQL语句的限制

CONSTAINS SQL子程序包含SQL,但不包含读写数据的语句,默认

NO SQL子程序中不包含SQL语句

READS SQL DATA子程序中包含读数据的语句

MODIFIES SQL DATA子程序中包含了写数据的语句

SQL SECURITY {DEFINER|INVOKER},指明谁有权限执行。

DEFINER,只有定义者自己才能够执行,默认

INVOKER表示调用者可以执行

COMMENT ‘string’注释信息

CREATE PROCEDURE num_from_employee (IN emp_id, INT, OUTcount_num INT)

READS SQL DATA

BEGIN

SELECT COUNT(*) INTO count_num

FROM employee

WHERE d_id=emp_id;

END

14.1.2、创建存储函数

CREATE FUNCTION sp_name ([func_parameter[,...]])

RETURNS type

[characteristic ...] routine_body 

CREATE FUNCTIONname_from_employee(emp_id INT)

RETURNS VARCHAR(20)

BEGIN

RETURN(SELECT name FROM employee WHEREnum=emp_id);

END

14.1.3、变量的使用

1.定义变量

DECLARE var_name[,…] type[DEFAULT value]

DECLARE my_sql INT DEFAULT 10;

2.为变量赋值

SET var_name=expr[,var_name=expr]

SELECT col_name[,…] INTOvar_name[,…] FROM table_name WHERE condition

14.1.4、定义条件和处理程序

1.定义条件

DECLARE condition_name CONDITION FOR condition_value

condition value:

SQLSTATE [VALUE] sqlstate_value | mysql_error_code

对于ERROR 1146(42S02)

sqlstate_value: 42S02

mysql_error_code:1146

//方法一

DECLARE can_not_find CONDITION FOR SQLSTATE ‘42S02’

//方法二

DECLARE can_not_find CONDITION FOR 1146

2.定义处理程序

DECLARE hander_type HANDLER FOR condition_value[,…] sp_statement

handler_type:

CONTINUE|EXIT|UNDO

condition_value:

SQLSTATE[VALUE] sqlstate_value | condition_name |SQLWARNING|NOTFOUND|SQLEXCEPTION|mysql_error_code

UNDO目前MySQL不支持

1、捕获sqlstate_value

DECLARE CONTINUE HANDLERFOR SQLSTATE ‘42S02’SET@info=’CAN NOT FIND’;

2、捕获mysql_error_code

DECLARE CONTINUE HANDLER FOR 1146  SET @info=’CAN NOT FIND’;

3、先定义条件,然后调用

DECLARE can_not_find CONDITION FOR 1146;

DECLARE CONTINUE HANDLER FOR can_not_find SET @info=’CANNOT FIND’;

4、使用SQLWARNING

DECLARE EXITHANDLER FOR SQLWARNING SET @info=’CAN NOT FIND’;

5、使用NOT FOUND

DECLARE EXIT HANDLER FOR NOT FOUND SET @info=’CAN NOTFIND’;

6、使用SQLEXCEPTION

DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info=’CAN NOTFIND’;

14.1.5、光标的使用

存储过程中对多条记录处理,使用光标

1.声明光标

DECLARE cousor_name COURSOR FOR select statement;

DECLARE cur_employee CURSOR FOR SELECT name, age FROMemployee;

2.打开光标

OPEN cursor_name;

OPEN cur_employee;

3.使用光标

FETCH cur_employee INTO var_name[,var_name…];

FETCH cur_employee INTO emp_name, emp_age;

4.关闭光标

CLOSE cursor_name

CLOSE cur_employee

14.1.6、流程控制的使用

1.IF语句

IF search_condition THEN statement_list

[ELSEIF search_condition THEN statement_list]

[ELSE statement_list]

END IF

IF age>20 THEN SET @count1=@count1+1;

ELSEIF  age=20THEN @count2=@count2+1;

ELSE @count3=@count3+1;

END

2.CASE语句

CASE case_value

WHEN when_value THEN statement_list

[WHEN when_value THEN statement_list]

[ELSE statement_list]

END CASE 

CASE

WHEN search_condition THEN statement_list

[WHEN search_condition THEN statement_list]

[ELSE statement_list]

END CASE

CASE age

WHEN 20 THEN SET @count1=@count1+1;

ELSE SET @count2=@count2+1;

END CASE;

CASE

WHERE age=20 THEN SET @count1=@count1+1;

ELSE SET @count2=@count2+1;

END CASE;

3.LOOP语句

[begin_label:]LOOP

statement_list

END LOOP[end_label]

add_num:LOOP

SET @count=@count+1;

END LOOP add_num;

4.LEAVE语句

跳出循环控制

LEAVE label

add_num:LOOP

SET @count=@count+1;

LEAVE add_num;

END LOOP add_num; 

5.ITERATE语句

跳出本次循环,执行下一次循环

ITERATE label

add_num:LOOP

SET @count=@count+1;

IF @count=100 THEN LEAVE add_num;

ELSEIF MOD(@count,3)=0 THEN ITERATE add_num;

SELECT * FROM employee;

END LOOP add_num;

6.REPEAT语句

有条件循环,满足条件退出循环

[begin_label:]REPEAT

statement_list

UNTIL search_condition

END REPEAT[end_label]

REPEAT

SET @count=@count+1;

UNTIL @count=100;

END REPEAT;

7.WHILE语句

[begin_label:]WHILE search_condition DO

statement_list

END REPEAT[end_label]

WHILE @count<100 DO

SET @count=@count+1;

END WHILE;

14.2、调用存储过程和函数

存储过程是通过CALL语句来调用的。而存储函数的使用方法与MySQL内部函数的使用方法是一样的。执行存储过程和存储函 

数需要拥有EXECUTE权限。EXECUTE权限的信息存储在information_schema数据库下面的USER_PRIVILEGES表中

14.2.1、调用存储过程

CALL sp_name([parameter[,…]]) ;

14.2.2、调用存储函数

存储函数的使用方法与MySQL内部函数的使用方法是一样的

14.3、查看存储过程和函数

SHOW { PROCEDURE | FUNCTION } STATUS [ LIKE  ' pattern ' ] ;

SHOW CREATE { PROCEDURE | FUNCTION } sp_name ;

SELECT * FROM information_schema.Routines WHEREROUTINE_NAME=' sp_name ' ;

14.4、修改存储过程和函数

ALTER {PROCEDURE | FUNCTION} sp_name [characteristic...]

characteristic:

{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQLDATA }

| SQL SECURITY { DEFINER | INVOKER }

| COMMENT 'string'

14.5、删除存储过程和函数

DROP { PROCEDURE| FUNCTION } sp_name;

 

第15章 MySQL用户管理

15.2、账户管理

15.2.1、登录和退出MySQL服务器

mysql –h hostname|hostIP –P port –u username–p[password]databaseName –e “SQL语句”

-h主机名或ip

-Pport[3306]

-uusername

-p-p[password]注意,之间没有空格

-e执行SQL语句SQL用双引号括起

可以用此语句配合操作系统定时任务,达到自动处理表数据的功能,如定时将某表中过期的数据删除。

15.2.2、新建立普通用户

1、用CREATE USER语句新建

CREATE USER user [IDENTIFIED BY [PASSWORD]’password’]

[,user [IDENTIFIED BY [PASSWORD]’password’]]...

2、用INSERT语句来新建普通用户

INSERT INTOmysql.user(host,user,password,ssl_cipher,x509_issuer,x509_subject)

VALUES (‘localhost’,’test2’,PASSWORD(‘test2’),’’,’’,’’);

FLUSH PRIVELEGES;

3、用GRANT语句来新建普通用户

GRANT priv_type ON database.table TO user [IDENTIFIED BY [PASSWORD]’password

    [,user [IDENTIFIED BY [PASSWORD]’password’]]...

15.2.3、删除普通用户

1、用DROP USER语句来删除普通用户

DROP USER user [,user]…; 

例:drop user ‘test’@’localhost’;

2、用DELETE语句来删除普通用户

DELETE FROM mysql.user WHERE user=’username’andhost=’hostname’;

FLUSH PRIVILEGES;

15.2.4、root用户修改自己的密码

1、使用mysqladmin命令来修改root用户的密码

mysqladmin –u username –p password “new_password”;

2、修改user

UPDATE mysql.user SET password=PASSWORD(“new_password”)WHERE user=’root’and host=’’;

FLUSH PRIVILEGES;

3、使用SET语句来修改root用户的密码

SET PASSWORD=PASSWORD(“new_password”);

15.2.5、root用户修改普通用户密码

1、使用mysqladmin命令

不适用,mysqladmin只能修改root用户密码

2、修改user

UPDATE mysql.user SET password=PASSWORD(“new_password”)WHERE user=’’and host=’’;

FLUSH PRIVILEGES;

3、使用SET语句来修改普通用户的密码

SET PASSWORDFOR‘user’@’localhost’=PASSWORD(“new_password”);

4、用GRANT语句来修改普通用户的密码

GRANT priv_type ON database.table TO user [IDENTIFIED BY[PASSWORD]’password

[,user [IDENTIFIED BY [PASSWORD]’password’]]...

15.2.6、普通用户修改密码

SET PASSWORD=PASSWORD(“new_password”);

15.2.7、root用户密码丢失的解决办法

1、使用—skip-grant-tables选项来启动MySQL服务

>mysqld –skip-grant-tables

#/etc/init.d/mysql start –mysqld –skip-grant-tables

2、登录root,设置新密码

mysql –u root

update mysql.user set password=password(“new_password”)where user=’root’and host=’localhost’;

3、加载权限表

fush privileges;

15.3、权限管理

15.3.1、MySQL的各种权限

create, select, update, delete

all [privileges]指所有权限

15.3.2、授权

GRANT priv_type [(column_list)] [, priv_type[(column_list)]] ...

ON [object_type] {tbl_name | * | *.* | db_name.*}

TO user [IDENTIFIED BY [PASSWORD] 'password']

[, user [IDENTIFIED BY [PASSWORD] 'password']] ...

[REQUIRE

NONE |

[{SSL| X509}]

[CIPHER 'cipher' [AND]]

[ISSUER 'issuer' [AND]]

[SUBJECT 'subject']]

[WITH with_option [with_option] ...]


object_type =

TABLE 

| FUNCTION

| PROCEDURE

with_option =

GRANT OPTION

| MAX_QUERIES_PER_HOUR count

| MAX_UPDATES_PER_HOUR count

| MAX_CONNECTIONS_PER_HOUR count

| MAX_USER_CONNECTIONS count

grantselect, insert, update, delete on testdb.* tocommon_user@'%'

database.table*.*所有库的所有表

user‘user’@’host’

15.3.3、收回权限

REVOKE priv_type [(column_list)] [, priv_type[(column_list)]] ...

ON [object_type] {tbl_name | * | *.* | db_name.*}

FROM user [, user] ...

REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user]...


第16章 数据备份不还原

16.1、数据备份

16.1.1、使用mysqldump命令备份

mysqldump [OPTIONS] database [tables]

mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2DB3...]

mysqldump[OPTIONS] --all-databases [OPTIONS]

mysqldump –u root –p test student >c:/student.sql

mysqldump –u root –p test mysql > c:/multidb.sql

mysqldump –u root –p –all-databases > c:/all.sql 

16.1.2、直接复制整个数据库目录

MyISAM存储引擎的的表适用

大版本号相同数据库数据库文件格式相同

16.1.3、使用mysqlhotcopy工具快速备份

Linux下备份,perl脚本。

16.2、数据还原

16.2.1、使用mysql命令还原

mysql –u root –p [dbname] < backup.sql

mysql –u root –p < all.sql

16.2.2、直接复制到数据库目录

16.3、数据库迁移

16.3.1、相同版本的MySQL数据库之间的迁移

mysqldump–h host1 –u root –password=password1–all-databases | mysql –h host2 –u root –password=password2

mysqldump–h host1 –u root –ppassworddatabasename| mysql–h host2 –u root –ppassword databasename

16.3.2、不同版本的MySQL数据库之间的迁移

mysqldump

16.3.3、不同数据库之间的迁移

1、工具,如MS SQL Server的数据库迁移工具

2、dump出sql语句,然后手工修改create语句 

16.4、表的导出和导入

16.4.1、用SELECT…INTO OUTFILE导出文本文件

SELECT[列名]FROM table [WHERE语句]

INTO OUTFILE ‘目标文件’[OPTION]

能根据条件导出数据

16.4.2、用mysqldump命令导出文本文件

mysqldump–u root –pPassword –T目标目录或文件dbname table [option];

--fields-terminated-by=...

--fields-enclosed-by=...

--fields-optionally-enclosed-by=...

--fields-escaped-by=...

--fields-terminated-by=...

导出的是txt + sql文件

16.4.3、用mysql命令导出文本文件

mysql –u root –pPassword –e “sql”dbname > c:/sql.txt

mysql –u root –pPassword --xml  | -X -e “sql”dbname >c:/sql.txt

mysql –u root –pPassword --html | -H -e “sql”dbname > c:/sql.txt

16.4.4、用LOAD DATAINFILE方式导入文本文件

LOAD DATA[LOCAL] INFILE file INTO TABLE table [OPTION]

LOAD DATA INFILE C:/student.txt INTO TABLEstudent[OPTION]

16.4.5、用mysqlimport命令导入文本文件

mysqlimport–u root –pPassword [--LOCAL] dbname file[OPTION]

 

第17章 MySQL日志

17.1、日志简介

二进制日志

错误日志

通用查询日志

慢查询日志

17.2、二进制日志

二进制日志也叫作变更日志(update log),主要用于记录数据库的变化情况。通过二进制日志可以查询MySQL数据库中进行了哪些改变。

17.2.1、启动和设置二进制日志

默认关闭

#my.cnf(Linux操作系统下)或者my.ini(Windows操作系统下)

[mysqld]

log-bin [=DIR \[filename] ]

DIR和filename可以不指定,默认为hostname-bin.number,同时生成hostname-bin.index文件

17.2.2、查看二进制日志

mysqlbinlog filename.number

17.2.3、删除二进制日志

1.删除所有二进制日志

RESET MASTER; 

2.根据编号来删除二进制日志

PURGE MASTER LOGS TO ‘filename.number’

清除编号小于number的所有二进制文件

3.根据创建时间来删除二进制日志

PURGE MASTER LOGS TO ‘yyyy-mm-dd hh:MM:ss’

删除指定时间之前的

17.2.4、使用二进制日志还原数据库

mysqlbinlog filename.number | mysql -u root –p

number编号小的先还原

17.2.5、暂时停止二进制日志功能

SET SQL_LOG_BIN=0

17.3、错误日志

错误日志是MySQL数据库中最常用的一种日志。错误日志主要用来记录MySQL服务的开启、关闭和错误信息。

17.3.1、启动和设置错误日志

默认开启的,而且,错误日志无法被禁止。

默认情况下,错误日志存储在MySQL数据库的数据文件夹下。错误日志文件通常的名称为hostname.err。其中,hostname表示MySQL服务器的主机名。错误日志的存储位置可以通过log-error选项来设置。将log-error选项加入到my.ini或者my.cnf文件的[mysqld]组中,形式如下:

# my.cnf(Linux操作系统下)或者my.ini(Windows操作系统下)

[mysqld]

log-error=DIR / [filename]

17.3.2、查看错误日志

文本编辑/查看器

17.3.3、删除错误日志

MySQL数据库中,可以使用mysqladmin命令来开启新的错误日志。mysqladmin命令的语法如下:

mysqladmin -u root -p flush-logs

执行该命令后,数据库系统会自动创建一个新的错误日志。旧的错误日志仍然保留着,只是已经更名为filename.err-old

17.4、通用查询日志

通用查询日志用来记录用户的所有操作,包括启动和关闭MySQL服务、更新语句、查询语句等。

17.4.1、启动和设置通用查询日志

默认情况下,通用查询日志功能是关闭的

通过my.cnf或者my.ini文件的log选项可以开启通用查询日志。将log选项加入到my.cnf或者my.ini文件的[mysqld]组中,形式如下:

# my.cnf(Linux操作系统下)或者my.ini(Windows操作系统下)

[mysqld]

log [=DIR \[filename] ]

17.4.2、查看错误日志

文本编辑/查看器

17.4.3、删除通用查询日志

可以使用mysqladmin命令来开启新的通用查询日志。新的通用查询日志会直接覆盖旧的查询日志,不需要再手动删除了。mysqladmin命令的语法如下:

mysqladmin -u root -p flush-logs

17.5、慢查询日志

慢查询日志用来记录执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。 

17.5.1、启动和设置慢查询日志

默认情况下,慢查询日志功能是关闭的。

通过my.cnf或者my.ini文件的log-slow-queries选项可以开启慢查询日志。通过long_query_time选项来设置时间值,时间以秒为单位。如果查询时间超过了这个时间值,这个查询语句将被记录到慢查询日志。将log-slow-queries选项和long_query_time选项加入到my.cnf或者my.ini文件的[mysqld]组中,形式如下:

# my.cnf(Linux操作系统下)或者my.ini(Windows操作系统下)

[mysqld]

log-slow-queries [=DIR \[filename] ]

long_query_time=n

17.5.2、查看慢查询日志

文本编辑/查看器

17.5.3、删除慢查询日志

慢查询日志的删除方法与通用查询日志的删除方法是一样的。可以使用mysqladmin命令来删除。也可以使用手工方式来删除。mysqladmin命令的语法如下:

mysqladmin -u root -p flush-logs

执行该命令后,命令行会提示输入密码。输入正确密码后,将执行删除操作。新的慢查询日志会直接覆盖旧的查询日志,不需要再手动删除了。数据库管理员也可以手工删除慢查询日志。删除之后需要重新启动MySQL服务。重启之后就会生成新的慢查询日志。如果希望备份旧的慢查询日志文件,可以将旧的日志文件改名。然后重启MySQL服务

17.6、小结日志类型

配置my.cnf或my.ini

默认启动

查看

删除

二进制日志

[mysqld]

log-bin [=DIR \[filename] ]

mysqlbinlog

filename.number

RESET MASTER;

PURGE MASTER LOGS TO

‘filename.number’

PURGE MASTER LOGS TO

‘yyyy-mm-dd hh:MM:ss’

错误

[mysqld]

文本查看/编辑器

mysqladmin -uroot -p flush-logs


第18章 性能优化

18.1、优化简介

SHOW STATUS LIKE ‘value’;

connections,连接数

uptime启动时间

slow_queries慢查询次数

com_select查询操作次数

com_insert插入操作次数

com_update更新操作次数

com_delete删除操作次数

18.2、优化查询

18.2.1、分析查询语句

EXPLAIN/DESCselect;

type连接类型

system表中只有一条记录

const表中有多条记录,但只从表中查询一条记录

all对表进行了完整的扫描

eq_ref表示多表连接时,后面的表使用了unique或PRIMARY KEY

ref表示多表查询时,后面的表使用了普通索引

unique_subquery表示子查询中合作了unique或primary key

index_subquery表示子查询中使用了普通索引

range表示查询中给出了查询的范围 

index表示对表中索引进行了完整的扫描

possible_key表示查询中可能使用的索引

key表示查询时使用到的索引

18.2.2、索引

1、走单列索引

2、走多列索引

3、不走索引的查询

Like 以%开头的不走

Or 两边的列有一个没有建立索引不走索引

多列索引第一个字段没有使用不走索引

18.3、优化数据库结构

18.3.1、将字段很多的表分解成多个表

18.3.2、增加中间表

18.3.3、增加冗余字段

反范式

空间换时间

18.3.4、优化插入记录的速度

1、禁用索引

ALTER TABLE table DISABLE/ENABLE KEYS;

2、禁用唯一索引

SET UNIQUE_CHECK=0/1

3、优化INSERT语句

使用INSERT INTO table (f1,f2….fn)VALUES (v1,v2….vn),

    (f1,f2….fn) VALUES(v1,v2….vn),

    (f1,f2….fn) VALUES(v1,v2….vn), 

代替多个INSERT INTO

18.3.5、分析、检查和优化表

ANALYZE TABLE table1[, table2…]

CHECK TABLE table1[, table2…]

OPTIMIZE TABLE table1[, table2…]

优化文本字段,消除更新操作带来的碎片,减少空间浪费

18.4、优化MySQL服务器

18.4.1、优化服务器硬件

CPU

磁盘,阵列

内存

配置(专用服务器,大内存配置)

18.4.2、优化MySQL参数

my.ini

0 0
原创粉丝点击