当前位置: 代码网 > it编程>数据库>Oracle > Oracle中null值和空字符串的坑及解决

Oracle中null值和空字符串的坑及解决

2024年08月26日 Oracle 我要评论
思考在学习oracle数据库的过程中,发现当对字段进行约束,默认空字符串时,出现报错--创建employees表create table employees ( id number, name v

思考

在学习oracle数据库的过程中,发现当对字段进行约束,默认空字符串时,出现报错

--创建employees表
create table employees (
  id number,
  name varchar2(100)  
);
--对表新增email列,添加约束默认空字符串并且非空
alter table employees add email varchar2(100) default ''  not null;

以上操作的预期是向employees表中添加数据,email不添加数据的时候默认是空字符串,但实际上无法添加成功。

在mysql数据库中

--创建表employees
create table employees(
id int,   
name varchar(100)   
);
--添加字段email,并添加约束
alter table employees add email varchar(100) default ''  not null;
  • 向表中添加数据
--emial字段没有添加,默认为空字符串,不是null
insert into employees (id,name) values (1,'tom');
insert into employees  values (2,'carl','');
--email添加一个值
insert into employees  values (3,'jhon','123@qq.com');
--查询结果
mysql> select  *  from  employees;
+------+------+------------+
| id   | name | email      |
+------+------+------------+
|    1 | tom  |            |
|    2 | carl |            |
|    3 | jhon | 123@qq.com |
+------+------+------------+
3 rows in set (0.00 sec)

在mysql数据库中符合预期,email字段有数值时,是实际的数值,相反是默认的值。

  • 修改约束
alter table employees modify email varchar(100);
  • 添加数据
insert into employees (id,name) values (1,'tom');
insert into employees  values (2,'carl','');
  • 查看结果
mysql> select  *  from  employees;
+------+------+-------+
| id   | name | email |
+------+------+-------+
|    1 | tom  | null  |
|    2 | carl |       |
+------+------+-------+
2 rows in set (0.00 sec)

mysql中空字符串就是空字符串,空值就是null

在oracle数据库中

--创建表
create table employees (
id number,
name varchar2(100)  
);
--新增email字段,添加约束
alter table employees add email varchar2(100) default ''  not null;
  • 向表中添加数据报错
insert into employees (id,name) values (1,'tom');
insert into employees  values (2,'carl','');

  • 修改约束
--修改email的约束,改成可以添加空值
alter table employees modify email varchar2(100) ;
--插入数据
insert into employees (id,name,email) values (1,'tom','');  --添加空字符串
insert into employees  values (2,'carl',null);

查询结果,结果都是null

原因是因为在oracle中,将长度为零的字符值视为null

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com