第一章Mysql简介与安装

第一节 MySql简介

百度百科

第二节 MySql安装与配置

1、MySql5.1下载及安装

2、MySql数据库编码配置 UTF-8

3、MySql图形页面sqlyog下载与安装

https://eyun.baidu.com/s/3o7GaVJO#sharelink/path=%2F

第二章 Mysql数据类型简介

第一节:整数类型、浮点数类型和定点数类型

1、整数类型

类型

字节数

无符号(unsigned)范围

有符号(signed)范围

TINYINT

1

0~255

-128~127

SMALLINT

2

0~65535

-32768~32767

MEDIUMINT

3

0~16777215

-8388608~8388607

INT

4

0~4294967295

-2147483648~2147483647

INTEGER

4

0~4294967295

-2147483648~2147483647

BIGINT

8

0~18446744073709551615

-9223372036854775808

~9223372036854775807

2、浮点数类型和定点数类型

类型

字节数

无符号(unsigned)范围

有符号(signed)范围

FLOAT

4

0,

1.175494351E-38

~-3.402523466E+38

-3.402523466E+38

~1.175494351E-38

0,

1.175494351E-38

~3.402523466E+38

DOUBLE

8

0,

2.2250738585072014E-308

~1.7976931348623157E-308

-1.7976931348623157E+308

~2.2250738585072014E-308

0,

2.2250738585072014E-308

~1.7976931348623157E+308

DECIMAL(M,D)

M+2

同DOUBLE

同DOUBLE

M表示:数据的总长度(不包括小数点);

D表示:小数位;

例如 decimal(5,2) 123.45

存入数据的时候,按四舍五入计算

第二节:日期与时间类型

类型

字节数

取值范围

零值

YEAR

1

1910~2155

0000

DATE

4

1000-01-01~9999-12-31

0000:00:00

TIME

3

-838:59:59~838:59:59

00:00:00

DATETIME

8

1000-01-01 00:00:00

~9999-12-31 23:59:59

0000:00:00 00:00:00

TIMESTAMP

4

19700101080001

~20380119111407

00000000000000

第三节:字符串类型

类型

说明

CHAR

固定长度字符串

VARCHAR

可变长度字符串

TEXT

大文本(TINYTEXT, TEXT, MEDIUMTEXT, LOGNTEXT)

ENUM

枚举类型(只能取一个元素)

SET

集合类型(能取多个元素)

第四节:二进制类型

类型

说明

BINARY(M)

字节数为M,允许长度为0~M的定长二进制字符串

VARBINARY(M)

允许长度为0~M的变长二进制字符串,字节数为值的长度加1

BIT(M)

M位二进制数据,最多255个字节

TINYBLOB

可变长二进制数据,最多255个字节

BLOB

可变长二进制数据,最多(216-1)个字节

MEDIUMBLOB

可变长二进制数据,最多(224-1)个字节

LONGBLOB

可变长二进制数据,最多(232-1)个字节

第三章 数据库基本操作

第一节:数据库简介

数据库(database)是按照数据结构来组织、存储和管理数据的仓库;

第二节:显示所有数据库

show databases;

第三节:创建数据库

create database 数据库名;

第四节:删除数据库

drop database 数据库名;

 

第四章 数据库表基本操作

第一节:创建表

表是数据库存储数据的基本单位。一个表包含若干个字段或记录;

语法:

create table 表名(

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

...

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

);

约束条件

说明

PRIMARY KEY

标识该属性为该表的主键,可以唯一的标识对应的记录

FOREIGN KEY

标识该属性为该表的外键,与某表的主键关联

NOT NULL

标识该属性不能为空

UNIQUE

标识该属性的值是唯一的

AUTO_INCREMENT

标识该属性的值自动增加

DEFAULT

为该属性设置默认值

USE db_book;

DROP TABLE IF EXISTS `t_book`;

DROP TABLE IF EXISTS `t_booktype`;

/*创建图书类别表:t_bookType*/

CREATE TABLE t_booktype (

id INT PRIMARY KEY AUTO_INCREMENT,

typeName VARCHAR (20)

) ;

/*创建图书表:t_book*/

CREATE TABLE t_book (

id INT PRIMARY KEY AUTO_INCREMENT,

bookName VARCHAR (50),

author VARCHAR (50),

price DECIMAL (6, 2),

bookTypeId INT,

CONSTRAINT `fk_t_book` FOREIGN KEY (`bookTypeId`) REFERENCES `t_booktype` (`id`)

) ;

第二节:查看表结构

USE db_book;

/*查看基本表结构*/

DESCRIBE t_book;

DESC t_booktype;

/*查看表详细结构*/

SHOW CREATE TABLE t_book;

SHOW CREATE TABLE t_booktype;

第三节:修改表

USE db_book;

/*修改表名*/

ALTER TABLE t_book2 RENAME t_book;

/*修改字段*/

ALTER TABLE t_book CHANGE bookName bookName2 VARCHAR(20);

/*在第一字段前插入一个新的字段*/

ALTER TABLE t_book ADD testField INT FIRST;

/*在指定字段后插入一个新的字段*/

ALTER TABLE t_book ADD testField INT AFTER author;

/*删除字段*/

ALTER TABLE t_book DROP testField;

第四节:删除表

/*删除表*/

DROP TABLE t_booktype;

第四章 查询数据

数据准备:

CREATE DATABASE /*!32312 IF NOT EXISTS*/`db_book` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `db_book`;

/*Table structure for table `t_book` */

DROP TABLE IF EXISTS `t_book`;

CREATE TABLE `t_book` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`bookName` varchar(50) DEFAULT NULL,

`author` varchar(50) DEFAULT NULL,

`price` decimal(6,2) DEFAULT NULL,

`bookTypeId` int(11) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `fk_t_book` (`bookTypeId`),

CONSTRAINT `fk_t_book` FOREIGN KEY (`bookTypeId`) REFERENCES `t_booktype` (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8;

/*Data for the table `t_book` */

LOCK TABLES `t_book` WRITE;

insert  into `t_book`(`id`,`bookName`,`author`,`price`,`bookTypeId`) values (1,'Java编程思想(第4版)','埃史尔、 陈昊鹏','84.24',1),(2,'Spring实战(第4版) ','Craig Walls','50.00',1),(3,'Spring+MyBatis企业应用实战','疯狂软件','45.20',1),(4,'Node.js实战','吴海星 (译者)','54.50',1),(5,'React精髓','阿尔乔姆·费多耶夫 (Artemij Fedosejev)、 奇舞团','50.00',1),(6,'Learning TypeScript中文版','Remo H.Jansen、 龙逸楠','70.30',1),(7,'基因与细胞(全彩)','《科学新闻》杂志社 (Science News) ','42.28',2),(8,'物种起源 (译林人文精选)','达尔文 (Charles Robert Darwin)、 苗德岁','25.60',2),(9,'生物心理学(第10版)','詹姆斯•卡拉特、 苏彦捷','152.04',2),(10,'视觉之旅:神奇的化学元素(彩色典藏版)','西奥多•格雷 (Theodore Gray)、 尼克•曼 (Nick Mann)','47.40',3),(11,'元素的盛宴(化学奇谈与日常生活) ','山姆·基恩 (作者), 杨蓓 (译者), 阳曦 (译者)','34.10',3),(12,'化学简史','J.R.柏廷顿(James Riddick Partington)、 胡作玄','29.90',3),(13,'人体:人体结构、功能与疾病图解','帕克 (Steve Parker)、 左焕琛','44.53',4),(14,'全科医学(第4版) ','墨塔(John Murtagh) (作者), 梁万年 (译者)','210.00',4),(15,'医学图文史:改变人类历史的7000年(彩色典藏版)','玛丽•道布森(Mary Dobson)','106.60',4),(16,'仿生结构:结构的相似性','约瑟夫·利姆、 沈海晖','22.10',5),(17,'仿生智能纳米材料','江雷等','110.50',5),(18,'分子仿生','李峻柏、 白春礼','100.60',5),(19,'物理学与生活(原书第8版)','(W. Thomas Griffith)、 (Juliet W.Brosing)','53.50',6),(20,'物理学','亚里士多德、 张竹明','14.00',6),(21,'\r\n物理学基础','David Halliday、Resnick','148.50',6),(22,'数学之美(第二版) ','吴军 (作者)','36.60',7),(23,'迷人的数学','伊凡.莫斯科维奇、 佘卓桓','49.84',7),(24,'牛津通识读本:数学','蒂莫西·高尔斯 (Gowers T.)、 刘熙','19.70',7),(25,'分子系统发生学','黄原','118.50',NULL);

UNLOCK TABLES;

/*Table structure for table `t_booktype` */

DROP TABLE IF EXISTS `t_booktype`;

CREATE TABLE `t_booktype` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`typeName` varchar(20) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

/*Data for the table `t_booktype` */

LOCK TABLES `t_booktype` WRITE;

insert  into `t_booktype`(`id`,`typeName`) values (1,'计算机'),(2,'生物学'),(3,'化学'),(4,'医学'),(5,'仿生学'),(6,'物理学'),(7,'数学'),(8,'哲学');

UNLOCK TABLES;

/*Table structure for table `t_pricelevel` */

DROP TABLE IF EXISTS `t_pricelevel`;

CREATE TABLE `t_pricelevel` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`priceLevel` int(11) DEFAULT NULL,

`price` float DEFAULT NULL,

`desc` varchar(300) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

/*Data for the table `t_pricelevel` */

LOCK TABLES `t_pricelevel` WRITE;

insert  into `t_pricelevel`(`id`,`priceLevel`,`price`,`desc`) values (1,1,80,'价格较贵'),(2,2,60,'价格适中'),(3,3,40,'价格便宜');

UNLOCK TABLES;

第一节:单表查询

1、查询所有字段

SELECT id, bookname, author, price, booktypeid FROM t_book;

SELECT * FROM t_book;

2、查询指定字段

SELECT bookname, author, price FROM t_book;

3、where条件查询

SELECT * FROM t_book t WHERE t.`bookTypeId` = 1;

SELECT * FROM t_book t WHERE t.`price` > 100;

4、带in关键字查询

SELECT * FROM t_book t WHERE t.`bookTypeId` IN (1, 3);

SELECT * FROM t_book t WHERE t.`bookTypeId` NOT IN (1, 3);

5、带between and的范围查询

SELECT * FROM t_book t WHERE t.`price` BETWEEN 50 AND 100;

SELECT * FROM t_book t WHERE t.`price` NOT BETWEEN 50 AND 100;

6、带like的模糊查询

/*全字匹配,较少用*/

SELECT * FROM t_book t WHERE t.`bookName` LIKE '物理学';

/*单个字模糊匹配*/

SELECT * FROM t_book t WHERE t.`bookName` LIKE '物理_';

/*多个字模糊匹配*/

SELECT * FROM t_book t WHERE t.`bookName` LIKE '物理学%';

SELECT * FROM t_book t WHERE t.`bookName` LIKE '%物理学%';

7、空值查询

SELECT * FROM t_book t WHERE t.`author` IS NULL;

SELECT * FROM t_book t WHERE t.`author` IS NOT NULL;

8、带and的多条件查询

SELECT * FROM t_book t WHERE (t.`price` NOT BETWEEN 50 AND 100) AND t.`bookTypeId` = 1;

9、带or的多条件查询

SELECT * FROM t_book t WHERE t.`bookTypeId` = 1 OR t.`bookTypeId` = 7;

10、distinct支重复查询

SELECT DISTINCT t.booktypeid FROM t_book t;

11、对查询结果排序

SELECT * FROM t_book t ORDER BY t.`price`;

12、group by分组查询

/*与GROUP_CONCAT一起使用,会把结果拼接在一起*/

SELECT GROUP_CONCAT(t.bookname), t.booktypeid FROM t_book t GROUP BY t.booktypeid;

/*与COUNT一起使用,统计分组后每组成员的个数*/

SELECT COUNT(t.bookname), t.booktypeid FROM t_book t GROUP BY t.booktypeid;

/*与having一起使用,限制输出结果*/

SELECT COUNT(t.bookname), t.booktypeid FROM t_book t GROUP BY t.booktypeid HAVING COUNT(t.bookname) > 3;

/*WITH ROLLUP,在最后加入一个汇总行*/

SELECT COUNT(t.bookname), t.booktypeid FROM t_book t GROUP BY t.booktypeid WITH ROLLUP;

13、limit分页查询

/*查询1-5条记录*/

SELECT * FROM t_book t LIMIT 0,5;

/*查询6-10条记录*/

SELECT * FROM t_book t LIMIT 5,5;

/*查询11-15条记录*/

SELECT * FROM t_book t LIMIT 10,5;

第二节:使用聚合函数

1、count函数

SELECT COUNT(*) AS total FROM t_book ;

SELECT COUNT(t.bookname), t.booktypeid FROM t_book t GROUP BY t.booktypeid;

2、sun函数

SELECT SUM(t.price), t.booktypeid FROM t_book t GROUP BY t.booktypeid;

3、avg函数

SELECT AVG(t.price), t.booktypeid FROM t_book t GROUP BY t.booktypeid;

4、max函数

SELECT MAX(t.price), t.booktypeid FROM t_book t GROUP BY t.booktypeid;

5、min函数

SELECT MIN(t.price), t.booktypeid FROM t_book t GROUP BY t.booktypeid;

第三节:连接查询

连接查询是将两个或两个以上的表按照某个条件连接起来,从中选取需要的数据。

1、内连接查询

内连接查询是一种最常用的连接查询。内连接查询可以查询两个或者两个以上的表。

SELECT * FROM t_book, t_booktype;

SELECT * FROM t_book b, t_booktype bt WHERE b.`bookTypeId` = bt.`id`;

SELECT b.`bookName`, b.`price`, bt.`bookTypeName` FROM t_book b, t_booktype bt WHERE b.`bookTypeId` = bt.`id`;

2、外连接查询

外连接可以查出某一张的所有信息

a) 左连接查询

可以查询出“表1”的所有记录,而“表2”中只能查询出匹配的记录

/*以左表作为全量表进行关联查询*/

SELECT b.`bookName`, b.`author`, bt.`bookTypeName` FROM t_book b LEFT JOIN t_booktype bt ON b.`bookTypeId` = bt.`id`;

b) 右连接查询

可以查询出“表2”的所有记录,而“表1”中只能查询出匹配的记录

/*以右表作为全量表进行关联查询*/

SELECT b.`bookName`, b.`author`, bt.`bookTypeName` FROM t_book b RIGHT JOIN t_booktype bt ON b.`bookTypeId` = bt.`id`;

3、多条件连接查询

SELECT b.`bookName`, b.`price`, bt.`bookTypeName` FROM t_book b, t_booktype bt WHERE b.`bookTypeId` = bt.`id` AND b.`price` > 50;

第四节:子查询

1、带in关键字的子查询

一个查询语句的条件可能落在另一个select语句的查询结果中

SELECT * FROM t_book t WHERE t.`bookTypeId` IN (SELECT id FROM t_booktype);

SELECT * FROM t_book t WHERE t.`bookTypeId` NOT IN (SELECT id FROM t_booktype);

2、带比较运算符的子查询

子查询可以使用比较运算符

SELECT * FROM t_book t WHERE t.price >= (SELECT price FROM t_pricelevel WHERE pricelevel = 1);

3、带exists关键字的子查询

假如子查询查询到记录,则进行外层查询,否则,不执行外层查询

SELECT * FROM t_book t WHERE EXISTS (SELECT id FROM t_booktype);

SELECT * FROM t_book t WHERE NOT EXISTS (SELECT id FROM t_booktype);

4、带any关键字的子查询

Any关键字表示满足其中任一条件

SELECT * FROM t_book t WHERE t.price >= ANY(SELECT price FROM t_pricelevel);

5、带all关键字的子查询

All关键字表示满足所有条件

SELECT * FROM t_book t WHERE t.price >= ALL(SELECT price FROM t_pricelevel);

第五节 合并查询结果

1、union

使用union关键字时,数据库系统会将所有的查询结果合并在一起,然后去除掉相同的记录。

SELECT * FROM t_book t WHERE t.`price` BETWEEN 50 AND 100

UNION

SELECT * FROM t_book t WHERE t.`bookTypeId` = 1

2、union all

使用union all不会去除掉系统相同的记录,而是将所有结果合并到一起。

SELECT * FROM t_book t WHERE t.`price` BETWEEN 50 AND 100

UNION ALL

SELECT * FROM t_book t WHERE t.`bookTypeId` = 1

第五章 为表和字段取别名

1、为表取别名

SELECT * FROM t_book t WHERE t.id = 1;

2、为字段取别名

SELECT

t.id AS id,

t.`bookName` AS bookName,

t.`price` AS price

FROM

t_book t

WHERE t.id = 1 ;

第六章 插入、更新和删除数据

第一节:插入数据

1、给表的所有字段插入数据

INSERT INTO t_book

VALUES

(

NULL,

'Effective Java中文版(第2版)',

'Joshua Bloch',

41.00,

1

) ;

2、给表的指定字段插入数据

INSERT INTO t_book (bookname, author, price, booktypeid)

VALUES

(

'Java并发编程实战',

'Brian Goetz, Tim Peierls, Joshua Bloch',

52.42,

1

) ;

3、同时插入多条记录

INSERT INTO t_book (bookname, author, price, booktypeid)

VALUES

(

'Java 8实战',

'厄马(Raoul-Gabriel Urma)、 弗斯科(Mario Fusco)',

61.62,

1

),

(

'Java性能权威指南',

'奥克斯 (Scott Oaks)、 柳飞',

62.40,

1

) ;

第二节:更新数据

UPDATE

t_book t

SET

t.`bookName` = 'Java编程思想(第4版)',

t.`price` = 84.24

WHERE t.id = 1 ;

第三节:删除数据

DELETE

FROM

t_book t

WHERE t.id = 1 ;

第七章 索引

第一节:索引的引入

索引定义:索引是由数据库表中一列或者多列组合而成,其作用是提高对表中数据的查询速度;类似于图书的目录,方便快速定位,寻找指定的内容。

第二节:索引的优缺点

优点:提高查询数据的速度。

缺点:创建和维护索引的时间增加了。

第三节:索引实例

第四节:索引的分类

1、普通索引

这类索引可以创建在任何数据类型中。

2、唯一索引

使用unique参数可以设置,在创建唯一索引时,限制该索引的值必须是唯一的。

3、全文索引

使用fulltext参数可以设置,全文索引只能创建在char、varchar、text、类型的字段上。主要作用就是提高查询较大字符串类型的速度;只有MyISAM引擎支持该索引,Mysql默认引擎不支持。

4、单列索引

在表中可以给单个的字段创建索引,单列索引可以是普通索引,也可以是唯一索引,还可以是全文索引。

5、多列索引

多列索引是在表的多个字段上创建一个索引。

6、空间索引

使用spatial参数可以设置空间索引。空间索引只能建立在空间数据类型上,这样可以提高系统获取空间数据的效率。

第五节:创建索引

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

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

/*单列索引*/

CREATE TABLE t_user (

id INT,

username VARCHAR (20),

PASSWORD VARCHAR (20),

INDEX idx_username(username)

) ;

/*唯一索引*/

CREATE TABLE t_user2 (

id INT,

username VARCHAR (20),

PASSWORD VARCHAR (20),

UNIQUE INDEX idx_username(username)

) ;

/*多列索引*/

CREATE TABLE t_user3 (

id INT,

username VARCHAR (20),

PASSWORD VARCHAR (20),

INDEX idx_username_password(username,PASSWORD)

) ;

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

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名

ON 表名 (属性名[(长度)][ASC|DESC])

CREATE TABLE t_user4 (

id INT PRIMARY KEY NOT NULL,

username VARCHAR (20),

PASSWORD VARCHAR (20)

) ;

CREATE INDEX idx_username ON t_user4(username);

CREATE UNIQUE INDEX idx_username ON t_user4(username);

CREATE INDEX idx_username_password ON t_user4(username,PASSWORD);

3、用alter table语句来创建索引

ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX

索引名 (属性名[(长度)][ASC|DESC])

ALTER TABLE t_user4 ADD INDEX idx_username(username);

ALTER TABLE t_user4 ADD UNIQUE INDEX idx_username(username);

ALTER TABLE t_user4 ADD INDEX idx_username(username, PASSWORD);

第六节:删除索引

DROP INDEX 索引名 ON 表名;

DROP INDEX idx_username ON t_user4;

第八章 视图

第一节:视图的引入

1、视图是一种虚拟的表,是从数据库中一个或者多个表中导出来的表。

2、数据库中只存放了视图的定义,而并没有存放视图中的数据,这些数据存放在原来的表中。

3、使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。

第二节:视图的作用

1、使操作简便化。

2、增加数据的安全性。

3、提高表的逻辑独立性。

第三节:创建视图

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

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

AS SELECT 语句

[WITH [CASCADED|LOCAL] CHECK OPTION]]

ALGORITHM是可选参数,表示视图选择的算法。它包括3个选项UNDEFINED、MERGE和TEMPTABLE。其中,UNDEFINED选项表示mysql将自动选择所要使用的算法;MERGE选项表示将使用视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分;TEMPTABLE选项表示将视图的结果存入临时表,然后使用临时表执行语句;

“视图名”参数表示要创建的视图和名称

“属性清单”是可选参数,其指定了视图中各种属性的名词,默认情况下与select语句中查询的属性相同;

SELECT 语句参数是一个完整的查询语句,标识从某个表查出某些满足条件的记录,将这些记录导入视图中;

WITH CHECK OPTION是可选参数,表示在更新视图时要保证在该视图的权限范围之内。CASCADED是可选参数,表示更新视图时要满足所有相关视图和表的条件,该参数为默认值;LOCAL表示更新视图时,要满足该视图本身的定义条件即可;

1、在单表上创建视图

CREATE VIEW v_book AS SELECT bookname, price FROM t_book;

CREATE VIEW v_book(NAME, price) AS SELECT bookname, price FROM t_book;

2、在多表上创建视图

CREATE VIEW v_book (bookname, booktype) AS

SELECT

b.bookname,

bt.typename

FROM

t_book b,

t_booktype bt

WHERE b.booktypeid = bt.id;

第四节:查看视图

1、DESCRIBE语句查看视图基本信息

DESCRIBE v_book;

DESC v_book;

2、SHOW TABLE STATUS语句查看视图基本信息

SHOW TABLE STATUS LIKE 'v_book';

3、SHOW CREATE VIEW语句查看视图详细信息

SHOW CREATE VIEW v_book;

4、在views表中查看视图详细信息

第五节:修改视图

1、CREATE OR REPLACE VIEW语句修改视图

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

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

AS SELECT 语句

[WITH [CASCADED|LOCAL] CHECK OPTION]]

CREATE OR REPLACE VIEW v_book (bookname, price, booktype) AS

SELECT

b.bookname,

b.price,

bt.typename

FROM

t_book b,

t_booktype bt

WHERE b.booktypeid = bt.id;

2、ALTER语句修改视图

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

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

AS SELECT 语句

[WITH [CASCADED|LOCAL] CHECK OPTION]]

ALTER VIEW v_book (bookname, booktype) AS

SELECT

b.bookname,

bt.typename

FROM

t_book b,

t_booktype bt

WHERE b.booktypeid = bt.id;

第六节:更新视图

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

1、插入(INSERT)

INSERT INTO v_book VALUES(NULL, 'java', 'jack', 50.00, 1);

2、更新(UPDATE)

UPDATE v_book SET bookname='java good' WHERE id=30;

3、删除(DELETE)

DELETE FROM v_book WHERE id=30;

第七节:删除视图

删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。

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

DROP VIEW IF EXISTS v_book;

第九章 触发器

第一节:触发器的引入

触发器(trigger)是由事件来触发某个操作。这些事件包括insert语句、update语句和delete语句。当数据库系统执行这此事件时,就会激活触发器执行相应的操作。

第二节:创建与使用触发器

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

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

ON 表名 FOR EACH ROW 执行语句

CREATE TRIGGER trig_book AFTER INSERT

ON t_book FOR EACH ROW

UPDATE

t_bookType bt

SET

bookNum = bookNum + 1

WHERE bt.id = new.bookTypeId ;

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

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

ON 表名 FOR EACH ROW

BEGIN

执行语句列表

END

DELIMITER |

CREATE TRIGGER trig_book2 AFTER DELETE

ON t_book FOR EACH ROW

BEGIN

UPDATE

t_bookType bt

SET

bookNum = bookNum - 1

WHERE bt.id = old.bookTypeId ;

INSERT INTO t_log

VALUES

(

NULL,

NOW(),

'在book表里删除了一条数据'

) ;

DELETE

FROM

t_test

WHERE old.bookTypeId = t_test.id ;

END |

DELIMITER ;

第三节:查看触发器

1、show triggers语句查看触发器信息

SHOW TRIGGERS;

2、在triggers表中查看触发器信息

第四节:删除触发器

DROP TRIGGER trig_book ;

第十章 mysql常用函数

第一节:日期和时间函数

1、CURDATE():返回当前日期

2、CURTIME():返回当前时间

3、MONTH(d):返回日期d中的月份值,范围是1~12

第二节:字符串函数

1、CHAR_LENGTH(s):计算字符串s的字符数

2、UPPER(s):把所有字母变成大写字母

3、LOWER(s):把所有字母变成小写字母

第三节:数学函数

1、ABS(X):求绝对值

2、SQRT(X):求平方根

3、MOD(X,Y):求余

第四节:加密函数

1、PASSWORD(str):一般用户的密码加密,不可逆

2、MD5(str):普通加密,不可逆

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

4、DECODE(crypt_str, pswd_str):解密函数

更多函数请到网上下载手册

MySQL 5.1参考手册.7z

http://pan.baidu.com/s/1dDhqLaD

第十一章 存储过程与函数

第一节:存储过程与函数的引入

存储过程和函数是在数据库中定义一些SQL 语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL 语句。存储过程和函数可以避免开发人员重复的编写相同的SQL 语句。而且,存储过程和函数是在MySQL服务器中存储和执行的,可以减少客户端和服务器端的数据传输;

第二节:创建存储过程和函数

1、创建存储过程

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

[characteristic...] routine_body

sp_name 参数是存储过程的名称;

proc_parameter 表示存储过程的参数列表;

characteristic 参数指定存储过程的特性;

routine_body 参数是SQL 代码的内容,可以用BEGIN...END 来标志SQL 代码的开始和结束。

proc_parameter 中的每个参数由3 部分组成。这3 部分分别是输入输出类型、参数名称和参数类型。

[ IN | OUT | INOUT ] param_name type

其中,IN 表示输入参数;OUT 表示输出参数;INOUT 表示既可以是输入,也可以是输出;param_name 参数是

存储过程的参数名称;type 参数指定存储过程的参数类型,该类型可以是MySQL 数据库的任意数据类型;

Characteristic 参数有多个取值。其取值说明如下:

LANGUAGE SQL:说明routine_body 部分是由SQL 语言的语句组成,这也是数据库系统默认的语言。

[ NOT ] DETERMINISTIC :指明存储过程的执行结果是否是确定的。DETERMINISTIC 表示结果是确定的。每

次执行存储过程时,相同的输入会得到相同的输出。NOT DETERMINISTIC 表示结果是非确定的,相同的输入

可能得到不同的输出。默认情况下,结果是非确定的。

{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } :指明子程序使用SQL 语句的限制;

CONTAINS SQL 表示子程序包含SQL 语句,但不包含读或写数据的语句;NO SQL 表示子程序中不包含SQL

语句;READS SQL DATA 表示子程序中包含读数据的语句;MODIFIES SQL DATA 表示子程序中包含写数据的

语句。默认情况下,系统会指定为CONTAINS SQL;

SQL SECURITY { DEFINER | INVOKER };指明谁有权限来执行。DEFINER 表示只有定义者自己才能够执行;

INVOKER 表示调用者可以执行。默认情况下,系统指定的权限是DEFINER。

COMMENT ‘string’ :注释信息;

示例:

DELIMITER &&

CREATE PROCEDURE proc_book (IN bt INT, OUT count_num INT) READS SQL DATA

BEGIN

SELECT

COUNT(*)

FROM

t_book

WHERE booktypeid = bt ;

END &&

DELIMITER ;

调用:

proc_book(1, @total);

2、创建存储函数

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

RETURNS TYPE

[ characteristic... ] routine_body

sp_name 参数是存储函数的名称;

func_parameter 表示存储函数的参数列表;

RETURNS type 指定返回值的类型;

characteristic 参数指定存储过程的特性,该参数的取值与存储过程中的取值是一样的;routine_body 参数是SQL 代码的内容,可以用BEGIN...END 来标志SQL 代码的开始和结束;

func_parameter 可以由多个参数组成,其中每个参数由参数名称和参数类型组成,其形式如下:

param_name type 其中,param_name 参数是存储函数的参数名称;type 参数指定存储函数的参数类型,

该类型可以是MySQL 数据库的任意数据类型;

示例:

DELIMITER &&

CREATE FUNCTION func_book (bookId INT) RETURNS VARCHAR (50)

BEGIN

RETURN

(SELECT

bookname FROM t_book

WHERE id = bookId) ;

END &&

DELIMITER ;

调用:

SELECT func_book(1);

3、变量的使用

a) 定义变量

DECLARE var_name [,...] TYPE [ DEFAULT VALUE ]

b) 为变量赋值

SET var_name = expr [,var_name=expr] ...

SELECT col_name[,...] INTO var_name[,...]

FROM table_name WHERE CONDITION

4、游标的使用

查询语句可能查询出多条记录,在存储过程和函数中使用游标来逐条读取查询结果集中的记录。游标的使用包括声明游标、打开游标、使用游标和关闭游标。游标必须声明在处理程序之前,并且声明在变量和条件之后。

a) 声明游标

DECLARE cursor_name CURSOR FOR select_statement ;

b) 打开游标

OPEN cursor_name;

c) 使用游标

FETCH cursor_name INTO var_name [,var_name ... ];

d) 关闭游标

CLOSE cursor_name;

示例:

DELIMITER &&

CREATE PROCEDURE porc_user2 ()

BEGIN

DECLARE uname,

pwd VARCHAR (20) ;

DECLARE cur_user CURSOR FOR

SELECT

username,

PASSWORD

FROM

t_user2 ;

OPEN cur_user ;

FETCH cur_user INTO uname, pwd ;

INSERT INTO t_user

VALUES

(NULL, uname, pwd) ;

CLOSE cur_user ;

END &&

DELIMITER ;

调用:

CALL porc_user2();

5、流程控制的使用

存储过程和函数中可以使用流程控制来控制语句的执行。MySQL 中可以使用IF 语句、CASE 语句、LOOP语句、LEAVE 语句、ITERATE 语句、REPEAT 语句和WHILE 语句来进行流程控制。

a) IF语句

IF search_condition THEN statement_list

[ ELSEIF search_condition THEN statement_list ]...

[ ELSE statement_list ]

END IF

示例:

DELIMITER &&

CREATE PROCEDURE porc_user3 (IN bookId INT)

BEGIN

SELECT

COUNT(*) INTO @num

FROM

t_user

WHERE id = bookId ;

IF @num > 0

THEN

UPDATE

t_user

SET

username = 'java'

WHERE id = bookId ;

ELSE

INSERT INTO t_user

VALUES

(NULL, 'newuser', 'newpwd') ;

END IF ;

END &&

DELIMITER ;

b) CASE语句

CASE case_value

WHEN when_value THEN statement_list

[WHEN when_value THEN statement_list]...

[ELSE statement_list ]

END CASE

c) LOOP, LEAVE语句

LOOP 语句可以使某些特定的语句重复执行,实现一个简单的循环。但是LOOP 语句本身没有停止循环

的语句,必须是遇到LEAVE 语句等才能停止循环。LOOP 语句的语法的基本形式如下:

[begin_label:]LOOP

Statement_list

END LOOP [ end_label ]

LEAVE 语句主要用于跳出循环控制。语法形式如下:

LEAVE label

d) ITERATE语句

ITERATE 语句也是用来跳出循环的语句。但是,ITERATE 语句是跳出本次循环,然后直接进入下一次

循环。基本语法:

ITERATE label ;

e) REPEAT语句

REPEAT 语句是有条件控制的循环语句。当满足特定条件时,就会跳出循环语句。REPEAT 语句的基本

语法形式如下:

[ begin_label : ] REPEAT

Statement_list

UNTIL search_condition

END REPEAT [ end_label ]

f) WHILE语句

[ begin_label : ] WHILE search_condition DO

Statement_list

END WHILE [ end_label ]

第三节:调用存储过程和函数

1、调用存储过程

CALL sp_name( [parameter[,...]] )

2、调用存储函数

fun_name( [parameter[,...]] )

第四节:查看存储过程和函数

1、SHOW STATUS语句查看存储过程和函数的状态

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

2、SHOW CREATE语句查看存储过程的函数的定义

SHOW CREATE { PROCEDURE | FUNCTION } sp_name ;

3、从information_schema.Routines表中查看存储过程和函数的信息

第五节:修改存储过程和函数

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

characteristic :

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

| SQL SECURITY { DEFINER | INVOKER }

| COMMENT  ‘string’

其中,sp_name 参数表示存储过程或函数的名称;

characteristic 参数指定函数的特性。

CONTAINS SQL 表示子程序包含SQL 语句,但不包含读或写数据的语句;

NO SQL 表示子程序中不包含SQL 语句;

READS SQL DATA表示子程序中包含数据的语句;

MODIFIES SQL DATA 表示子程序中包含写数据的语句。

SQL SECURITY{ DEFINER | INVODER } 指明谁有权限来执行。

DEFINER 表示只有定义者自己才能够执行;

INVODER 表示调用者可以执行。

COMMENT  ‘string’ 是注释信息。

第六节:删除存储过程和函数

DROP {PROCEDURE | FUNCTION } sp_name ;

 

第十二章 数据备份与还原

第一节:数据备份

备份数据可以保证数据库的安全,数据库管理员需要定期的进行数据库备份。

1、使用mysqldump命令备份

mysqldump -u username -p dbname table1 table2 ... > BackupName.sql

dbname参数表示数据库的名称。

table1和table2参数表示表的名称,没有该参数时将备份整个数据库。

BackupName.sql参数表示备份文件的名称,文件名前面可以加上一个绝对路径。通常以sql作为后缀。

示例:

mysqldump -u root -p db_book > D:\backup\db_book.sql

2、使用sqlyog图形工具备份

第二节:数据还原

1、使用mysql命令还原

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

dbname参数表示数据库名称。该参数是可选参数,可以指定数据库名,也可以不指定。

指定数据库名时,表示还原该数据库下的表。

不指定数据库名时,表示还原特定的一个数据库。而备份文件中有创建数据库的语句。

2、使用sqlyog图形工具还原

mysql 5.1简明教程的更多相关文章

  1. MySQL全文索引应用简明教程

    本文从以下几个方面介绍下MySQL全文索引的基础知识: MySQL全文索引的几个注意事项 全文索引的语法 几种搜索类型的简介 几种搜索类型的实例 全文索引的几个注意事项 搜索必须在类型为fulltex ...

  2. Docker简明教程

    Docker简明教程 [编者的话]使用Docker来写代码更高效并能有效提升自己的技能.Docker能打包你的开发环境,消除包的依赖冲突,并通过集装箱式的应用来减少开发时间和学习时间. Docker作 ...

  3. AWK 简明教程

    AWK 简明教程 转自:http://coolshell.cn/articles/9070.html 有一些网友看了前两天的<Linux下应该知道的技巧>希望我能教教他们用awk和sed, ...

  4. Tips & Tricks:Apache log4j简明教程(二)

    在上一讲Apache log4j简明教程(一)中介绍了log4j的基本概念,配置文件,以及将日志写入文件的方法,并给出了一个详细的示例.这一讲,我在继续谈一谈如何使用log4j将日志写入MySQL数据 ...

  5. Tips & Tricks:Apache log4j简明教程(一)

    Apache log4j的官方介绍是“log4j is a reliable, fast and flexible logging framework (APIs) written in Java, ...

  6. 2013 duilib入门简明教程 -- 第一个程序 Hello World(3)

    小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...

  7. 2013 duilib入门简明教程 -- 部分bug (11)

     一.WindowImplBase的bug     在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题,     1.最大化按钮的样式 ...

  8. 2013 duilib入门简明教程 -- 部分bug 2 (14)

        上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃            如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...

  9. 2013 duilib入门简明教程 -- 自绘控件 (15)

        在[2013 duilib入门简明教程 -- 复杂控件介绍 (13)]中虽然介绍了界面设计器上的所有控件,但是还有一些控件并没有被放到界面设计器上,还有一些常用控件duilib并没有提供(比如 ...

随机推荐

  1. C# listbox DataSource数据绑定--一年半以前的bug

    listbox使用DataSource进行数据绑定和删除,大家肯定都会, 写这个随笔只是因为....这是一年半以前刚进公司的我遗留的bug,现在看看当时竟然没有解决 - - 现在写个测试程序,写个随笔 ...

  2. luogu P4779 【模板】单源最短路径(标准版)

    线段树优化dij 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 我可能是个智障 // luogu-judger-enable-o2 #pragma GCC diagnostic error "-std= ...

  3. 利用cve-2017-11882的一次渗透测试

    利用工具:https://github.com/Ridter/CVE-2017-11882/ 影响版本: office 2003 office 2007 office 2010 office 2013 ...

  4. nginx+uwsgi+flask 服务器配置

    注:每个机器,软件版本可能不一样,虽然网上有很多类似的帖子,但是我在搭建的时候遇到了不少的坑,此文仅供参考. 请求流程: 1.安装uwsgi uwsgi是一个应用服务器,非静态文件的网络请求就必须通过 ...

  5. Processing an OS Descriptor request -- Remote Desktop Protocol

    Special processing on the client is needed when processing TS_URB_OS_FEATURE_DESCRIPTOR_REQUEST. The ...

  6. VB.NET中Module的概念

    今天学习VB.NET,发现VB.NET里面有一个Module的东西,如下图(图-1)所示: 图-1 上网查了一下VB.NET里面的Module,才发现这是学习VB.NET遇到的第一个典型的问题就是:为 ...

  7. GitHub 第一坑:换行符自动转换

    源起 一直想在 GitHub 上发布项目.参与项目,但 Git 这货比较难学啊.买了一本<Git 权威指南>,翻了几页,妈呀,那叫一个复杂,又是 Cygwin 又是命令行的,吓得我不敢学了 ...

  8. 报错:TargetException, 非静态方法需要一个目标

    如果实例为null,调用实例方法会报如上错. 解决办法: 检查实例是否为null,考虑什么情况下实例为null,然后排除实例为null的情况.

  9. 使用jQuery和Bootstrap实现多层、自适应模态窗口

    本篇实践一个多层模态窗口,而且是自适应的. 点击页面上的一个按钮,弹出第一层自适应模态窗口. 在第一层模态窗口内包含一个按钮,点击该按钮弹出第二层模态窗口,弹出的第二层模态窗口会挡住第一层模态窗口,即 ...

  10. delphi连接mysql不用添加DSN(mysql connector odbc 5.1版)

    一.下载安装mysql驱动http://mysql.com/downloads/connector/odbc/二.添加adoconnection,adoquery,使用以下连接字符串http://ww ...