首页 > 技术专区 > Mysql > DML和DQL 屏幕太窄?试试伸展一下吧 >

DML和DQL

1. MySQL的存储引擎

存储引擎的类型

MyISAM、InnoDB 、Memory、CSV等9种

MyISAM与InnoDB类型主要区别

image.png


适用场合

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

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

查看当前默认存储引擎

语法

SHOW VARIABLES LIKE ‘storage_engine%’;

修改存储引擎

修改my.ini配置文件

default-storage-engine= InnoDB

2. 设置表的存储引擎

语法

CREATE TABLE 表名(
    #省略代码
)ENGINE=存储引擎;

示例

CREATE TABLE `myisam` (
   id  INT(4)
)ENGINE=MyISAM;

3. 数据表的存储位置

MyISAM类型表文件

*.frm:表结构定义文件

*.MYD:数据文件

*.MYI:索引文件

InnoDB类型表文件

*.frm:表结构定义文件

ibdata1文件

注意:存储位置,因操作系统而异,可查my.ini

datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
innodb_data_home_dir="D:/MySQL Datafiles/"

4. 插入单条数据记录

语法

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

示例

INSERT INTO `student`(`loginPwd`,`studentName`,`gradeId`,`phone`,`bornDate`)
VALUES('123','黄小平',1,'13956799999','1996-5-8');

注意

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

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

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

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

5. 插入多条数据记录

语法

INSERT INTO 新表(字段名列表)
VALUES(值列表1),(值列表2),……,(值列表n);

示例

INSERT INTO `subject`(`subjectName`,`classHour`,`gradeID`)
VALUES('Logic Java',220,1),('HTML',160,1),('Java OOP',230,2);

注意

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

6. 数据更新

语法

UPDATE 表名 
SET 字段1=值1,字段2=值2,…,字段n=值n 
[WHERE 条件];

示例

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

where条件子句

where中的运算符image.png



7. 数据删除

语法

DELETE FROM 表名 [WHERE条件];
TRUNCATE TABLE 表名;

TRUNCATE语句删除后将重置自增列,表结构及其字段、约束、索引保持不变,执行速度比DELETE语句快

示例

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

8. 什么是查询

image.png

查询产生一个虚拟表

看到的是表形式显示的结果,但结果并不真正存储

每次执行查询只是从数据表中提取数据,并按照表的形式显示出来

9. 查询语法

语法

SELECT    <列名|表达式|函数|常量> 
FROM      <表名> 
[WHERE    <查询条件表达式>] 
[ORDER BY <排序的列名>[ASC或DESC]];

示例

SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate` 
FROM `student`
WHERE `gradeId` = 1
ORDER BY `studentNo`;

10. 数据查询基础

查询全部的行和列

SELECT * FROM `student`;

查询部分列

SELECT `studentNo`,`studentName`,`address`
FROM `student`
WHERE `address`=‘河南新乡’;

11. 数据查询-列别名

示例

SELECT `studentNo`  AS 学生编号,`studentName` AS 学生姓名,
        `address `AS 学生地址  
FROM `student`
WHERE `address` <> '河南新乡‘
SELECT `firstName` + '.' + `lastName` AS 姓名 
FROM `employees`;

注意:

1. + 连接的数据类型必须兼容

2. 如果 + 连接字符型数据,结果为字符串数据的连接

3. 如果 + 连接数值型数据,结果为数值的和

12. where条件语句

用于检索数据表中符合条件的记录

搜索条件可由一个或多个逻辑表达式组成,结果-般为真或假

搜索条件的组成

逻辑操作符

image.png

比较操作符image.png

13. 数据查询-空行、常量列

查询空行

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

使用常量列

SELECT `studentName` AS 姓名,`address` AS 地址,
’北京信息中心’ AS 学校名称
FROM `student`;

14. 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;

15. LIMIT子句

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

语法

SELECT  <字段名列表>
FROM  <表名或视图>
[WHERE  <查询条件>]
[GROUP BY <分组的字段名>]
[ORDER BY  <排序的列名>[ASC 或 DESC]]
[LIMIT [位置偏移量,]行数];

示例

SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate` 
FROM `student`
WHERE `gradeId` = 1
ORDER BY studentNo
limit 4, 10;

注意

使用LIMIT子句时,注意第1条记录的位置是0!

16. 子查询

子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询

子查询在WHERE语句中的一般用法

语法

SELECT … FROM 表1 WHERE 字段1  比较运算符(子查询)

注意

将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个

子查询在SELECT语句中的一般用法

示例

select t1.id, (select id from grade where id = 2) from student t1

17. IN子查询

常用IN替换等于(=)的子查询

IN后面的子查询可以返回多条记录

SELECT `studentName` FROM `student` 
WHERE `studentNo` IN(
    SELECT `studentNo` FROM `result` 
    WHERE `subjectNo` =  (
        SELECT `subjectNo` FROM `subject`
        WHERE `subjectName`='Logic Java'
    )AND `studentResult` = 60  
);

18. NOT IN子查询

SELECT `studentNo`, `studentName` FROM `student` WHERE `studentNo` 
NOT IN(
  SELECT `studentNo` FROM `result` 
  WHERE `subjectNo` = (      
      SELECT `subjectNo` FROM `subject` 
      WHERE `subjectName`='Logic Java'
   ) AND `examDate` = (        
        SELECT MAX(`examDate`) FROM `result`  WHERE `subjectNo` = (   
             SELECT `subjectNo` FROM `subject` 
             WHERE `subjectName`='Logic Java') 
   )
)……

19. 总结

image.png