Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
泡泡吐肥皂o
Python-100-Days
提交
ea9adc68
P
Python-100-Days
项目概览
泡泡吐肥皂o
/
Python-100-Days
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Python-100-Days
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ea9adc68
编写于
1月 25, 2019
作者:
骆昊的技术专栏
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新了部分文档
上级
4d9f2703
变更
3
展开全部
隐藏空白更改
内联
并排
Showing
3 changed file
with
3296 addition
and
55 deletion
+3296
-55
Day36-40/code/all/HRS_create_and_init.sql
Day36-40/code/all/HRS_create_and_init.sql
+56
-52
Day36-40/code/dist.sql
Day36-40/code/dist.sql
+3239
-0
那些年我们踩过的那些坑.md
那些年我们踩过的那些坑.md
+1
-3
未找到文件。
Day36-40/code/all/HRS_create_and_init.sql
浏览文件 @
ea9adc68
-- 创建人力资源管理系统数据库
drop
database
if
exists
HRS
;
create
database
HRS
default
charset
utf8
;
-- 切换数据库上下文环境
use
HRS
;
-- 删除表
drop
table
if
exists
TbEmp
;
drop
table
if
exists
TbDept
;
-- 创建部门表
create
table
TbDept
drop
database
if
exists
hrs
;
create
database
hrs
default
charset
utf8
;
use
hrs
;
drop
table
if
exists
tb_emp
;
drop
table
if
exists
tb_dept
;
create
table
tb_dept
(
deptno
tinyint
primary
key
,
-- 部门编号
dname
varchar
(
10
)
not
null
,
-- 部门名称
dloc
varchar
(
20
)
not
null
-- 部门所在地
dno
int
not
null
comment
'编号'
,
dname
varchar
(
10
)
not
null
comment
'名称'
,
dloc
varchar
(
20
)
not
null
comment
'所在地'
,
primary
key
(
dno
)
);
-- 添加部门记录
insert
into
TbDept
values
(
10
,
'会计部'
,
'北京'
);
insert
into
TbDept
values
(
20
,
'研发部'
,
'成都'
);
insert
into
TbDept
values
(
30
,
'销售部'
,
'重庆'
);
insert
into
TbDept
values
(
40
,
'运维部'
,
'深圳'
);
-- 创建员工表
create
table
TbEmp
insert
into
tb_dept
values
(
10
,
'会计部'
,
'北京'
),
(
20
,
'研发部'
,
'成都'
),
(
30
,
'销售部'
,
'重庆'
),
(
40
,
'运维部'
,
'深圳'
);
create
table
tb_emp
(
empno
int
primary
key
,
-- 员工编号
ename
varchar
(
20
)
not
null
,
-- 员工姓名
job
varchar
(
20
)
not
null
,
-- 员工职位
mgr
int
,
-- 主管编号
sal
int
not
null
,
-- 员工月薪
comm
int
,
-- 每月补贴
dno
tinyint
-- 所在部门编号
eno
int
not
null
comment
'员工编号'
,
ename
varchar
(
20
)
not
null
comment
'员工姓名'
,
job
varchar
(
20
)
not
null
comment
'员工职位'
,
mgr
int
comment
'主管编号'
,
sal
int
not
null
comment
'员工月薪'
,
comm
int
comment
'每月补贴'
,
dno
int
comment
'所在部门编号'
,
primary
key
(
eno
)
);
-- 添加外键约束
alter
table
TbEmp
add
constraint
fk_dno
foreign
key
(
dno
)
references
TbDept
(
deptno
);
-- 添加员工记录
insert
into
TbEmp
values
(
7800
,
'张三丰'
,
'总裁'
,
null
,
9000
,
1200
,
20
);
insert
into
TbEmp
values
(
2056
,
'乔峰'
,
'分析师'
,
7800
,
5000
,
1500
,
20
);
insert
into
TbEmp
values
(
3088
,
'李莫愁'
,
'设计师'
,
2056
,
3500
,
800
,
20
);
insert
into
TbEmp
values
(
3211
,
'张无忌'
,
'程序员'
,
2056
,
3200
,
null
,
20
);
insert
into
TbEmp
values
(
3233
,
'丘处机'
,
'程序员'
,
2056
,
3400
,
null
,
20
);
insert
into
TbEmp
values
(
3251
,
'张翠山'
,
'程序员'
,
2056
,
4000
,
null
,
20
);
insert
into
TbEmp
values
(
5566
,
'宋远桥'
,
'会计师'
,
7800
,
4000
,
1000
,
10
);
insert
into
TbEmp
values
(
5234
,
'郭靖'
,
'出纳'
,
5566
,
2000
,
null
,
10
);
insert
into
TbEmp
values
(
3344
,
'黄蓉'
,
'销售主管'
,
7800
,
3000
,
800
,
30
);
insert
into
TbEmp
values
(
1359
,
'胡一刀'
,
'销售员'
,
3344
,
1800
,
200
,
30
);
insert
into
TbEmp
values
(
4466
,
'苗人凤'
,
'销售员'
,
3344
,
2500
,
null
,
30
);
insert
into
TbEmp
values
(
3244
,
'欧阳锋'
,
'程序员'
,
3088
,
3200
,
null
,
20
);
insert
into
TbEmp
values
(
3577
,
'杨过'
,
'会计'
,
5566
,
2200
,
null
,
10
);
insert
into
TbEmp
values
(
3588
,
'朱九真'
,
'会计'
,
5566
,
2500
,
null
,
10
);
alter
table
tb_emp
add
constraint
fk_emp_dno
foreign
key
(
dno
)
references
tb_dept
(
dno
);
insert
into
tb_emp
values
(
7800
,
'张三丰'
,
'总裁'
,
null
,
9000
,
1200
,
20
),
(
2056
,
'乔峰'
,
'分析师'
,
7800
,
5000
,
1500
,
20
),
(
3088
,
'李莫愁'
,
'设计师'
,
2056
,
3500
,
800
,
20
),
(
3211
,
'张无忌'
,
'程序员'
,
2056
,
3200
,
null
,
20
),
(
3233
,
'丘处机'
,
'程序员'
,
2056
,
3400
,
null
,
20
),
(
3251
,
'张翠山'
,
'程序员'
,
2056
,
4000
,
null
,
20
),
(
5566
,
'宋远桥'
,
'会计师'
,
7800
,
4000
,
1000
,
10
),
(
5234
,
'郭靖'
,
'出纳'
,
5566
,
2000
,
null
,
10
),
(
3344
,
'黄蓉'
,
'销售主管'
,
7800
,
3000
,
800
,
30
),
(
1359
,
'胡一刀'
,
'销售员'
,
3344
,
1800
,
200
,
30
),
(
4466
,
'苗人凤'
,
'销售员'
,
3344
,
2500
,
null
,
30
),
(
3244
,
'欧阳锋'
,
'程序员'
,
3088
,
3200
,
null
,
20
),
(
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名的员工姓名和工资
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
(
dept
no
integer
,
out
avg_sal
float
)
begin
select
avg
(
sal
)
into
avg_sal
from
TbEmp
where
dno
=
dept
no
;
end
;
-- create procedure sp_avg_sal_by_dept(d
no integer, out avg_sal float)
--
begin
-- select avg(sal) into avg_sal from tb_emp where dno=d
no;
--
end;
call
sp_avg_sal_by_dept
(
10
,
@
avgSal
);
--
call sp_avg_sal_by_dept(10, @avgSal);
select
@
avgSal
;
--
select @avgSal;
Day36-40/code/dist.sql
0 → 100644
浏览文件 @
ea9adc68
此差异已折叠。
点击以展开。
那些年我们踩过的那些坑.md
浏览文件 @
ea9adc68
...
...
@@ -100,7 +100,7 @@ if __name__ == '__main__':
我们希望录入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
a = object()
...
...
@@ -188,4 +188,3 @@ Python为什么要做出这样的设定呢?用一句广为流传的格言来
需要提醒大家注意的是,Python类中的那些魔法方法,如
\_\_
str
\_\_
、
\_\_
repr
\_\_
等,这些方法并不是私有成员哦,虽然它们以双下划线开头,但是他们也是以双下划线结尾的,这种命名并不是私有成员的命名,这一点对初学者来说真的很坑。
(未完待续)
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录