1. MySQL的存储引擎
存储引擎的类型
MyISAM、InnoDB 、Memory、CSV等9种
MyISAM与InnoDB类型主要区别
适用场合
使用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中的运算符
7. 数据删除
语法
DELETE FROM 表名 [WHERE条件];
TRUNCATE TABLE 表名;
TRUNCATE语句删除后将重置自增列,表结构及其字段、约束、索引保持不变,执行速度比DELETE语句快
示例
DELETE FROM student WHERE studentName = ‘王宝宝’;
TRUNCATE TABLE student;
8. 什么是查询
查询产生一个虚拟表
看到的是表形式显示的结果,但结果并不真正存储
每次执行查询只是从数据表中提取数据,并按照表的形式显示出来
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条件语句
用于检索数据表中符合条件的记录
搜索条件可由一个或多个逻辑表达式组成,结果-般为真或假
搜索条件的组成
逻辑操作符
比较操作符
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') ) )……