Mysql数据库

SQL:

SQL是Structured Query Language:结构化查询语言
可操作所有关系型数据库的规则。

分类:
1.DDL(Data Definition Language)数据定义语言
定义数据库对象:数据库,表,列等;关键字:create,drop,alter等;
2.DML(Data Manipulation Language)数据操作语言
对数据库中表的数据进行增删改。关键字:insert,delete,update;
3.DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录。关键字:select,where;
4.DCL(Data Control Language)

DDL:CRUD
1.Create 创建数据库
2.Retrieve:查询
3.Update:修改
4.Delete:删除
5.使用数据库:Use

DQL:

1.排序查询
Order by字句
order by 排序字段 排序方式
排序方式:
ASC:升序
DESC:降序
2.聚合函数:将一列数据作为一个整体,进行纵向计算(排除非空)
count:计算个数,一般选择非空的列:主键;
max:计算最大值
min:计算最小值
3.分组查询
语法:group by 分组字段
注意:
分组之后的查询字段:分组字段,聚合函数;
where与having的区别:
作用域不同:
where在分组前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来;
where不可以进行聚合函数的判断,having可以进行聚合函数的判断;
4.分页查询
语法:
limit:开始的索引,每页查询的条数
公式:开始的索引=(当前的页码-1)*每页显示的条数
分页操作是一个方言;

DQL:
语法:
select
字段列表
select 字段名1,字段名2…from 表名;
注意:
查询所有字段,可使用*替代字段列表
取出重复:distinct
计算列:数值型值可使用简单的四则运算;
注意:IFNULL(表达式1,表达式2):null参与的运算,计算结果都是null;
表达式1:哪个字段需要判断是否为null;
表达式2:如果表达式1中为null,使用2替换null;
from
表明列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定

约束:

	对表中数据进行限定,保证数据正确性,有效性以及完整性;
	分类:
		1.	主键约束:primary key(非空且唯一);
		一张表只能有一个字段为逐渐
		逐渐就是表中记录的唯一标识
		创建表时,添加主键约束:
			create table stu(
				id int primary key,#给id添加逐渐约束
				name varchar
			);

		删除主键:alter table stu drop primary key;

		自动增长:
				create table stu(
						id int primary key auto_increment,
						name varchar(20)
					);
					
			
		2.	非空约束:not null;
		创建时可设置
		或 alter table 表名 modify 列名 类型名 NOT NULL;
		
		3.	唯一约束:unique;
		删除唯一约束:alter table 表名 drop index 列名;
		添加唯一约束: alter table 表名 modify 列名 类型名 UNIQUE;


		4.	外键约束:foreign key,使表与表产生关系,从而保证数据的正确性。
		在创建表时,可以添加外键
		语法:
			create Table 表名(
				...
				外键列
				constraint 外键名称 foreign key(外键列名称) references 主表名称(主表列名称)
			);
		删除外键:
			alter table employee drop foreign key emp_dept_fk;
		添加外键:
			alter table employee add constraint emp_dept_fk foreign key (外键字段名称) references 主表名称(主表列名称);
		级联操作
		添加,删除级联操作:
			alter table employee add CONSTRAINT emp_dep foreign key (dep_id) REFERENCES department(id) on UPDATE CASCADE on DELETE CASCADE;

数据库的设计

多表之间的关系
 		1.一对一的关系;
 		在任意一方添加外键指向另一方的主键,并且使主键唯一;
 		2.一对多或多对一的关系;
 		在多的地方的外键指向一的数据库的主键
 		3.多对多的关系;
 		借助第三张表,中间表至少包含两个字段,两个字段作为第三张表的外键,分别指向两张表的主键;
 
 范式:
 		设计关系数据库时,遵循一些规范。
 		第一范式(1NF):
 			每一列都是不可分割原子项;
 		第二范式(2NF):
 			在1NF基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的部分函数依赖);消除冗余
 			函数依赖:属性之间呈现自变量与因变量的关系
 			完全函数依赖:一个属性依赖于一个属性组(多个属性)
 			部分函数依赖:相对于完全函数依赖,一个属性只依赖于一个属性组的中的一部分
 			传递函数依赖:A-->B,B-->C;C传递函数依赖A;
 			码:一个表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性为该表的码。
 							
 		第三范式(3NF):
 			在2NF基础上,任何非主属性不依赖于其他非主属性(在2NF基础上消除传递依赖)	
 
数据库备份及还原
		备份:mysqldump -u用户名 -p密码 数据库名称 >保存的路径
		还原:
		1.登录数据库;
		2.创建数据库;
		3.使用数据库;
		4.执行文件,source 文件路径

多表查询:
隐式内联结:使用where消除无用数据
例子:
SELECT t1.name,t1.gender,t2.name
FROM emp t1,dept t2
WHERE t1.dept_id=t2.id;

显式内连接:select * from 表名 INNER JOIN 表名2 表名2主键=表名1外键;

外连接查询:
左外连接:Select 字段列表 from 表1 left [outer] join 表2 on 条件;
查询是左表所有数据以及其交集
右外连接:Select 字段列表 from 表1 left [outer] join 表2 on 条件;

子查询:
概念:查询中嵌套查询,称嵌套查询为子查询
1.子查询结果是单行单列的:
子查询可以作为条件,使用运算符去判断。
SELECT * from emp where emp.salary=(SELECT MAX(salary) FROM emp);
2.子查询结果是多行单列的
SELECT * from emp WHERE emp.dept_id in (SELECT id FROM dept WHERE name=‘市场部’ or name=‘财务部’);
3.子查询结果是多行多列的
子查询可以作为一张虚拟表

事务:

概念:一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
操作:
	开启事务:start transaction;
	回滚:rollback;
	提交:commit;
Mysql自动事务:
	一条DML语句,会自动提交一次事务;
手动提交
	Oracle 数据库默认手动提交
	需要开启事务,再提交
	
SELECT @@autocommit; -- 1代表自动提交  0代表手动提交

事务四大特征:
1.原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败
2.持久新:当事务提交或回滚后,数据库会持久化保持数据
3.隔离性:多个事务之间,相互独立
4.一致性:事务操作前后,数据总量不变

并发访问的问题:并发访问中,多个用户同时访问同一个数据
脏读:一个事务读取到另一个事务中尚未提交的数据
不可重复读:一个事务中两次读取的数据内容不一致,要求是一个事务中多次读取时数据是一致的,这是由于事务update时引发的问题
幻读:一个事务中两次读取的数据的数量不一致,要求在一个事务多次读取的数据的数量是一致的,这是由于insert或者delete引发的
数据库四种隔离级别:
1.读未提交 read uncommitted:
2.读已提交 read committed;消除脏读
3.可重复读:repeatable read 避免脏读以及不可重复读
4.串行化:serializable 避免脏读,不可重复读,幻读
隔了级别越高,性能越差,安全性越高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值