《MySQL数据库应用从入门到精通》

第1章 数据库概述

1.1基本概念

1.1.1数据库技术发展阶段

人工管理阶段——>文件系统阶段——>数据库系统阶段

1.1.2涉及的概念

数据库(DB)、数据库管理系统(DBMS)、数据库系统(DBS)

1.1.3经历的阶段

层次数据库和网状数据库(IDS)——>关系数据库(Oracle、DB2、SQL Server、MySQL、Sybase等)——>后关系数据库(面向对象数据库技术(ORDBMS)、结构化数据库技术(NOSQL))

1.1.4提供的功能:

1、数据定义语言(DDL)——>定义各种对象,完整性约束和保密限制等约束等

2、数据操作语言(DML)——>检索(查询)和更新(插入、删除和更新)

3、数据控制语言(DCL)——>数据完整性控制、数据安全性控制和数据库的恢复等

       

1.2 MySQL数据库管理系统

1.2.1MySQL概述

免费、开源、小型、关系型

1.2.2常用数据库管理系统

Oracle、DB2、SQL Server、PostgreSQL等    

       

       

第2章 MySQL安装和配置

1、4个比较重要的文件夹:bin、include、lib、share

2、my.ini配置文件:如果修改了配置文件,则必须重新启动MySQL服务,修改的内容才能生效

3、启动和关闭MySQL服务

net start // 查看已启动的服务项

net stop MySQL //停止MySQL服务

net start MySQL //启动MySQL服务

       

       

第3章 MySQL数据库基本操作

3.1数据库和数据库对象

1、系统数据库:information_schema、performance_schema、mysql、test

2、用户数据库

       

3.2创建数据库

CREATE DATABASE database_name

       

3.3查看和选择数据库

//查看数据库

SHOW DATABASES;

//选择数据库

USE database_name;

       

3.4删除数据库

DROP DATABASE database_name;

       

       

第4章 MySQL数据库中存储引擎和数据类型

4.1认识存储引擎

// 查看所支持的存储引擎

SHOW ENGINES;

SHOW ENGINES \g

SHOW ENGINES \G

SHOW VARIABLES LIKE 'have%';

// 查询默认存储引擎

SHOW VARIABLES LIKE 'storage_engine%';

       

4.2数据类型

4.2.1整数类型

TINYINT—> (1)、SMALLINT—> (2)、MEDIUMINT—> (3)、INT和INTEGER—> (4)、BIGINT—> (8)

4.2.2浮点数类型、定点数类型和位类型

FLOAT—> (4)、DOUBLE—> (8)

DEC(M,D)和DECIMAL(M,D) —> (M+2)

BIT(M) —>(1-8)

4.2.3日期和时间类型

DATE—> (4)、DATETIME—> (8)、TIMESTAMP—> (4)、TIME—> (3)、YEAR—> (1)

4.2.4字符串类型

CHAR(M) —> (M)、VARCHAR(M) —> (M)

TINYTEXT—> (0-255)、TEXT—> (0-65535)、MEDIUMTEXT、LONGTEXT

BINARY(M) —> (M)、VAR BINARY(M) —> (M)

TINYBLOB—> (0-255)、BLOB—> (0-2^16)、MEDIUMBLOB(0-2^24)、LONGBLOB(0-2^32)

       

       

第5章 表的操作

5.1表的基本概念

列(Column)、索引(Index)、触发器(Trigger)

       

5.2创建表

CREATE TABLE table_name(

    属性名 数据类型,

    属性名 数据类型,

..…..

属性名 数据类型

) ;

       

5.3查看表结构

//查看表定义

DESCRIBE table_name;

DESC table_name;

//查看表详细定义

SHOW CREATE TABLE table_name \G

       

5.4删除表

DROP TABLE table_name;

       

5.5修改表

5.5.1修改表名

ALTER TABLE old_table_name

RENAME [TO] new_table_name;

5.5.2增加字段

//在表的最后一个位置增加字段

ALTER TABLE table_name

    ADD 属性名 数据类型;

//在表的第一个位置增加字段

ALTER TABLE table_name

    ADD 属性名 数据类型 FIRST;

//在表的指定字段之后增加字段

ALTER TABLE table_name

    ADD 属性名 数据类型

        AFTER 属性名;

5.5.3删除字段

ALTER TABLE table_name

    DROP 属性名;

5.5.4修改字段

//修改字段的数据类型

ALTER TABLE table_name

    MODIFY 属性名 数据类型;

//修改字段的名字

ALTER TABLE table_name

    CHANGE 旧属性名 新属性名 旧数据类型;

//同时修改字段的名字和属性

ALTER TABLE table_name

    CHANGE 旧属性名 新属性名 新数据类型;

//修改字段的顺序

ALTER TABLE table_name

    MODIFY 属性名1 数据类型 FIRST|AFTER 属性名2;

       

5.7操作表的约束

5.7.1MySQL支持的完整性约束

NOT NULL(NK)、DEFAULT、UNIQUE KEY(UK)、PRIMARY KEY(PK)、AUTO_INCREAMENT、FOREIGE KEY(FK)

       

//多字段约束

CONSTRAINT 约束名 UNIQUE|PRIMARY KEY|…(属性名,属性名……)

//外键约束

CONSTRAINT 约束名 FOREIGE KEY (属性名1)

    REFERENCES 表名 (属性名2)

       

       

第6章 索引的操作

6.1 为什么使用索引

根据索引的存储类型:B型树索引(BTREE)和哈希索引(HASH)

MySQL支持6种索引:普通索引、唯一索引、全文索引、单列索引、多列索引和空间索引。

     

6.2创建和查看索引

6.2.1创建和查看普通索引

//创建表时创建普通索引

CREATE TABLE table_name(

    属性名 数据类型,

    属性名 数据类型,

……

属性名 数据类型 ,

INDEX|KEY 【索引名】(属性名1 【(长度)】【ASC|DESC】)

) ;

//在已经存在的表上创建普通索引

CREATE INDEX 索引名

ON 表名(属性名【(长度)】【ASC|DESC】)

//通过ALTER TABLE创建普通索引

ALTER TABLE table_name

ADD INDEX|KEY 索引名(属性名【(长度)】【ASC|DESC】)

6.2.2创建和查看唯一索引

UNIQUE INDEX|KEY 索引名(属性名【(长度)】【ASC|DESC】)

     

CREATE UNIQUE INDEX 索引名

ON 表名(属性名【(长度)】【ASC|DESC】)

     

ALTER TABLE table_name

ADD UNIQUE INDEX|KEY 索引名(属性名【(长度)】【ASC|DESC】)

6.2.3创建和查看全文索引

只能在存储引擎为MyISAM的数据库表上创建全文索引

CREATE TABLE table_name(

    属性名 数据类型,

    属性名 数据类型,

……

属性名 数据类型 ,

FUNNTEXT INDEX|KEY 索引名(属性名【(长度)】【ASC|DESC】)

) ENGINE=MyISAM;

     

CREATE FUNNTEXT INDEX 索引名

ON 表名(属性名【(长度)】【ASC|DESC】)

     

ALTER TABLE table_name

ADD FUNNTEXT INDEX|KEY 索引名(属性名【(长度)】【ASC|DESC】)

6.2.4创建和查看多列索引

     

6.3 删除索引

DROP INDEX index_name

    ON table_name;

     

     

第7章 视图的操作

7.1为什么使用视图

1、对视图内容的更新(添加、删除和修改)直接影响基本表。

2、当视图来自多个基本表时,不允许添加和删除数据。

     

7.2创建视图

CREATE VIEW view_name

    AS 查询语句;

     

7.3查看视图

//查看视图名

USE view;

SHOW TABLES;

//查看视图详细信息

SHOW TABLE STATUS 【FROM db_name】【LIKE 'pattern'】

例:SHOW TABLE STATUS FROM view \G

//查看视图定义信息

SHOW CREATE VIEW view_name \G

//查看视图设计信息

DESCRIBE|DESC view_name;

     

7.4 删除视图

DROP VIEW view_name 【,view_name】…

     

7.5修改视图

CREATE OR REPLACE VIEW view_name

    AS 查询语句;

ALTER VIEW view_name

    AS 查询语句;

     

7.6利用视图操作基本表

     

     

第8章 触发器的操作

8.1为什么使用触发器

触发器(TRIGGER)

     

8.2创建触发器

8.2.1创建有一条执行语句的触发器

CREATE TRIGGER trigger_name

    BEFORE|AFTER trigger_EVENT

        ON table_name FOR EACH ROW trigger_STMT

8.2.2创建包含多条执行语句的触发器

DELIMITER $$

CREATE TRIGGER trigger_name

    BEFORE|AFTER trigger_EVENT

        ON table_name FOR EACH ROW

            BEGIN

trigger_STMT    

END

$$

DELIMITER ;        

     

8.3查看触发器

SHOW TRIGGERS \G

//通过查看系统表查看触发器

USE information_schema;

SELECT * FROM triggers \G

     

8.4删除触发器

DROP TRIGGER trigger_name;

     

     

第9章 数据的操作

9.1插入数据记录

//插入完整数据记录

INSERT INTO table_name(field1,field2,…)

    VALUES(value1,value2,…)

//插入数据记录一部分

//插入多条数据记录

//插入查询结果

     

9.2更新数据记录

//更新特定数据记录

UPDATE table_name

SET field1=value1,

Field2=value2,

……

WHERE CONDITION;

     

9.3删除数据记录

DELECT FROM table_name

WHERE CONDITION;

   

   

第10章 单表查询数据记录

10.1简单数据记录查询

SELECT field1, field2, ……, fieldn

FROM table_name

//避免重复查询记录

SELECT DISYINCT field1, field2, ……, fieldn

FROM table_name

   

10.2条件数据记录查询

SELECT field1, field2, ……, fieldn

FROM table_name

WHERE CONDITION

关键字:(NOT) BETWEEN AND、(NOT) IS NULL、(NOT) IN、(NOT) LIKE'_'、'%

   

10.3排序数据记录查询

SELECT field1, field2, ……, fieldn

FROM table_name

WHERE CONDITION

ORDER BY fieldm1 [SAC|DESC] [,fieldm2 [SAC|DESC], ]

   

10.4限制数据记录查询数量

SELECT field1, field2, ……, fieldn

FROM table_name

WHERE CONDITION

LIMIT OFFSET_START, ROW_COUNT

OFFSET_START: 数据记录的起始偏移量(可不指定,默认为0)

ROW_COUNT: 显示的行数

   

10.5统计函数和分组数据记录查询

COUNT()、AVG()、SUM()、MAX()、MIN()

如果所操作的表中没有任何数据记录,则COUNT()函数会返回数据0,而其它函数则会返回NULL

//简单分组查询(显示每组中的一条数据记录)

SELECT function()

FROM table_name

WHERE CONDITION

GROUP BY field;

//实现统计功能分组查询:GROUP_CONTACT() 显示每个分组中的指定字段值

SELECT GROUP_CONTACT(field)

FROM table_name

WHERE CONDITION

GROUP BY field;

//实现多个字段分组查询

SELECT GROUP_CONTACT(field), function(field)

FROM table_name

WHERE CONDITION

GROUP BY field1, field2……, fieldn ;

//实现HAVING子句限定分组查询

SELECT function(field)

FROM table_name

WHERE CONDITION

GROUP BY field1, field2……, fieldn ;

HAVING CONDITION;

   

   

第11章 多表数据记录查询

11.1关系数据操作

并、笛卡尔积、内连接(自然连接、等值连接、不等连接)、外连接(左外连接、右外连接、全外连接)

   

11.2内连接查询

SELECT field1, field2, ……, fieldn

FROM join_tablename1 INNER JOIN join_tablename2【INNER JOIN join_tablename】

ON join_condition

   

11.3外连接查询

SELECT field1, field2, ……, fieldn

FROM join_tablename1 LEFT|RIGHT|FULL [OUTER] JOIN join_tablename2

ON join_condition

   

11.4合并查询数据记录

UNION、UNION ALL

   

11.5子查询

//带有关键字ANY的子查询:

=ANY

>ANY (>=ANY) 比子查询中返回数据记录中最小的还要大于(大于等于)数据记录

<ANY (<=ANY) 比子查询中返回数据记录中最大的还要小于(小于等于)数据记录

//带有关键字ANY的子查询:

=ALL

>ALL (>=ALL) 比子查询中返回数据记录中最大的还要大于(大于等于)数据记录

<ALL (<=ALL) 比子查询中返回数据记录中最小的还要小于(小于等于)数据记录

   

   

第12章 使用MySQL运算符

12.1为什么要使用运算符

   

12.2使用算术运算符

+、-、*、/(DIV)、%(MOD)

   

12.3使用比较运算符

>、<、=(<=>)、!=(<>)、>=、<=、BETWEEN AND、IS NULL、IN、LIKE、REGEXP (正则表达式匹配)

   

12.4使用逻辑运算符

AND(&&)、OR(||)、NOT(!)、XOR

   

12.5使用位运算符

&、|、-、^、<<、>>

   

   

第13章 使用MySQL常用函数

13.1使用字符串函数

13.1.1合并字符串函数:CONCAT(S1,S2,…,SN)CONCAT_WS(sep, S1,S2,…,SN)

13.1.2比较字符串大小函数:STRCMP(str1,str2)

13.1.3获取字符串长度函数:LENGTH() 和字符数函数:CHAR_LENGTH()

13.1.4字母大小写转换:UPPER()LOWER() UCASE()LCASE()

13.1.5查找字符串:

FIND_IN_SET(str,str1)和FIELD(str,str1, str2,str3)

LOCATE(str,str1)、POSITION(str IN str1)、INSTR(str,str1)

ELT(n,str1,str2)

MAKE_SET(num,str1,str2…,strn)

LEFT(str,num)和RIGHT(str,num)、SUBSTRING(str,num,len)和MID(str,num,len)

LTRIM(str)、RIGHT(str)、TRIM(str)

INSERT(str,pos,len,newstr)、REPLACE(str,substr,newstr)

   

13.2使用数值函数

ABS(x)、CEIL(x) 、FLOOR(x)、MOD(x)、RAND()、ROUND(x,y)、TRUNCATE(x,y)、

   

13.3使用日期和时间函数

CURDATE()、CURTIME()、NOW()、UNIX_TIMESTAMP(date)、FROM_UNIXTIME()、

WEEK(date)、YEAR(date)、HOUR(time)、MINUTE(time)、MONTHNAME(date)

   

13.4使用系统信息函数

VERSION()、DATABASE()、USER()、LAST_INSERT_ID()

   

   

 第14章 存储过程和函数的操作

14.1为什么使用存储过程和函数

简单、高性能

14.2创建存储过程和函数

//创建存储过程语法形式

CREATE PROCEDURE procedure_name([procedure_parameter[,…]])

[charaxteristic…] routine_body

//创建函数语法形式

CREATE FUNCTION function_name([function_parameter[,…]])

[charaxteristic…] routine_body

 

14.3关于存储过程和函数的表达式

14.3.1操作变量

//声明变量

DECLARE var_name [,…] type [DEFAULT value]

//赋值变量

SET var_name=expr[,…]

//通过"SELECT……INTO"实现

SELECT field_name[,…] INTO var_name[,…]

FROM table_name

WHERE condition

例:

DECLARE employee_sal INT DEFAULT 1000;

SET employee_sal=3500;

或者:

SELECT sal INTO employee_sal

FROM t_employee

WHERE empno=7565;

14.3.2操作条件

定义条件、定义处理程序

14.3.3使用光标

//声明光标

DECLARE cursor_name CURSOR FOR select_statement;

//打开光标

OPEN cursor_name;

//使用光标

FETCH cursor_name INTO var_name [,var_name]…

//关闭光标

CLOSE cursor_name;

14.3.4使用流程控制

条件控制语句:IF、CASE

循环控制语句:LOOP、WHILE、REPEAT(退出循环体:LEAVE)

 

14.4查看存储过程和函数

SHOW PROCEDURE STATUS [LIKE 'pattern' ] \G

SHOW FUNCTION STATUS [LIKE 'pattern' ] \G

//通过查看系统表information_schema_routines实现查看存储过程和函数的信息

USE information_schema;

SELECT * FROM routines \G

//SHOW CREATE语句

SHOW CREATE PROCEDURE proce_name \G

SHOW CREATE FUNCTION func_name \G

 

14.5修改存储过程和函数

ALTER PROCEDURE procedure_name

[characteristic…]

ALTER FUNCTION function_name

[characteristic…]

 

14.6删除存储过程和函数

DROP PROCEDURE proce_name;

DROP FUNCTION func_name;

 

 

第15章 MySQL安全性机制

15.1MySQL软件所提供的权限

15.1.1系统表mysql.user

该表有39个字段,可分为4类:用户字段、权限字段、安全字段和资源控制手段

15.1.2系统表mysql.db和mysql.host

可分为2类:用户字段和权限字段

15.1.3其它权限表

mysql.tables_priv、mysql.columns_priv、procs_priv

 

15.2MySQL所提供的用户机制

15.2.1登陆和退出

mysql -h hostname|hostIP -p port -u usename -p DatabaseName -e "SQL语句";

EXIT|QUIT

15.2.2创建普通用户账户

1、执行"CREATE USER"语句来创建用户账户

CREATE USER username[IDENTIFIED BY [PASSWORD] 'password']

[ , username[IDENTIFIED BY [PASSWORD] 'password']]

……

[ , username[IDENTIFIED BY [PASSWORD] 'password']]

2、执行INSERT语句创建用户

INSERT INTO user(Host, User, Password) Values('hostname', 'username', PSAAWORD('password'));

FLUSH PRIVILEGES; //使新建的用户账号生效

3、执行GRANT语句创建用户

GRANT priv_type ON databasename.tablename

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

[ , username[IDENTIFIED BY [PASSWORD] 'password']]

……

[ , username[IDENTIFIED BY [PASSWORD] 'password']]

15.2.3利用拥有超级权限用户root修改用户账号密码

1、通过mysqladmin命令修改root用户密码

mysqladmin -u usename -p password "new_password"

2、通过SET命令修改root用户密码

SET PASSWORD=PASSWORD("new_password")

3、更新系统表mysql.user数据记录修改root用户密码

UPDATE user SET password=PASSWORD("new_passwprd")

WHERE user="root" AND host="localhost";

15.2.4利用root用户修改普通用户账号密码

GRANT SELECT,CREATE.DROP ON *.*

TO 'qian'@'localhost' IDENTIFIED BY 'new_passwprd'

WITH GRANT OPTION;

15.2.5删除普通用户账号

DROP USER user1 [,user2]…

//通过系统表mysql.user删除

DELETE FROM user

WHERE user="cjgong" AND host="localhost";

 

15.3权限管理

GRANT priv_type ON database.table

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

[, user [IDENTIFIED BY [PASSWORD] 'passwprd']]

……

[WITH GRANT OPTION…..]

//查看用户所拥有权限

SHOW GRANTS FOR user

//收回用户所拥有权限

REVOKE priv_type ON database.table

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

[, user [IDENTIFIED BY [PASSWORD] 'passwprd']]

……

 

 

第16章 MySQL日志管理

16.1MySQL所支持的日志

二进制日志、错误日志、查询日志

 

 

第17章 MySQL数据库维护和性能提高

17.1MySQL数据库维护

17.1.1通过复制数据文件实现数据备份

只适合存储引擎为MyISAM的表

17.1.2通过命令mysqldump实现数据备份

//备份一个数据库

mysqldump -u username -p dbname

table1 table2…tablen

>backupname.sql

//备份多个数据库

mysqldump -u username -p --databases

dbname1 dbname2…dbnamen

>backupname.sql

//备份所有数据库

mysqldump -u username -p --all -databases

>backupname.sql

17.1.3通过复制数据文件实现数据还原

17.1.4通过命令MySQL实现数据还原

mysqldump -u username -p [dbname] < backupname.sql

17.1.5实现数据库中表导出成文本文件

//通过SELECT…INTO OUTFILE

SELECT [file_name] FROM table_name

[WHERE contion]

INTO OUTFILE 'FILE_NAME'

[OPTION]

//通过mysqldump命令

mysqldump -u root -pPassword -T file_dorectory dbname table_name [option]

//通过mysql命令

mysql -u root -pPassword -e "SELECT [file_name] FROM table_name" dbname > file_name

17.1.6实现文本文件导入到数据库表

//执行"LOAD DATA INFILE"命令

LOAD DATA [LOCAL] INFILE 'file_name' INTO TABLE table_name [OPTION];

//执行mysqlimport命令

mysqlimport -u root -pPassword [--LOCAL] dbname file_name [OPTION];

 

 

 

posted @ 2013-07-12 13:03  小蝎莫慌  阅读(2034)  评论(0编辑  收藏  举报