朴实无华的MYSQL修炼

打怪前置进入现场

神秘按键: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

  1. 完整用法:
  2. 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主要有三种形式:

  1. 插入:INSERT
  2. 更新:UPDATE
  3. 删除:DELETE

INSERT INTO 表名(字段名,字段名...) VALUES(值1,值2...)

STR_TO_DATE
DATE_FORMAT

UPDATE 表命 SET 字段名1 = 值1,字段名2 = 值2....WHERE 条件
DELETE FROM 表名 WHERE 条件;

打怪升级复活甲 DCL(数据控制语言)

数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
数据库操纵事务发生的时间及效果,对数据库实行监视等。如:

  1. GRANT:授权。

  2. ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
    回滚—ROLLBACK
    回滚命令使数据库状态回到上次最后提交的状态。其格式为:
    SQL>ROLLBACK;

  3. 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.所有非主键字段直接依赖主键,不可传递依赖

			 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值