1.查看一张表的建表的语句
show create table tablename ;
2.查询语句
select 字段1,字段2,字段3 from tablename ;
3.条件查询(between ......and.... 使用的时候必须是左小右大,闭区间)
语法格式:select 字段 ,字段, from 表名 where 条件
注意:在模糊查询中%表示任意区多个字符,_表示任意一个字符
4. order by 默认是升序 ,asc表示升序 ,desc表示的是降序,越靠前的字段越能起到主导作用,order by 是最后执行的
5.分组函数(所有的函数都是对某一组数据进行操作的)
SQL语句当中有一个语法规则,分组函数不可以直接使用在where子句当中
分组函数自动忽略null
count (*):不是统计某个字段中数据的个数,而是统计总记录条数(和某字段无关)
cunt(comm):表示统计comm字段中不为null 的数据总数
group by:按照某个字段或者某些字段进行分组
having:having 是对分组之后的数据进行再次过滤
分组函数一般都会和group by 联合使用,并且任何一个分组函数都是在group by 语句结束之后执行,当一条sql语句没有group by的话,整张表的数据会自成一组。
一个完整的DQL语句:
select 5
.....
from 1
......
where 2
......
group by 3
.....
having 4
....
order by 6
.....
distinct 关键字去除重复记录,只能出现所有字段的最前面
6.连接查询
内连接:假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询 出来,这就是内连接,AB两张表没有主副之分,两张表是平等的。
外连接:假设A和B表进行连接,使用外连接的话,AB两张表中有一张是主表,一张是副表 ,主要是查询主表中的数据,捎带着查询副表,当副表中的数据没有和主表的数据匹配的上,副表自动模拟出null与之匹配。
外连接的分类:
左外连接:表示左边这张表是主表
右外连接:表示右边这张表是主表
外连接主表的数据是必然显示出来的
7.什么是子查询?
select 语句当中嵌套select语句,被嵌套的select语句是子查询。
子查询可以出现在哪里:
select
.....(select)
from
......(select)
where
.....(select )
union 连接关键字 两个连接的表的列要一样
limit(分页查询可能要用到),语法机制:limit startIndex ,length startIndex表示起始位置,length表示取几个。
8.创建以一个表的语法格式:create table 表名(
字段名1 数据类型
字段名2数据类型
字段名数据类型
);
9.删除数据
语法格式: delete from 表名 where条件;
注意:没有条件全部删除。
删除10部门数据?
delete from dept1 where deptno = 10 ;
删除所有记录?
delete from dept1;
怎么删除大表中的数据?(重点)
truncate table 表名; //表被截断,不可回滚。永久丢失。
删除表?
drop table 表名
char(效率比achar高) 和vachar(根据实际的长度来)
10. 插入语法格式:insert into 表名 (字段名1,字段名2,字段名3.....) values(值1,值2,值3....)
要求:字段的数量要和值得数量相同,并且数据类型要一样。
11.什么是约束?常见的约束有哪些呢?
在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。
常见的约束有哪些呢?
非空约束(not null):约束的字段不能为NUIL
唯一约束(unique):约束的字段不能重复,但可以为null
主键约束(primary key):约束的字段既不能为NULL,也不能重复(简称K)外键约束(foreign key) : ...(简称FK)
检查约束(check):注慈oracle数据库有check约束,但是mysql没有,目前mysq1不支持该约束。
每页显示pagesize条记录: 第pageNo页:(pageNo - 1) * pagesize, pagesize
12.增删改查有一个术语:CRUD操作
reate(增)Retrieve(检索)update(修改)Delete(删除)
13.主键约束
主健相关的术语?
主键约束: primary key
主键字段: id字段添加primary key之后,id叫做主键字段主键值: id字段中的每一个值都是主键值。
主键的分类?
根据主键 字段的数量来划分:单一主键,复合主键(多个字段联合起来添加一个主键约束,一般不建议使用)
根据逐渐的性质来划分:自然主键:主键值最好就是一个和业务没有任何关系的自然数。
业务主键:主键值和系统的业务挂钩,例如:拿着银行卡的卡号做主键,拿着身份证号码作为主键。(不推荐用)最好不要拿着和业务挂钩的字段作为主键。因为以后的业务一旦发生改变的时候,主键值可能也需要随着发生变化,但有的时候没有办法变化,因为变化可能会导致主键值重复。
一张表的主键约束只能有1个
14.t student中的classno字段引用t_class表中的cno字段,此时t_student表叫做子表。t_class表叫做父表。
顺序要求:删除数据的时候,先删除子表,再删除父表。添加数据的时候,先添加父表,在添加子表。创建表的时候,先创建父表,再创建子表。删除表的时候,先删除子表,在删除父表。
外键可以为null,
外键字段引用其他表的字段的时候,被引用的字段必须是主键吗?
注意:被引用的字段不一定是主键,但至少有unique约束。
create table t_class (
cno int,进去看看可,
15. MyISAM这种存储引擎不支持事务。(节省空间)
MyIsAM是mysql最常用的存储引擎,但是这种引擎不是默认的。MyISAM采用三个文件组织一张表:
Xxx.frm (存储格式的文件)
Xxx.MYD (存储表中数据的文件)
x`xx.MYI(存储表中索引的文件)
优点:可被压缩,节省存储空间。并且可以转换为只读表,提高检索效率
缺点:不支持事务。
16. Innodb(最安全)
优点:支持事务、行级锁、外键等。这种存储引擎数据的安全得到保障。表的结构存储在xxx.frm文件中
数据存储在tablespace这样的表空间中(逻辑概念),无法被压缩,无法转换成只读。
InnoDB支持级联删除和级联更新。
这种InnoDB存储引擎在MysQz数据库崩溃之后提供自动恢复机制。
17.memory
缺点:不支持事务,数据容易丢失,因为所有数据和索引都是存储在内存当中。
优点:查询速度最快
18.事务
什么是事务?:一个事务是一个完整的业务逻辑单元,不可再分。
比如:银行账户转账,从A账户向s账户转账10000.需要执行两条update语句:
update t_act set balance = balance - 10000 where actno = 'act-o0update t_act set balance = balance + 10000 where actno = 'act-00
以上两条DM语句必须同时成功,或者同时失败,不允许出现一条成功,一条失败。T
要想保证以上的两条DMz.语句同时成功或者同时失败,那么就需要使用数据库的"事务机制"。
和事务相关的语句只有DML语句( inserct delete update )
为什么?因为它们这三个语句都是和数据库当中的数据相关的,事务的存在是为了保证数据的完整性,还有安全性。
事务的四大特性:(ACID)
原子性:事务是最小的工作单元,不可再分。
一致性:事务必需保证多条DML语句同时成功或者同时失败。
隔离性:事务A与事务B之间有隔离。
持久性:持久性说的是最终数据必须持久化到硬盘文件中,事务才算圆满成功的结束
19.索引:
19.1、什么是索引?有什么用?
索引就相当于一本书的目录,通过目录可以快速的找到对应的资源。在数据库方面,查询一张表的时候有两种检索方式:
第一种方式:全表扫描
第二种方式:根据索引检索(效率很高)
19.2 索引为什么可以提高检索效率呢?
其实最根本的原理是缩小了扫描的范围。
索引虽然可以提高检索效率,但是不能随意的添加索引,因为索引也是数据库当中的对象,也需要数据库不断的维护。是有维护成本的。比如,表中的数据经常被修改这样就不适合添加索引,因为数据一旦修改,索引需要重新排序,进行维护。|
19.3 什么时候考虑给字段添加索引?(满足什么条件)数据量庞大。(根据客户的需求,根据线上的环境)
该字段很少的DML操作。(因为字段进行修改操作,索引也需要维护)
访字段经堂出现在where子句中。(经常根据那个字段查询)
19.4、怎么创建索引对象?怎么删除索引对象?
创建索引对象:
create index 索引名称 on 表名 (字段名);
删除索引对象:
drop index 索引名称 on 表名;
19.5 索引底层采用的数据结构是:B +Tree
索引的实现原理?
通过B Tree缩小扫描范围,底层索引进行了排序,分区,索引会携带数据在表中的"物理地址",最终通过索引检索到数据之后,获取到关联的物理地址,通过物理地址定位表中的数据,效率是最高的。
select ename from emp where ename = "SMITH';
通过索引转换为:
select ename from emp where物理地址= 0x3 ;
19.6 索引的分类?
单一索引:给单个字段添加索引
复合索引:给多个字段联合起来添加1个索引
主键索引:主键上会自动添加索引
唯一索引:有unique约束的字段上会自动添加索引....
19.7 索引什么时候失效?
select ename from emp where enaine like '%A%' ;
模糊查询的时候,第一个通配符使用的是%,这个时候索引是失效的。
19.8 注意:主键和具有unique约束的字段自动会添加索引。根据主键查询效率较高。尽量根据主键检索。
19.9 查看sql语句的执行计划:
explain select ename ,sal from emp where sal = 5000;
20 . 视图
20.1 什么是视图?
站在不同的角度去看到数据。(同一张表的数据,通过不同的角度去看待)。
20.2 怎么创建视图?怎么删除视图?
create view myview as select empno , ename from emp;
drop view myview ;
注意:只有DQL语句才能以视图对象的方式创建出来。
20.3 对视图进行增删改查,会影响到原表数据。(通过视图影响原表数据的,不是直接操作的原表)可以对视图进行CRUD操作。
21. DBA命令
21.1 将数据库当中的数据导出
在windows的dos命令窗口中执行:(导出整个库)
mysqldump bjpowernode>D: \bjpowernode.sql -uroot -p333
在windows的dos命令窗口中执行:(导出指定数据库当中的指定表)
mysqldump bjpowernode emp>D: \bjpowernode.sql -uroot -p123
21. 2 导入数据
create database bjpowernode ;use bjpowernode ;
source D: l bjpowernode.sql
22.数据库设计三范式
第一范式:任何一张表都应该有主键,并且每一个字段原子性不可分。
第二范式:建立在第一范式的基础上,所有非主键字段完全依赖主键,不能 产生部分依赖。
第三范式:建立在第二范式的基础上,所有非主键字段直接依赖主键,不能产生传递依赖
提醒:在实际的开发中,以满足客户的需求为主,有的时候会拿冗余换执行速度。