Mysql储存引擎

外键作用

       外键作用

       创建外键:

              建表时指定外键约束

              建表后修改

       删除外键

       删除外键,删除表

 

数据库数据管理

       数据库意义:

              数据储存

              数据管理

       管理书库数据方法:

              通过SQLyog等管理工具管理数据库数据

              通过DML语句管理数据库数据

 

DML语言

       DML(数据操作语言)

              用于操作数据库对象中包含的数据

       包括:

              INSERT(添加数据语句)

              UPDATE(更新数据语句)

              DELETE(删除数据语句)

 

MySQL的存储引擎

         存储引擎的类型

MyISAM、InnoDB 、Memory、CSV等9种

MyISAM与InnoDB类型主要区别

                            Mysql储存引擎_第1张图片

                     //同样适用delete from清空数据后,重启数据库服务后,对于InnoDB的表,自增列从初

始值重新开始,而MyISAM类型的表,自增类型依然从上一个自增数据基础上开始

                            经验:

                                   适用场合

                            使用MyISAM:   不需事务,空间小,以查询访问为主

                            使用InnoDB:     多删除、更新操作,安全性高,事务处理及并发控制

 

查看当前默认存储引擎

              语法:

                     SHOW VARIABLES LIKE ‘storage_engine%’;

                     Mysql储存引擎_第2张图片

         修改存储引擎

修改my.ini配置文件

                    

 

       设置表的存储引擎

                     语法:

                            CREATE TABLE 表名(

                                #省略代码

)ENGINE=存储引擎;

                     示例:

                            CREATE TABLE `myisam` (

                                 id  INT(4)

)ENGINE=MyISAM;

       数据表的存储位置

  MyISAM类型表文件

*.frm:表结构定义文件

*.MYD:数据文件

*.MYI:索引文件

InnoDB类型表文件

*.frm:表结构定义文件

ibdata1文件

Mysql储存引擎_第3张图片Mysql储存引擎_第4张图片

              注意:

         存储位置

因操作系统而异,可查my.ini

                     datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

innodb_data_home_dir="D:/MySQL Datafiles/"

 

DML语句——插入单条数据记录

                            语法:

                                   INSERT INTO 表名 [(字段名列表)] VALUES (值列表);

                            注意:

字段名是可选的,如省略则依次插入所有字段

多个列表和多个值之间使用逗号分隔

值列表和字段名列表一一对应

如插入的是表中部分数据,字段名列表必填

                            示例:

                                   INSERT INTO

`student`(`loginPwd`,`studentName`,`gradeId`,`phone`,`bornDate`)

VALUES('123','黄小平',1,'13956799999','1996-5-8');

 

DML语句——插入多条数据记录

                            语法:

                                   INSERT INTO 新表(字段名列表)

VALUES(值列表1),(值列表2),……,(值列表n);

                            示例:

                                   INSERT INTO `subject`(`subjectName`,`classHour`,`gradeID`)

VALUES('Logic Java',220,1),('HTML',160,1),('Java OOP',230,2);

                            经验:

                                   为避免表结构发生变化引发的错误,建议插入数据时写明具体字段名!

                            //插入多条数据用,号隔开。插入多条数据是MYSQL独有的,其他数据库只能单条插入

DML语句——将查询结果插入新表

                问题:编写SQL语句实现从学生表提取姓名、手机号两列数据存储到通讯录表中

                            示例:

                                   CREATE TABLE `phoneList`(

                                       SELECT `studentName`,`phone`

                                       FROM `student`);

                                          //如新表已存在,将会报错!

                                   Mysql储存引擎_第5张图片

 

 

将查询结果插入新表

                     语法:

                            CREATE TABLE 新表(SELECT 字段1,字段2……  FROM 原表);

                            //如新表已存在,不能重复创建

 

 

                            示例:

                       编写SQL语句实现从学生表提取姓名、手机号两列数据存储到通讯录表中

                                   CREATE TABLE `phoneList`(

SELECT `studentName`,`phone`

FROM `student`);

                                   Mysql储存引擎_第6张图片

 

 

数据更新

         更新数据记录

                            语法:

                                          UPDATE 表名

SET 字段1=值1,字段2=值2,…,字段n=值n

[WHERE 条件];

                            示例:

                                          UPDATE student SET sex = ‘女’;

UPDATE student SET address = ‘北京女子职业技术学校家政班’

WHERE address = ‘北京女子职业技术学校刺绣班’;

                                   添加条件修改

                                   UPDATE `result` SET studentResult=studentResult-5 WHERE studentResult>50;

 

 

数据删除

                                  

         删除数据记录

                            语法:

                                          DELETE FROM 表名 [WHERE条件];

                                          TRUNCATE TABLE 表名;

                            //TRUNCATE语句删除后将重置自增列,表结构及其字段、约束、索引

保持不变,执行速度比DELETE语句快

                            示例:

                                          DELETE FROM student WHERE studentName = ‘王宝宝’;

TRUNCATE TABLE student;

Mysql储存引擎_第7张图片

 

 

什么是查询;

                    

                            Mysql储存引擎_第8张图片

 

查询机制简介

              Mysql储存引擎_第9张图片

 

查询语法

              语法:

                     SELECT    <列名|表达式|函数|常量>

FROM      <表名>

[WHERE    <查询条件表达式>]

[ORDER BY <排序的列名>[ASC或DESC]];

              示例:

                     SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate`

FROM `student`

WHERE `gradeId` = 1

ORDER BY `studentNo`;

              Mysql储存引擎_第10张图片

              //select语法顺序是固定的

              Mysql储存引擎_第11张图片

              逻辑操作符

              Mysql储存引擎_第12张图片

 

 

 

              比较操作符

              Mysql储存引擎_第13张图片

                     //    between and\  like  \in \ null

                     //    全是模糊查询

                            Mysql储存引擎_第14张图片

                     示例:查询行李的同学学号和名字  #LIKE 结合使用的:%(0到任意个字符) ­ _(一个字符)

                                   SELECT studentno,studentresult FROM student WHERE studentname LIKE ‘李%’;

                                         

                              查询姓李的,但是名字只有一个字

                                         

                                   SELECT studentno,studentresult FROM student WHERE studentname LIKE ‘李­_’;

                              查询姓李的,但是名字有两个字

                                           //多写个下划线即可,一个下划线代表一个字

                                   SELECT studentno,studentresult FROM student WHERE studentname LIKE ‘李­__’;

                              查询名字里面带某个字,比如“文”

                                         

                                 SELECT studentno,studentresult FROM student WHERE studentname LIKE ‘%文%’;

 

                                   查询一个和两个字

                                          SELECT studentno,studentresult FROM student WHERE studentname

LIKE ‘李­_’ or ‘李__’;

                                   两个查询连起来

                                          SELECT studentno,studentresult FROM student WHERE studentname

LIKE ‘李­_’;

                                          UNION

                                          SELECT studentno,studentresult FROM student WHERE studentname

LIKE ‘李__’;

 

                              #查询学员姓名中有“%”这个字的同学学号,姓名,转义符

SELECT s.studentNo,s.studentName FROM student s

WHERE s.studentName LIKE '%\%%';

 

SELECT s.studentNo,s.studentName FROM student s

WHERE s.studentName LIKE '%\_%';

 

#转义符\ 能不能使用我自己的转移符呢?(:)

SELECT s.studentNo,s.studentName FROM student s

WHERE s.studentName LIKE '%:%%' ESCAPE ':';

Mysql储存引擎_第15张图片

                            #连接查询

 

 

                     满足条件的查询(where)

                            示例:考试成绩95-100

SELECT studentno,studentresult  FROM result 

WHERE studentresult>=95  OR  studentresult<=100;

                              模糊的查询

                                   SELECT studentno,studentresult  FROM result WHERE studentresult

BETWEEN 95 AND 100;

                              精确的查询

                                   SELECT studentno,studentresult FROM result WHERE studentno=1000;

                              或者写成 &&

SELECT studentno,studentresult  FROM result  -

WHERE studentresult>=95  &&  studentresult<=100;

                              除了1000号同学

                                   SELECT studentno,studentresult FROM result WHERE studentno!=1000;

                                   SELECT studentno,studentresult FROM result WHERE NOT studentno=1000;

 

数据查询基础

         示例:查询全部的行和列

              SELECT * FROM `student`;

                  查询部分列

             

                     SELECT `studentNo`,`studentName`,`address`

FROM `student`

WHERE `address`=‘河南新乡’;

 

数据查询-列别名

                     使用AS命名列

                            示例:

              SELECT `studentNo`  AS 学生编号,`studentName` AS 学生姓名,

        `address `AS 学生地址 

FROM `student`

WHERE `address` <> '河南新乡‘;

              Mysql储存引擎_第16张图片

//SELECT concat(‘姓名:’,studentname) AS 新姓名 FROM student; 查询结果去个新名字

//SELECT DISTINCT studentno FROM result;  去除重复项(distinct,默认all)

//select查询中可以使用表达式

   SELECT @@auto_increment_increment

   SELECT VERSION();

   SELECT 100*3-1 计算结果;

         

              数据查询-空行、常量

                            示例:

                                   SELECT `studentName` FROM `student` WHERE `email` IS NULL;

                                   原来有数据,但数据被清除的列如何查询?

                使用常量列

                       示例:

                                   SELECT `studentName` AS 姓名,`address` AS 地址,

’北京信息中心’ AS 学校名称

FROM `student`;

 

常用函数——聚合函数

                       Mysql储存引擎_第17张图片

                       //count 返回的是一个数字

                       #查询参加2016年2月17日考试的所有学员的最高分、最低分、平均分。

SELECT MAX(studentResult) AS 最高分,MIN(studentResult) AS 最低分,AVG(studentResult) AS 平均分 FROM result WHERE examDate = '2016-2-17';

                      

常用函数——字符串函数

                                   Mysql储存引擎_第18张图片

             

 

              常用函数——时间日期函数

                            Mysql储存引擎_第19张图片

                            #按出生年份分组统计学生人数,将各组中人数达到2人的年份和人数显示出来

SELECT YEAR(borndate) AS 出生年份,COUNT(studentNo) AS 人数 FROM student GROUP BY YEAR(borndate) HAVING 人数>=2;

 

                            now() //当前时间

                            Select addate(now(),-5) //当前之后5天的时间

                            Select year(now()) //当前的年

             

              常用函数——数学函数

                     Mysql储存引擎_第20张图片

 

 

 

ORDER BY子句

         ORDER BY子句实现按一定顺序显示查询结果

                            把成绩都降低10%后加5分,再查询及格成绩,并按照成绩从高到低排序

                            示例:

                                   SELECT `studentNo` AS 学生编号,(studentResult*0.9+5 ) AS 综合成绩

FROM `result`

WHERE (`studentResult`*0.9+5) >=60

ORDER BY studentResult DESC;

 

LIMIT子句

                     MySQL查询语句中使用LIMIT子句限制结果集

                     语法:

                            SELECT  <字段名列表>

FROM  <表名或视图>

[WHERE  <查询条件>]

[GROUP BY <分组的字段名>]  //HAVING跟WHERE一样 但是HAVING只能跟GROUP BY后

[ORDER BY  <排序的列名>[ASC 或 DESC]]

[LIMIT [位置偏移量,]行数];

                            例:

                                   #查询2016年2月17日考试前5名的学员的学号和分数

SELECT studentNo,studentResult FROM result ORDER BY studentResult DESC LIMIT 5;

#将所有女学生按年龄从大到小排序,从第2条记录开始显示6名女学生的姓名、年龄、出生日期、手机号信息

SELECT studentname,phone,borndate,address FROM student WHERE sex = '女' ORDER BY borndate LIMIT 2,6;

         查询所有年级编号为1的学员信息,按学号升序排序

    1. 显示前4条记录
    2. 每页4条,显示第2页,即从第5条记录开始显示4条数据

 

 

示例:

        Mysql储存引擎_第21张图片

       //LIMIT .. ,4 前面可以不写 显示条数必写

       //LIMIT 0,5 #第一个数字代表从哪条记录开始

       //LIMIT 5,5 #查询第二页 LIMIT 10,5 #查询第三页

你可能感兴趣的:(悲催笔记OTL..)