思考
在学习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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论