打怪前置进入现场
神秘按键:win+r 输入神秘代码本地上线 mysql -uroot -p*****(你的密码)进入你的数据库 ctrl+c 退出江湖
select database();
show databases 查看数据库整体; use 库名;使用这个库 create database;创建数据库
show tables;查看表 desc 表名称;表的底裤都看穿
打怪升级第一步 DDL(数据定义语言)
数据定义语言DDL用来创建数据库中的各种对象-----表、视图、
索引、同义词、聚簇等如:
CREATE TABLE 、VIEW 、INDEX 、SYN 、CLUSTER
表 视图 索引 同义词 簇
表的操作:CREATE ALTER DROP
t_开头
CREATE TABLE 表名{
}
快速建表:(数据,结构全拿到)
CREATE TABLE T_NAME1 AS SELECT * FROM NAME;
DELETE * FROM TABLE 只删除数据,不删结构,支持回滚,效率慢
TRUNCT TABLE 表名 物理删除,不可逆,效率快,表还在
DROP TABLE 表名 直接删表
ALTER 修改字段
ALTER TABLE table_name ADD column_name datatype 添加字段
ALTER TABLE table_name DROP COLUMN column_name 删除字段
ALTER TABLE table_name ALTER COLUMN column_name datatype 修改字段属性
DDL操作是隐性提交的!不能rollback
打怪升级选武器 DQL(数据查询语言)
单打独斗
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE
子句组成的查询块:
SELECT <字段名表>
FROM <表或视图名>
WHERE <查询条件>
逻辑筛选:
逻辑运算符:&& || ! and or not
&&和and:两个条件都为true,结果为true,反之为false
||或or: 只要有一个条件为true,结果为true,反之为false
!或not: 如果连接的条件本身为false,结果为true,反之为false
如何去重:
select distinct 列名 from 表名 distinc来驱虫
模糊查询:
关键字:like, between and,in,is null
like:一般和通配符搭配使用,通配符的%代表任意多个字符,_代表任意单个字符
between and 是查询两个临界值中的数据,临界值从小到大不要调换顺序,范围包含临界值本身
in:用于判断某个字段的值是否属于in列表中的某一项(in 中不支持通配符,值类型必须一致或者兼容)
is null: =或者是<>不能用于判断null值只能用is null 或is not null
安全等于:可以替代一些不能用=来判断的地方
分组查询 group by:
和分组函数一同查询的字段必须是group by后出现的字段
筛选分为两类:分组前筛选和分组后筛选
分组前筛选是针对原始表,在group by前连接wheree关键字
分组后筛选是针对group by的结果集 关键字在group by后面 having
小小函数,可笑可笑:
有sum、avg、max.min.count计数
sum.avg一般用于处理数值型,max、min、count可以处理任何类型
都忽略null型,可以和distinct搭配实现去重运算
舌战群雄
多表联查
笛卡尔积:
笛卡尔积在省略连接条件、连接条件无效、所有表中的所有行互相连接等情况下会产生。会产生出两个表的乘积,性能非常差,在写sql语句时一定要避免出现笛卡尔积。为了避免笛卡尔积,可以在where加入有效的连接条件。
链表查询涉及的表,需要避免重复列的出现,一般需要添加表别名实现。inner join,left join,right join,outer join,cross join
内连接
等值连接:查询次数与笛卡尔积相同,只是加了条件进行去重(sql92语法不建议用)
select ** from ** as a, ** as b where a.no = b.no;
inner jion :
select ** from ** as a inner join ** as b on a.no = b.no;
非等值连接:
between and 替代 on
自连接:
一张表看作两张去使用
外连接
left join 主次关系就是看join左边的单词,相比内连接,主表显示数据不匹配的数据,即主表所有数据匹配后的数据
right join
子查询:嵌套缝合怪
使用select语句去代替你的sql中的某个元素
from 后面的子查询可以看作一张零时表,实际不存在,但是可以存任何你想放的东西
UNION
结果集合并。拼接时效率更高,把执行次数陈发变加法,次数更少。要求结果集列数和数据类型相同。
LIMIT
- 完整用法:
- LIMIT 起始位置(0开始) 数量分页,部分取出数据 limit (pageNo-1)*pageSize,pageSize;
书写顺序 SELECT
xxx
FROM
xxx
WHERE
xxx
GROUP BY
xxx
HAVING
xxx
ORDER BY
xxx
LIMIT(x,x) ;
执行顺序:
from
where
group by
haaving
select
order by
limit
打怪升级选技能 DML(数据操纵语言)
数据操纵语言DML主要有三种形式:
- 插入:INSERT
- 更新:UPDATE
- 删除:DELETE
INSERT INTO 表名(字段名,字段名...) VALUES(值1,值2...)
STR_TO_DATE
DATE_FORMAT
UPDATE 表命 SET 字段名1 = 值1,字段名2 = 值2....WHERE 条件
DELETE FROM 表名 WHERE 条件;
打怪升级复活甲 DCL(数据控制语言)
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
-
GRANT:授权。
-
ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
回滚—ROLLBACK
回滚命令使数据库状态回到上次最后提交的状态。其格式为:
SQL>ROLLBACK; -
COMMIT [WORK]:提交。
在数据库的插入、删除和修改操作时,只有当事务在提交到数据
库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看
到所做的事情,别人只有在最后提交完成后才可以看到。
提交数据有三种类型:显式提交、隐式提交及自动提交。下面分
别说明这三种类型。
(1) 显式提交
用COMMIT命令直接完成的提交为显式提交。其格式为:
SQL>COMMIT;
(2) 隐式提交
用SQL命令间接完成的提交为隐式提交。这些命令是:
ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,
EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。
(3) 自动提交
若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,
系统将自动进行提交,这就是自动提交。其格式为:
SQL>SET AUTOCOMMIT ON;
约束
非空约束 NOT NULL
唯一约束 UNIQUE
主键约束 PRIMARY KEY
外键约束 FOREIGN KEY
检查约束 CHECK(只有ORECLE支持)
SQL脚本》》》》source 文件路径执行sql脚本
联合唯一: UNIQUE(字段,字段)
联合主键 PRIMARY KEY(字段,字段) AUTO_INCREMENT
FOREIGN KEY(表名) PRIMARY 字段;
事务
COMMIT 提交事务
ROOLBACK 回滚事务
TRANSACTION 事务
START TRANSACTION 开启事务
特性:原子性,一致性,隔离性,持久性
隔离性的四个级别:
读未提交:read uncommitted 低 脏读,可以读到对方未提交的 《提交前能读》
读已提交:read committed 解决了脏读,但不可重复读取数据,真实 oreacle默认的 《提交后能读》
可重复读:repeatable READ 解决不可重复度,但可能出现幻影读取。读取的数据可能是幻像,不够真实。读取的永远是事务开启时的数据 《提交后也读不到》 mysql的事务级别
序列化/串行化:serilizable 高 事务排队,不可并发
索引 B-TREE 实现,中序遍历,左小右大。
索引相当于目录
所有数据库主键都有索引,MYSQL中添加了UNIQUE的字段都有索引
所有表的数据在硬盘中都有物理存储编号
mysql数据库中的索引是一个单独对象,MYISAM引擎中存放于.NYI文件中,INNODB存放于一个逻辑名称tablespace中,MENORY存放在内存中,但归根结底他都是一个平衡二叉树(B-TREE).
创建索引的情况:数据量大,经常被当where的条件,很少被DML操作。索引也要经常维护,适当使用
例:CREATE INDEX USER_NAME_INDEX ON USER(NAME);
DROP INDEX USER_NAME_INDEX ON USER
索引失效:
1.模糊查询时以%开头的
2.使用OR字段两边字段不是都有索引
3.复合索引不是用的最左边的
4. 在where中索引参与了运算或者参与了函数
索引分类:
1.单一索引
2.复合索引
3.主键索引
4.唯一性索引:UNIQUE上
视图:相当于封装方法对DQL操作,视图不在内存中,在硬盘中
创建:CREATE VIEW DEPT_VIEW AS SELECT * FEOM DEPT; 与表的复制相似,但不是实际存在的。
删除:DROP VIEW DEPT_VIEW;
必须由DQL组成,对试图进行修改也会修改原表的数据
数据库的导入导出:百度一下就好
设计范式:
1.任何表必有主键,字段原子性不可再分
2.所有非主键字段完全依赖主键,不可产生部份依赖主键
3.所有非主键字段直接依赖主键,不可传递依赖