l MySQL是什么?
MySQL 是最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
l 为什么要使用MySQL?
优点:
体积小、速度快、总体拥有成本低,开源;
支持多种操作系统;
是开源数据库,提供的接口支持多种语言连接操作 ;
l 数据库和表
l 常见的数据库管理系统
² MYSQL :开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL5.5版本之后都是由Oracle发布的版本。
² Oracle :收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
² DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中. 在中国的互联网公司,要求去IOE(IBM小型机、Oracle数据库、EMC存储设备)
² SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
² SyBase :已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
² SQLite : 嵌入式的小型数据库,应用在手机端。
SQL语句介绍
l 什么是SQL?
全称Structured Query Language,简称SQL,中文叫结构化查询语言。
SQL语句使用
l 创建数据库
语法:
* create database 数据库名;
* create database 数据库名 character set 字符集;
l 查看数据库
查看数据库服务器中的所有的数据库:show databases;
查看某个数据库的定义的信息:show create database 数据库名;
l 删除数据库
drop database 数据库名称;
l 其他的数据库操作命令
切换数据库:use 数据库名;
查看正在使用的数据库:select database();
字段类型
l 创建表
create table 表名(
字段名 类型(长度) 约束,
字段名 类型(长度) 约束
);
单表约束:
* 主键约束:primary key
* 唯一约束:unique
* 非空约束:not null
* 注意:主键约束 = 唯一约束 + 非空约束
l 查看表
查看数据库中的所有表:show tables;
查看表结构:desc 表名;
l 删除表
drop table 表名;
l 修改表
alter table 表名 add 列名 类型(长度) 约束; --修改表添加列.
alter table 表名 modify 列名 类型(长度) 约束; --修改表修改列的类型长度及约束.
alter table 表名 change 旧列名 新列名 类型(长度) 约束; --修改表修改列名.
alter table 表名 drop 列名; --修改表删除列.
rename table 表名 to 新表名; --修改表名
alter table 表名 character set 字符集; --修改表的字符集
插入记录:insert
l 语法:
insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入所有列
insert into 表 (列名1,列名2,列名3..) values select (列名1,列名2,列名3..) from 表
insert into 表 values select * from 表
l 注意:
- 列名数与values后面的值的个数相等
- 列的顺序与插入的值得顺序一致
- 列名的类型与插入的值要一致.
- 插入值得时候不能超过最大长度.
值如果是字符串或者日期需要加引号’’ (一般是单引号)
更新记录:update
l 语法:
update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 条件;
l 注意:
- 列名的类型与修改的值要一致.
- 修改值得时候不能超过最大长度.
- 值如果是字符串或者日期需要加’’.
删除记录:delete
l 语法:
delete from 表名 [where 条件];
l 面试题:
删除表中所有记录使用delete from 表名; 还是用truncate table 表名;
删除方式:delete 一条一条删除,不清空auto_increment记录数。
truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始。
SQL查询
查询语法
SELECT [DISTINCT]*[列名,列名] FROM 表 [WHERE 条件].
排序
SQL语法关键字:
ORDER BY
ASC(升序) DESC(降序)
1.1 聚合函数(组函数)
l 特点:只对单列进行操作
l 常用的聚合函数:
sum():求某一列的和
avg():求某一列的平均值
max():求某一列的最大值
min():求某一列的最小值
count():求某一列的元素个数
分组
l SQL语法关键字:
GROUP BY
HAVING
语法顺序和执行顺序(重要)
l MySQL查询语法顺序
- SELECT
- FROM
- LEFT JOIN
- ON
- WHERE
- GROUP BY
- HAVING
- ORDER BY
- LIMIT
l WHERE条件执行顺序(影响性能)
1.mysql:从左往右去执行where条件的
2.oracle:从右往左去执行where条件的
l 结论:写WHERE条件的时候,优先级高的部分要去编写过滤力度最大的条件语句。
多表关联查询
交叉连接的关键字:CROSS JOIN
l 隐式交叉连接
SELECT * FROM A, B
l 显式交叉连接
SELECT * FROM A CROSS JOIN B
内连接
内连接的关键字:INNER JOIN
l 隐式内连接
SELECT * FROM A,B WHERE A.id = B.id
l 显式内连接
SELECT * FROM A INNER JOIN B ON A.id = B.id
外连接
l 左外连接:LEFT JOIN 或者 LEFT OUTER JOIN
SELECT * FROM A LEFT JOIN B ON A.id = B.id
l 右外连接::RIGHT JOIN 或者 RIGHT OUTER JOIN
SELECT * FROM A RIGHT JOIN B ON A.id = B.id
1.1 页查询
MySQL的分页关键字是:LIMIT
l 格式:
SELECT * FROM table LIMIT [offset,] rows
子查询
l 定义
子查询允许把一个查询嵌套在另一个查询当中。
子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询。
l 位置
select 中、from 后、where 中.
MySQL事务处理
事务概述
MySQL 事务主要用于处理操作量大,复杂度高的数据。
一般来说,事务是必须满足4个条件(ACID):
l Atomicity(原子性)
l Consistency(稳定性)
l Isolation(隔离性)
Durability(可靠性)
对于ACID的解释如下:
l 原子性:构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。
l 稳定性(一致性):数据库在事务执行前后状态都必须是稳定的。
l 隔离性:事务之间不会相互影响。
l 可靠性(持久性):事务执行成功后必须全部写入磁盘。