mysql数据库

  1. 多表链接查询 员工表emp、部门表dept 部门表:id、dname(部门名称)、loc(部门所在地) 员工表:id、deptid(部门id)、ename(姓名)、salary(工资)笛卡尔积:两张表的记录的乘积(查询条件不准确) select * from emp,dept;内链接查询:把满足链接条件的数据查出来
select * from emp,dept where emp.deptid=dept.id;
 select * from emp e,dept d where e.deptid=d.id;
 select * from emp inner join dept on emp.deptid=dept.id;
  1. 外链接查询:除了把满足链接条件的数据查出来,还要把不满足链接条件的数据查出来左外链接查询:除了把满足链接条件的数据查出来,还要把左表不满足链接条件的数据查出来 left outer join (left左边的表叫左表)
select * from emp left outer join dept on emp.deptid=dept.id;
  1. 右外链接查询:除了把满足链接条件的数据查出来,还要把右表不满足链接条件的数据查出来 right outer join(right右边的表叫右表)
select * from dept right outer join emp on emp.deptid=dept.id;
  1. 全外链接查询:oracle数据库里的概念 oracle数据库里 ------- full outer join mysql数据库里 ------- union(模拟全外链接)外键约束
create table emp(
 id int auto_increment primary key,
 …
 foreign key(deptid)references dept(id)
 );
  1. 完整性约束
insert into emp (ename,salary,deptid)values(‘张三’,8000,5);

  1. 如果部门表里没有id=5的部门,员工表设置了外键的话,上面语句会报错,违反了完整性约束
  2. 子查询 需求:显示工资高于张三的员工信息
1.  select *
 from emp
 where salary>(select salary from emp where ename=‘张三’);
  1. 分页 limit
1.  select *
 from emp
 limit 0,2;
 0表示从哪条开始,2表示一页显示多少条数据
  1. 数据库的备份导出数据库 终端 -> mysqldump -uroot -p db_test1 > d:/dbtest1.sql; mysqldump -u用户名 -p 数据库名 > 备份位置;导入数据库方法一:mysql客户端 新建库------create database abc;终端
mysql -uroot -proot abc < d:/dbtest1.sql;
 mysql -u用户名 -p密码 库名 < 备份位置;
  1. 方法二:mysql客户端
1.  source d:/dbtest1.sql;
  1. PL/SQL编程 把增删改查进行了封装存储过程和函数 返回指定的id的姓名存储过程
5. delimiter //(定义结束符号,以双斜线为结束符)
create procedure pro_emp(pid int, in out pname varchar(40))
 begin
 select ename into pname from emp where id=pid;
 end//
 delimiter ;
 call pro_emp(1,@name);
 select @name;
 in-----输入参数,默认,可省
 out-----输出参数
存储函数
delimiter //
 create function fun_emp(pid int) returns varchar(40)
 begin
 declare vname varchar(40);
 select ename into vname from emp where id=pid;
 return vname;
 end//
 delimiter ;
 select fun_emp(1);
存储过程和存储函数的区别:
 过程不能有返回值,函数必须有返回值
触发器
 需求:修改emp表的ename,把修改之前的ename保存到test_emp表中
 create table test_emp(
 id int auto_increment primary key,
 test_name varchar(40)
 );
 delimiter //
 create trigger tri_emp before update on emp
 for each row begin
 insert into test_emp(test_name) values(old.ename);
 end //
 delimiter ;
 update emp set ename=‘zhangsan’ where id=1;
 emp表只要发生修改,就会触发触发器,把修改之前的ename保存到test_emp表中