MySql学习(二)…(⊙_⊙;)…

排序和分页

1. 排序查询    * 语法:order by 子句        
	* order by 排序字段1 排序方式1 ,  排序字段2 排序方式2...
	
    * 排序方式:        
   		* asc:升序,默认的。        
    	* desc:降序。
    * 注意:       
    	* 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。       
2. 分页查询    
	1. 语法:limit 开始的索引,每页查询的条数;    
	2. 公式:开始的索引 = (当前的页码 - 1* 每页显示的条数        
	-- 若每页显示3条记录 
	
     select * from student limit 0,3; -- 第1页              

	 select * from student limit 3,3; -- 第2页               

	 select * from student limit 6,3; -- 第3页
	 
	4. limit 是一个MySQL"方言"

约束

* 概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。  
* 分类:    
	1. 主键约束:primary key    
 	2. 非空约束:not null    
 	3. 唯一约束:unique   
 	4. 外键约束:foreign key
* 非空约束:not null,值不能为null    
 	1. 创建表时添加约束        
 	create table stu(            
 		id INT,            
 		name varchar(20) not null -- name为非空        
 	);    
 	2. 创建表完后,添加非空约束        
 		alter table stu modify name varchar(20) not null;
    3. 删除name的非空约束       
        alter table stu modify name varchar(20);
一、主键约束:primary key1. 注意:   
	1. 含义:非空且唯一   
	2. 一张表只能有一个字段为主键   
	3. 主键就是表中记录的唯一标识 
2. 在创建表时,添加主键约束   
	create table stu(    
		id int primary key,-- 给id添加主键约束    
		name varchar(20)   
	); 
3. 删除主键   
	-- 错误 alter table stu modify id int ;   
	alter table stu drop primary key; 
4. 创建完表后,添加主键   
	alter table stu modify id int primary key;
二、 自动增长:   
    1. 概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长   
    2. 在创建表时,添加主键约束,并且完成主键自增长      
		create table stu(      
			id int primary key auto_increment,-- 给id添加主键约束     
			name varchar(20)      
		);
    3. 删除自动增长        
     	alter table stu modify id int;    
    4. 添加自动增长          
     	alter table stu modify id int auto_increment;
三、外键约束:foreign key,让表于表产生关系,从而保证数据的正确性。    
	1. 在创建表时,可以添加外键        
		* 语法:            
		 	create table 表名(                
		 		....                
		 		外键列                
		 		constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)           
		 	);
	2. 删除外键        
		alter table 表名 drop foreign key 外键名称;
	3. 创建表之后,添加外键        
		alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称 (主表列名称);
四、 级联操作            
	1. 添加级联操作                
		语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称                         
				FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE  ;            							
	2. 分类:                
		1. 级联更新:ON UPDATE CASCADE                 
		2. 级联删除:ON DELETE CASCADE

数据库的备份和还原

命令行:    
	* 语法:        
	 * 备份: mysqldump -u用户名 -p密码 数据库名称 > 保存的路径        
	 * 还原:            
	 	1. 登录数据库            
	 	2. 创建数据库            
	 	3. 使用数据库            
	 	4. 执行文件。source 文件路径

子查询

概念:查询中嵌套查询,称嵌套查询为子查询
	-- 查询工资最高的员工信息
	-- 1 查询最高的工资是多少 
	select max(salary) from emp; -- 9000
	
	-- 2 查询员工信息,并且工资等于9000的
	select  * from emp where salary = 9000;
	
	-- 一条sql就完成上面的操作
	select * from emp where salary =(select max(salary) from emp);

子查询的不同情况
	1.子查询的结果是**单行单列**的:
		子查询可以作为条件,使用运算符去判断 > >= < <= =
		
		-- 查询员工工资小于平均工资的人
		select * from emp where salary < (select avg(salary) from emp);
	2.子查询的结果是**多行单列**的:
		子查询可以作为条件,使用运算符 in 来判断
		-- 查询 财务部 和 市场部 所有员工信息
		select id from dept where name='财务部' or name='市场部';
		select * from dept where dept_id = 3 or dept_id = 2;
		-- 子查询
		select * from emp where dept_id in(select id from dept where name='财务部' or name='市场部');
	
	3.子查询的结果是多行多列的:
		子查询可以作为一张虚拟表参与查询
		-- 查询员工入职日期是2011-11-11之后的员工信息和部门信息
		-- 子查询
		select * from dept t1,(select * from emp where emp.join_date > '2011-11-11') t2 where t1.id=t2.dept_no;
		
		-- 普通内连接
		select * from emp t1,dept t2 where t1.dept_id = t2.id and t1.join_date > '2011-11-11'

事务

**一、 事务的基本介绍**
	**1.概念**
	如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
	**2.操作**
		1.开启事务:start transaction;
		2.回滚:rollback;
		3.提交:commit;
	**3.MySql数据库中事务默认自动提交**
		事务提交的两种方式
			自动提交
				mysql就是自动提交的
				一条DML(增删改)语句会自动提交一次事务
			手动提交
				Oracle数据库默认是手动提交事务
				需要先开启事务,再提交
		修改事务的默认提交方式:
			查看事务的默认提交方式:select @@autocommit;-- 1 代表自动提交  0 代表手动提交
			修改默认提交方式:set @@autocommit=0;
二、事务的四大特征:
	1.原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败
	2.持久性:当事务提交或回滚后,数据库会持久化的保存数据
	3.隔离性:多个事务之间,相互独立
	4.一致性:事务操作前后,数据总量不变
三、事务的隔离级别
	概念:多个事物之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题:
	存在问题:
		1.脏读:一个事务,读取到另一个事务中没有提交的数据
		2.不可重复读(虚读):在同一个事务中,两次读到的数据不一样。
		3.幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。
	隔离级别:
		1.read uncommitted:读未提交
			产生问题:脏读、不可重复读、幻读
		2.read committed:读已提交(Oracle)
			产生问题:不可重复读,幻读
		3.repeatable read;
			产生问题:幻读
		4.serializable:串行化
			可以解决所有的问题
		**注意**隔离级别从小到大安全性越来越高,但是效率越来越低
		数据库查询隔离级别:
			select @@transaction_isolation;
		数据库设置隔离级别:
			set session transaction isolation level 级别字符串;
			set global transaction  isolation level 级别字符串;

DCL

SQL分类:
1.DDL:操作数据库和表
2.DML:增删改表中数据
3.DQL:查询表中数据
4.DCL:管理用户,授权
DBA:数据库管理员

DCL:管理用户,授权
1.管理用户

		添加用户
			create user '用户名'@'主机名' identified by '密码';
		删除用户
			drop user '用户名'@'主机名';
		修改用户密码
			alter user '用户名'@'主机名' identified by '密码';
		查询用户
			1.切换到mysql数据库
			user mysql;
			2.查询userselect * from user;	

2.权限管理

	查询权限
		show grants for '用户名'@'主机名';
	授予权限
		grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
	撤销权限
		revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

存储过程

  1. 什么是存储过程
    存储过程,带有逻辑的sql语句,之前的sql没有条件判断,没有循环,存储过程带上流程控制语句(if while)
  2. 存储过程特点
    1)执行效率非常快!存储过程是在数据库的服务器端执行的。
    2)移植性很差!不同数据库的存储过程是不能移植。

触发器

当操作了某张表时,希望同时触发一些动作/行为,可以使用触发器完成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值