oracle 怎么把新增字段设置唯一索引

粗略地说,在Oracle中为新字段添加唯一索引类似于锁定数据,确保值不能重复。
这个问题复杂了有几点:
首先,创建索引时最重要的是看字段的类型。
比如去年我们启动一个电商项目,给用户的手机号码添加唯一索引的时候,我们差点忘记了手机号码是VARCHAR2 ,直接使用了NUMBER类型。
结果插入的时候全都报错了。
还有一点是,唯一索引即使不为NULL,也可以重复。
很多人不重视这一点。
去年设计表的时候忘记了这一点,导致一堆空值被当成同一个东西。
还有一个关键细节。
比如对于3 000大小的小表,添加唯一索引不会有太大影响。
但是,如果是数百万个表,则每次插入时都必须删除重复项。
我去年在管理一个项目时就遇到了这个陷阱。
建立索引后,插入速度慢了 5 0%。

一开始我以为唯一索引只是为了防止重复,后来发现这是错误的。
这也会影响 DML 操作,尤其是 ON DUPLICATE KEY UPDATE 脚本。
等等,还有一件事。
如果表数据量较大,建议批量创建索引。
否则直接创建会锁表。
去年,客户就因为这个差点推迟了项目的实施。

建议先评估数据量和业务场景,然后直接添加小表。
对于大表,可以考虑先添加非唯一索引,然后再切换。
很多人不注意这一点。

oracle数据库快速插入多条数据

说实话,我之前用Oracle图形工具做过很多批量数据插入。
不过,我可能要提醒大家一些操作细节,以免陷入任何伤害。

我记得去年在财务系统项目中,我因为这个操作几乎封锁了整个数据库。
当时我们团队正在处理日常结算数据,需要向表中插入数百条交易流。
我直接按照你提到的步骤操作,但是我忘记在粘贴之前将数据类型转换为Oracle识别的格式。
例如,如果有一个日期字段,我直接将“2 02 3 -01 -01 ”复制到Excel中并按原样粘贴。
结果整个批次的数据在提交的时候就报错了。
最后还是得用TO_DATE函数来一一转换,花了很长时间。
所以粘贴之前最好先用工具中的“解锁”功能看看字段类型是否正确。

有趣的是,Oracle的粘贴提示“表格变成蓝色并出现箭头”相当直观,但我遇到了一个错误。
在1 2 c版本中,如果表包含BLOB字段,右键单击并粘贴时有时会选择错误的数据列。
我花了两天的时间调试才弄清楚这个问题。
原来,默认情况下,鼠标右键会优先选择最右边的无效列。
后来我们改用按Shift+Ctrl+V粘贴,问题就解决了。

最烦人的是session时间必须结束。
有一次我将数千条数据粘贴到测试环境中。
本来想慢慢来,结果同事回来后,会话自动断开,之前提交的数据全部没了。
因此,建议在操作前启动定时器或者简单地批量处理数据。

我没有亲自运行过MySQL这方面的图形工具,但是根据经验,我认为它们很可能会使用导入和导出功能。
例如,MySQL Workbench应该有一个“数据导入向导”,或者直接拖放CSV文件。
我对SQL Server比较熟悉。
以前使用SSMS时,我直接保存SQL脚本,并在其中使用INSERT...VALUES多行语句,以提高效率。

最后,一个小知识:Oracle 的 SQLPlus 实际上是一个更高效的选择。
直接使用命令行粘贴数据,例如使用“col Insert_date format 'yyyy-mm-dd' selecttwo_char(sysdate, 'yyyy-mm-dd') Dual”生成测试数据,然后使用“load”命令进行批量导入,比图形化工具快几个数量级。
当然这种方式对新人不太友好,要看团队的习惯。

数据格式尤为重要。
当时我在电信项目上遇到了困难。
表中有一个使用货币格式的数字字段,例如“¥1 ,000”。
结果我直接粘贴进去,Oracle把它当作文本处理,导致后面的所有计算都是错误的。
后来,我们改用“to_number(replace(column,'¥',''))”转换,勉强通过了测试。
因此,粘贴前最好做两件事:一是确认字段类型;二是确定字段类型。
其次,使用“Select _chars(column, 'format') from table”预览数据。