zoukankan      html  css  js  c++  java
  • mysql 5.1简明教程

    第一章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,' 物理学基础','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个选项UNDEFINEDMERGETEMPTABLE。其中,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:ackupdb_book.sql

    2、使用sqlyog图形工具备份


    第二节:数据还原

    1、使用mysql命令还原

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

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

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

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

    2、使用sqlyog图形工具还原

  • 相关阅读:
    7.ASP.NET Core InProcess Hosting
    highcharts.Js
    Csharp: Linq Query
    HtmlAgility 抓取网页上的数据
    更改 Solution (.Sln) file
    Sql: Oracle paging
    css: hide or dispaly div
    Csharp:HttpWebRequest , HttpClient and RestSharp
    Csharp:jquery.ajax-combobox
    Csharp: TreeList Drag and Drop
  • 原文地址:https://www.cnblogs.com/zfc2201/p/6791946.html
Copyright © 2011-2022 走看看