mysql数据库
- 多表链接查询 员工表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;
- 外链接查询:除了把满足链接条件的数据查出来,还要把不满足链接条件的数据查出来左外链接查询:除了把满足链接条件的数据查出来,还要把左表不满足链接条件的数据查出来 left outer join (left左边的表叫左表)
select * from emp left outer join dept on emp.deptid=dept.id;
- 右外链接查询:除了把满足链接条件的数据查出来,还要把右表不满足链接条件的数据查出来 right outer join(right右边的表叫右表)
select * from dept right outer join emp on emp.deptid=dept.id;
- 全外链接查询:oracle数据库里的概念 oracle数据库里 ------- full outer join mysql数据库里 ------- union(模拟全外链接)外键约束
create table emp(
id int auto_increment primary key,
…
foreign key(deptid)references dept(id)
);
- 完整性约束
insert into emp (ename,salary,deptid)values(‘张三’,8000,5);
如果部门表里没有id=5的部门,员工表设置了外键的话,上面语句会报错,违反了完整性约束- 子查询 需求:显示工资高于张三的员工信息
1. select *
from emp
where salary>(select salary from emp where ename=‘张三’);
- 分页 limit
1. select *
from emp
limit 0,2;
0表示从哪条开始,2表示一页显示多少条数据
- 数据库的备份导出数据库 终端 -> 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密码 库名 < 备份位置;
- 方法二:mysql客户端
1. source d:/dbtest1.sql;
- 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表中