注册

因为数据库与项目经理引发的一点小争执,保存留念


前言


       作为刚步入社会的小同学来说,对代码有热情是很好,但是也极其嫌麻烦,明明都做完了还要被要求一遍又一遍的更改,相信大多数人都是嫌麻烦,然后就是两人之间的打情骂俏。



项目经理:你改一改嘛🤤


我:哎呀,好麻烦啊,不给你写了一个么😭


项目经理:你那个我数据库不能维护啊,快改改,乖o(^@^)o


我:😣我不我不,为啥不能维护,我不理解


项目经理:你去试试😣球球了,你去试试😭


(当然没我写的这么肉麻嘞🤣,如有雷同,纯属巧合)





       好了,数据库维护,他从前端页面进入后向页面输入肯定要调用sql,问题来了,以下这种形式sql可以是实现随意添加么(没有主键)
在这里插入图片描述
       我写python的第一反应:这有啥问题么,数据库我会个简单的增删改查,但是我感觉应该有函数可以直接往后加吧(很chun的想法,两种不同的语言怎么可能会一样),于是乎我开始了,漫漫搜索之路(因为回家连不上内网mysql,以下用Oracle代替)


使用insert函数



  • 数据库基本增加操作:insert into table_name (column1, column2, ...) VALUES (value1, value2, ...),这里直接跳过全字段添加,选取单字段添加,本以为他会如下图:

INSERT into wang.gjc_data (a1) values ('a');

在这里插入图片描述



  • 实际上如下图(哪怕是选取单字段也是默认增加一行):
    在这里插入图片描述


       我确实懵了,以前从来没有想过这件事,因为从数据库读取下来很多时候数据第一步就是先转置,感觉有点麻烦吧,因为转置完会出现很多意料之外的情况,但是人家数据库就是这么存的,现在轮到自己建数据库才发现数据库规则可太多了,而且自己上传数据也都是一次上传一行,没遇见过也就没有真正想过数据库在没有主键的情况下可以单单只改一个数据么,但是吧,我头铁啊,python能做到为啥数据库不行,我还是不信,我继续搜




  • 多条一次性插入:INSERT ALL INTO table_name (column1, column2, ...) VALUES (value1_1, value1_2, ...) into table_name(column_name1,column_name2) values (value1,value2)...select * from dual;

INSERT ALL 
INTO table_name (A1,A2) values ('a','b')
INTO table_name (B2,C1) VALUES ('c','d')
select * from dual;

       结果显而易见,肯定不是我所期望的那个场面,如下图:
在这里插入图片描述



       说实话我是真搜不着啥信息,找不到想要的答案就全试一遍,撞到南墙就回头了!所以我决定接下来从update语句下手。





使用update函数


       我想想,update好像无法新增一列,好像还没开始就结束了,但是实际页面肯定需要这个条件,那试试能不能达到自己想要的画面


       因为没有主键,所以我选择直接用update,最后结果与预料的一样,一列全部改变,图下图:


update  GJC_DATA set GJC_DATA.c2= 'c2'


在这里插入图片描述
       然后我就想到了第二范式的概念:第二范式要求在满足第一范式的基础上,非码属性必须完全依赖于候选字,也就是要消除部分依赖。
没有主键形成依赖,不满足第二范式。但是好像就算我加上一列自增主键,也无法用insert插入一个指定位置而不是一次插入一行,但是update是可以实现的,如下图(重新创建一个数据库表):


CREATE TABLE WANG.gjc_data(
id int NOT NULL,
a1 varchar(128),
a2 varchar(128),
a3 varchar(128),
a4 varchar(128),
a5 varchar(128),
b1 varchar(128),
b2 varchar(128),
c1 varchar(128),
c2 varchar(128),
c3 varchar(128),
c4 varchar(128),
c5 varchar(128),
c6 varchar(128),
c7 varchar(128),
PRIMARY KEY(id)
);
create sequence id_zeng_1
start with 1 --以1开始
increment by 1;
insert into wang.gjc_data (id,A1,b1) values(id_zeng_1.nextval,'a','d');
insert into wang.gjc_data (id,A1,b1) values(id_zeng_1.nextval,'b','e');
insert into wang.gjc_data (id,A1,b1) values(id_zeng_1.nextval,'c','f');

在这里插入图片描述


update wang.gjc_data set A1='B'  WHERE id=1;

在这里插入图片描述



       好吧,认清现实了,不过insert一次插入一行,下面直接插一行我python使用的时候早就可以用pandas清空空值,他也无法接受,可能他觉得客户看起来不好看吧,得,那凑活给他改改




  • Oracle数据库

在这里插入图片描述



  • Jupyter读取Oracle

在这里插入图片描述


总结


       到这算是结束了,总结一下,我原以为是我数据库学的不精通,做不到指定位置添加,经过这么一番探索后才发现真的没有这种操作,果然,实践才是检验真理的唯一标准,不遇上这事我还真一直有这个误区,算了,这次被自家人嘲笑就嘲笑了,那也比到时候出差去外面丢人强。



       谨以此文提醒自己,不再犯相同错误,数据库并不可以向excel那样用语句向指定位置插入指定值,更新也是需要设置主键或是一列唯一值去做一个指引;理论知识还是比较薄弱,需要持续加强。



作者:LoveAndProgram
来源:juejin.cn/post/7187287554796814393

0 个评论

要回复文章请先登录注册