「回忆2022,展望2023,我正在参加2022年终总结征文大赛活动」

前言

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

项目经理:你改一改嘛

我:哎呀,好费事啊,不给你写了一个么

项目经理:你那个我数据库不能保护啊,快改改,乖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那样用句子向指定方位刺进指定值,更新也是需求设置主键或是一列仅有值去做一个指引;理论知识还是比较单薄,需求持续加强。