更新了部分文档
parent
4d9f270350
commit
ea9adc68c4
|
@ -1,51 +1,55 @@
|
||||||
-- 创建人力资源管理系统数据库
|
drop database if exists hrs;
|
||||||
drop database if exists HRS;
|
create database hrs default charset utf8;
|
||||||
create database HRS default charset utf8;
|
|
||||||
-- 切换数据库上下文环境
|
use hrs;
|
||||||
use HRS;
|
|
||||||
-- 删除表
|
drop table if exists tb_emp;
|
||||||
drop table if exists TbEmp;
|
drop table if exists tb_dept;
|
||||||
drop table if exists TbDept;
|
|
||||||
-- 创建部门表
|
create table tb_dept
|
||||||
create table TbDept
|
|
||||||
(
|
(
|
||||||
deptno tinyint primary key, -- 部门编号
|
dno int not null comment '编号',
|
||||||
dname varchar(10) not null, -- 部门名称
|
dname varchar(10) not null comment '名称',
|
||||||
dloc varchar(20) not null -- 部门所在地
|
dloc varchar(20) not null comment '所在地',
|
||||||
|
primary key (dno)
|
||||||
);
|
);
|
||||||
-- 添加部门记录
|
|
||||||
insert into TbDept values (10, '会计部', '北京');
|
insert into tb_dept values
|
||||||
insert into TbDept values (20, '研发部', '成都');
|
(10, '会计部', '北京'),
|
||||||
insert into TbDept values (30, '销售部', '重庆');
|
(20, '研发部', '成都'),
|
||||||
insert into TbDept values (40, '运维部', '深圳');
|
(30, '销售部', '重庆'),
|
||||||
-- 创建员工表
|
(40, '运维部', '深圳');
|
||||||
create table TbEmp
|
|
||||||
|
create table tb_emp
|
||||||
(
|
(
|
||||||
empno int primary key, -- 员工编号
|
eno int not null comment '员工编号',
|
||||||
ename varchar(20) not null, -- 员工姓名
|
ename varchar(20) not null comment '员工姓名',
|
||||||
job varchar(20) not null, -- 员工职位
|
job varchar(20) not null comment '员工职位',
|
||||||
mgr int, -- 主管编号
|
mgr int comment '主管编号',
|
||||||
sal int not null, -- 员工月薪
|
sal int not null comment '员工月薪',
|
||||||
comm int, -- 每月补贴
|
comm int comment '每月补贴',
|
||||||
dno tinyint -- 所在部门编号
|
dno int comment '所在部门编号',
|
||||||
|
primary key (eno)
|
||||||
);
|
);
|
||||||
-- 添加外键约束
|
|
||||||
alter table TbEmp add constraint fk_dno foreign key (dno) references TbDept(deptno);
|
alter table tb_emp add constraint fk_emp_dno foreign key (dno) references tb_dept (dno);
|
||||||
-- 添加员工记录
|
|
||||||
insert into TbEmp values (7800, '张三丰', '总裁', null, 9000, 1200, 20);
|
insert into tb_emp values
|
||||||
insert into TbEmp values (2056, '乔峰', '分析师', 7800, 5000, 1500, 20);
|
(7800, '张三丰', '总裁', null, 9000, 1200, 20),
|
||||||
insert into TbEmp values (3088, '李莫愁', '设计师', 2056, 3500, 800, 20);
|
(2056, '乔峰', '分析师', 7800, 5000, 1500, 20),
|
||||||
insert into TbEmp values (3211, '张无忌', '程序员', 2056, 3200, null, 20);
|
(3088, '李莫愁', '设计师', 2056, 3500, 800, 20),
|
||||||
insert into TbEmp values (3233, '丘处机', '程序员', 2056, 3400, null, 20);
|
(3211, '张无忌', '程序员', 2056, 3200, null, 20),
|
||||||
insert into TbEmp values (3251, '张翠山', '程序员', 2056, 4000, null, 20);
|
(3233, '丘处机', '程序员', 2056, 3400, null, 20),
|
||||||
insert into TbEmp values (5566, '宋远桥', '会计师', 7800, 4000, 1000, 10);
|
(3251, '张翠山', '程序员', 2056, 4000, null, 20),
|
||||||
insert into TbEmp values (5234, '郭靖', '出纳', 5566, 2000, null, 10);
|
(5566, '宋远桥', '会计师', 7800, 4000, 1000, 10),
|
||||||
insert into TbEmp values (3344, '黄蓉', '销售主管', 7800, 3000, 800, 30);
|
(5234, '郭靖', '出纳', 5566, 2000, null, 10),
|
||||||
insert into TbEmp values (1359, '胡一刀', '销售员', 3344, 1800, 200, 30);
|
(3344, '黄蓉', '销售主管', 7800, 3000, 800, 30),
|
||||||
insert into TbEmp values (4466, '苗人凤', '销售员', 3344, 2500, null, 30);
|
(1359, '胡一刀', '销售员', 3344, 1800, 200, 30),
|
||||||
insert into TbEmp values (3244, '欧阳锋', '程序员', 3088, 3200, null, 20);
|
(4466, '苗人凤', '销售员', 3344, 2500, null, 30),
|
||||||
insert into TbEmp values (3577, '杨过', '会计', 5566, 2200, null, 10);
|
(3244, '欧阳锋', '程序员', 3088, 3200, null, 20),
|
||||||
insert into TbEmp values (3588, '朱九真', '会计', 5566, 2500, null, 10);
|
(3577, '杨过', '会计', 5566, 2200, null, 10),
|
||||||
|
(3588, '朱九真', '会计', 5566, 2500, null, 10);
|
||||||
|
|
||||||
|
|
||||||
-- 查询薪资最高的员工姓名和工资
|
-- 查询薪资最高的员工姓名和工资
|
||||||
|
|
||||||
|
@ -67,22 +71,22 @@ insert into TbEmp values (3588, '朱九真', '会计', 5566, 2500, null, 10);
|
||||||
|
|
||||||
-- 查询薪资排名4~6名的员工姓名和工资
|
-- 查询薪资排名4~6名的员工姓名和工资
|
||||||
|
|
||||||
use HRS;
|
-- use hrs;
|
||||||
|
|
||||||
drop procedure if exists sp_avg_sal_by_dept;
|
-- drop procedure if exists sp_avg_sal_by_dept;
|
||||||
|
|
||||||
|
|
||||||
create procedure sp_avg_sal_by_dept(deptno integer, out avg_sal float)
|
-- create procedure sp_avg_sal_by_dept(dno integer, out avg_sal float)
|
||||||
begin
|
-- begin
|
||||||
select avg(sal) into avg_sal from TbEmp where dno=deptno;
|
-- select avg(sal) into avg_sal from tb_emp where dno=dno;
|
||||||
end;
|
-- end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
call sp_avg_sal_by_dept(10, @avgSal);
|
-- call sp_avg_sal_by_dept(10, @avgSal);
|
||||||
|
|
||||||
select @avgSal;
|
-- select @avgSal;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -100,7 +100,7 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
我们希望录入5个学生3门课程的成绩,于是定义了一个有5个元素的列表,而列表中的每个元素又是一个由3个元素构成的列表,这样一个列表的列表刚好跟一个表格是一致的,相当于有5行3列,接下来我们通过嵌套的for-in循环输入每个学生3门课程的成绩。程序执行完成后我们发现,每个学生3门课程的成绩是一模一样的,而且就是最后录入的那个学生的成绩。
|
我们希望录入5个学生3门课程的成绩,于是定义了一个有5个元素的列表,而列表中的每个元素又是一个由3个元素构成的列表,这样一个列表的列表刚好跟一个表格是一致的,相当于有5行3列,接下来我们通过嵌套的for-in循环输入每个学生3门课程的成绩。程序执行完成后我们发现,每个学生3门课程的成绩是一模一样的,而且就是最后录入的那个学生的成绩。
|
||||||
|
|
||||||
要想把这个坑填平,我们首先要区分对象和对象的引用这两个概念,而要区分这两个概念,还得先说说内存中的栈和堆。我们经常会听人说起“堆栈”这个词,但实际上“堆”和“栈”是两个不同的概念。众所周知,一个程序运行时需要占用一些内存空间来存储数据和代码,那么这些内存从逻辑上又可以做进一步的划分。对底层语言(如C语言)有所了解的程序大都知道,程序中可以使用的内存从逻辑上可以为五个部分,按照地址从高到低依次是:栈(stack)、堆(heap)、数据段(data segment)、只读数据段(static area)和代码段(code segment)。其中,栈用来存储局部、临时变量,以及函数调用时保存现场和恢复现场需要用到的数据,这部分内存在代码块开始执行时自动分配,代码块执行结束时自动释放,通常由编译器自动管理;堆的大小不固定,可以动态的分配和回收,因此如果程序中有大量的数据需要处理,这些数据通常都放在堆上,如果堆空间没有正确的被释放会引发内存泄露的问题,而像Python、Java等编程语言都使用了垃圾回收机制来实现自动化的内存管理(自动回收不再使用的堆空间)。所以下面的代码中,变量`a`并不是真正的对象,它是对象的引用,相当于记录了对象在堆空间的地址,通过这个地址我们可以访问到对应的对象;同理,变量`b`是列表容器的引用,它引用了堆空间上的列表容器,而列表容器中并没有保存真正的对象,它保存的也仅仅是对象的引用。
|
要想把这个坑填平,我们首先要区分对象和对象的引用这两个概念,而要区分这两个概念,还得先说说内存中的栈和堆。我们经常会听人说起“堆栈”这个词,但实际上“堆”和“栈”是两个不同的概念。众所周知,一个程序运行时需要占用一些内存空间来存储数据和代码,那么这些内存从逻辑上又可以做进一步的划分。对底层语言(如C语言)有所了解的程序员大都知道,程序中可以使用的内存从逻辑上可以为五个部分,按照地址从高到低依次是:栈(stack)、堆(heap)、数据段(data segment)、只读数据段(static area)和代码段(code segment)。其中,栈用来存储局部、临时变量,以及函数调用时保存现场和恢复现场需要用到的数据,这部分内存在代码块开始执行时自动分配,代码块执行结束时自动释放,通常由编译器自动管理;堆的大小不固定,可以动态的分配和回收,因此如果程序中有大量的数据需要处理,这些数据通常都放在堆上,如果堆空间没有正确的被释放会引发内存泄露的问题,而像Python、Java等编程语言都使用了垃圾回收机制来实现自动化的内存管理(自动回收不再使用的堆空间)。所以下面的代码中,变量`a`并不是真正的对象,它是对象的引用,相当于记录了对象在堆空间的地址,通过这个地址我们可以访问到对应的对象;同理,变量`b`是列表容器的引用,它引用了堆空间上的列表容器,而列表容器中并没有保存真正的对象,它保存的也仅仅是对象的引用。
|
||||||
|
|
||||||
```Python
|
```Python
|
||||||
a = object()
|
a = object()
|
||||||
|
@ -188,4 +188,3 @@ Python为什么要做出这样的设定呢?用一句广为流传的格言来
|
||||||
|
|
||||||
需要提醒大家注意的是,Python类中的那些魔法方法,如\_\_str\_\_、\_\_repr\_\_等,这些方法并不是私有成员哦,虽然它们以双下划线开头,但是他们也是以双下划线结尾的,这种命名并不是私有成员的命名,这一点对初学者来说真的很坑。
|
需要提醒大家注意的是,Python类中的那些魔法方法,如\_\_str\_\_、\_\_repr\_\_等,这些方法并不是私有成员哦,虽然它们以双下划线开头,但是他们也是以双下划线结尾的,这种命名并不是私有成员的命名,这一点对初学者来说真的很坑。
|
||||||
|
|
||||||
(未完待续)
|
|
Loading…
Reference in New Issue