MySQL总结

1. MySQL总结

1.1 SQL的分类

数据查询语言: (DQL)select
数据库操作语言: (DML)insert,delete,update
数据定义语言: (DDL)create,drop,alter
事务操作语言: (TCL)commit,rollback
数据控制语言:(DCL)grant,revoke

1.2 命令导入数据

source <sql脚本路径>  # source D://a.sql

1.3 简单命令

1.3.1 查看数据库版本

mysql --version
mysql -V

1.3.2 创建数据库

cerate datebase 数据库名;  #create database test;

使用数据库

use 数据库名; #use test

1.3.3 查看使用的数据库

select database();
# 查看数据库版本
select version();

1.3.4 查看所有数据库和查看当前库中所有的表

show databases; #查看所有数据库
show table; #查看库中所有的表

1.3.6 查看表结构

desc 表名;

1.3.7 查看创建表的语句

show create table 表名;

1.4 查询(DQL)

1.4.1 条件查询
条件查询需要用到where 语句,where 必须放到from 语句表的后面 支持如下运算符
distinct 去除重复行

运算符说明
=等于
<>或者!=不等于
<小于
<=小于等于
>大于
>=大于等于
between…and,两者之间,等同于>=and <=
is null为 null (is not null不为空
and并且
or或者
in包含,相当于多个or(not in 不在这个范围中)
notnot 可以取非,主要用在is或in中
likelike 称为模糊查询,支持%或下划线匹配 ,%匹配任意个字符 下划线, 一个下划线匹配一个字符

1.4.2 排除数据
单一字段排序: 排序采用order by 子句,order by后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by 默认采用升序,如果存在where 子句那么order by 必须放到where 语句的后面
多个字段排序: order by 后面紧跟哪个字段,哪个字段就先排,依次向下排序
1.4.3 数据处理函数/单行处理函数

Lower转换小写
upper转换大写
substr取子串(substr被截取的字符串,起始下标,截取的长度)
length取长度
trim去空格
str_to_date将字符串转化为日期
date_format格式化日期
format设置前分位
round四舍五入
rand()生成随机数
Ifnull可以将null转化为一个具体的值
select lower(字段) from 表名;#将该字段查出来的数据全部转换为小写

1.4.4 case…when…then…else…end
当员工的工作岗位是manager 的时候,工资上调10%,当工作岗位是salesman的时候,工资上调50%,其他不变

select 
  ename,job,sal as oldsal,
  (case job when 'MANAGER' then sal*1.1 when 'SALESMAN' then sal*1.5 else sal end) as newsal 
from 
	emp;

1.4.5 ifnull

select ifnull(字段名,0) from 表名;  #表示该字段如果为空就替换为0

在SQL 语句当中若有NULL值参与数学运算,计算结果一定是NULL为了防止计算结果出现NULL,建议先使用ifnull空值处理函数预先处理.
1.4.6 分组函数/聚合函数/多行处理函数

函数使用
max取某个字段的最大值
min取某个字段的最小值
sum取某个字段的总和
count取得记录数
avg娶某个字段的平均数

1.4.7 分组查询

分组查询主要涉及两个子句:group by 和 having

原则:能在where 中过滤的数据,尽量在where 中过滤,效率较高.having的过滤是专门对分组之后的数据进行过滤的.

select 字段
from 表名
where ....
group by ....
having ....(就是为了过滤分组后的数据而存在的-不可单独出现)
order by ...

1.4.8 连接查询
连接分类: 连接分为内连接和外连接
内连接: 表 1 inner join 表 2 on 关联条件 做连接查询的时候一定要写上关联条件 inner可以省略
**外连接:**外连接分为左外连接和右外连接
左外连接: 表 1 left outer join 表 2 on 关联条件 做连接查询的时候一定要写上关联条件 outer 可以省略
右外连接: 表 1 right outer join 表 2 on 关联条件做连接查询的时候一定要写上关联条件outer 可以省略
左外连接和右外连接的区别: 左外连接以左表的表为准和右边的表进行比较,和左边的表不相等都会显示出来,右表符合条件的显示,不符合条件的就不显示; 右外连接正好相反.

1.4.9子查询
子查询就是嵌套的select语句,可以理解为子查询就是一张表
where 子查询: 在where 语句中加入select 语句

select * from 表名 where id ={select id from 表名}

from 子查询: 在from语句中使用子查询

select * from 表名 join (子查询) on 条件

select 子查询: 在select语句中使用子查询

select 字段 ,(子查询) from 表名 字段

1.4.10 union和limit
union: 表示可以合并的集合(相加)

select * from student where hight > 170 union select * from student where hight < 155
# 查询hight大于170和hinght小于155的学生信息

limit: 主要用于提取前几条或者中间某几条数据

select * from 表名 where 条件 limit 0 5   # 拿取从第一条数据为始的5条数据

1.5.1 创建表
创建表的时候,表中有字段,每一个字段有:

  • 字段名
  • 字段数据类型
  • 字段长度限制
  • 字段约束

mysql常用数据类型:

类型描述
char(长度)定长字符串,存储空间大小固定,适合作为主键或外键
varchar(长度)变长字符串,存储空间等于实际数据空间
double(有效数字位数,小数位)数值型
Float(有效数字位,小数位)数值型
int(长度)整型
bigint(长度)长整型
Date日期型
biobBinary Large Object(二进制大对象)
其他类型…

1.5.2 增加/删除/修改表结构
添加字段

alter table 表名 add 字段名 字段类型(长度);

修改字段

alter table 表名 modify 字段名 字段类型(长度);

删除字段

alter table 表名 drop 字段名;

1.5.3 数据库的增删改查
插入数据 (insert)

insert into 表名(字段名,字段名,....,字段名) value (字段值,字段值,....,字段值)

更新数据(update)

update 表名 set 字段名=字段值,...字段名=字段值 where 条件

删除数据(delete)

delete from 表名 where 条件

1.5.4 创建表加入约束

常见的约束

  • 非空约束 not null
  • 唯一约束 unique
  • 主键约束 primary key
  • 外键约束 foreign key
  • 自定义检查约束,check (不建议使用) (在mysql中现在还不支持)

建立学生表

create table student(
	id int primary key,   #int类型的长度限制可以省略不写  id作为主键
	student_id  char(11) not null unique,  #学生学号,唯一且不为空
	name varchar(50)  not null,   #学生姓名,不为空
	cno int, #外键 班级id
	foreign key(cno) references class(id),  #将班级表class的主键id作为该表的外键
	unique(student_id,name)  #学生学号和姓名联合起来不唯一 约束没有添加在列的后面,这种约束被称为表级约束。
)

1.5.5 增加/删除/修改表约束
1.5.5.1 增加约束
添加外键约束

alter table 从表 add constraint 约束名称 foreign key 从表(外键字段) references 主表(主键字段);

添加主键约束

alter tableadd constraint 约束名称 primary key(主键字段);

添加唯一性约束

alter tableadd constraint 约束名称 unique(字段);

1.5.5.2 删除约束
删除外键约束

alter table 表名 drop foreign 外键字段;

删除主键约束

alter table 表名 drop primary key;

1.5.5.3 修改约束,其实就是修改字段

alter table 表名 modify 字段名 字段类型(长度) 约束;
# mysql 对有些约束的修改时不支持,所以我们可以先删除,再添加

存储引擎

1.6.1 存储引擎的使用

  • 数据库中的各表均被(在创建表时)指定的存储引擎来处理
  • 服务器可用引擎依赖于以下因素
    • MySQL 的版本
    • 服务器在开发时如何配置
    • 启动选项
  • 为了解当前服务器中有哪些存储引擎可用,可用使用SHOW ENGINES 语句查看
 SHOW ENGINES\G
  • 在创建表时,可使用ENGINE 选项为CREATE TABLE 语句显示指定存储引擎
CREATE TABLE 表名(NOINT) ENGINE =MyISAM;
  • 如果在创建表时没有显示指定存储引擎,则该表使用当前默认的存储引擎
  • 默认的存储引擎可在my.ini配置文件中使用default-storage-engine选项指定
  • 现有表的存储引擎可使用ALTER TABLE语句来改变
ALTER TABLE 表名 ENGINE = INNODB;
  • 为确定某表所使用的存储引擎,可以使用SHOW CREATE TABLE 或 SHOW TABLE STATUS语句
SHOW CREATE TABLE 表名\G
SHOW TABLE STATUS LIKE '表名'\G

1.6.2 常见的存储引擎
1.6.2.1 MyISAM 存储引擎

  • MyISAM是Mysql最常见的引擎
  • 它管理表具有以下三个特征:
    • 使用三个文件表示每个表
      • 格式文件 :存储表结构的定义(mytable.frm)
      • 数据文件: 存储表行的内容(mytable.MYD)
      • 索引文件: 存储表表上的索引(mytable.MYI)
    • 灵活的AUTO_INCREMENT 字段处理
    • 可被转化为压缩,只读来节省空间

1.6.2.2 InnoDB 存储引擎

  • InnoDB存储引擎是MySQL的缺省引擎
  • 它管理的表具有下列主要特征:
    • 每个InnDB 表在数据库目录中以.frm 格式文件表示
    • InnoDB 表空间tablespace 被用于存储表的内容
    • 提供一组用来记录事务性活动的日志文件
    • 用 COMMIT(提交)、SAVEPOINT 及 ROLLBACK(回滚)支持事务处理
    • 提供全 ACID 兼容
    • 在 MySQL 服务器崩溃后提供自动恢复
    • 多版本(MVCC)和行级锁定
    • 支持外键及引用的完整性,包括级联删除和更新

1.6.2.3 Memory存储引擎

  • 使用MEMORY 存储引擎的表,其数据存储在内存中,且行的长度固定,这两个特点使得MENORY存储引擎非常快
  • MEMORY 存储引擎管理的表具有下列的特征
    • 在数据库目录内,每个表均以.frm格式的文件表示
    • 表数据及索引被存在内存中
    • 表级锁机制
    • 不能包括TEXT和BLOB字段
  • Memory 存储引擎以前被称为HEAP引擎

1.6.3 如何选择存储引擎

  • MyISAM:适合大量数据读而少量数据更新的混合操作.MyISAM表的另一种适用情形是使用压缩的只读表
  • InnoDB:如果包含较多的数据更新操作,那么就一个使用InnoDB.其行级锁机制和多版本的支持为数据读取和更新的混合 操作提供了良好的并发机制
  • Memory:存储非永久性需要的数据,或者是能够从基于磁盘表中重新生成的数据

1.7事务

1.7.1 概述
事务可以保证多个操作的原子性,要么全部成功,要么全部失败.对应数据库来说事务保证批量的DML操作要么全部成功要么全部失败,事务有四个特征ACID

  • 原子性(Atomicity): 整个事务中的全部操作,必须作为一个单元全部完成(或者全部取消)
  • 一致性(Consistency):在事务开始之前和结束之后,数据库都保持一致
  • 隔离性(Isolation):一个事务不会影响其他事物的运行
  • 持久性(Durability):在事务完成后,该事务对数据库所有的更改都会被持久的保存在数据库中,不会被回滚

事务中存在一些概念
事务(Transaction):一批操作(一组DML操作)
开启事务(start transaction 或者 begin)
回滚事务(rollback)
提交事务(commit)

**SET AUTOCOMMIT: **禁用事务或者启用事务的自动提交模式
执行DML语句就是开启一个事务
关于事务的回滚: 只能回滚insert,update和delete语句,不能回滚select(回滚select没有意义),也不能回滚,create,drop和alter语句
事务只对DML语句有效

注意:rollback,或者commit后事务就结束了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值