思考
在学习oracle数据库的过程中,发现当对字段进行约束,默认空字符串时,出现报错
1 2 3 4 5 6 7 | --创建employees表 CREATE TABLE employees ( id NUMBER, name VARCHAR2(100) ); --对表新增email列,添加约束默认空字符串并且非空 ALTER TABLE employees ADD email VARCHAR2(100) DEFAULT '' NOT NULL ; |
以上操作的预期是向employees表中添加数据,email不添加数据的时候默认是空字符串,但实际上无法添加成功。
在MySQL数据库中
1 2 3 4 5 6 7 | --创建表employees CREATE TABLE employees( id int , name VARCHAR (100) ); --添加字段email,并添加约束 ALTER TABLE employees ADD email VARCHAR (100) DEFAULT '' NOT NULL ; |
- 向表中添加数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | --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字段有数值时,是实际的数值,相反是默认的值。
- 修改约束
1 | ALTER TABLE employees modify email VARCHAR (100); |
- 添加数据
1 2 | INSERT INTO employees (id, name ) VALUES (1, 'TOM' ); INSERT INTO employees VALUES (2, 'Carl' , '' ); |
- 查看结果
1 2 3 4 5 6 7 8 | mysql> SELECT * FROM employees; + ------+------+-------+ | id | name | email | + ------+------+-------+ | 1 | TOM | NULL | | 2 | Carl | | + ------+------+-------+ 2 rows in set (0.00 sec) |
MySQL中空字符串就是空字符串,空值就是NULL
在Oracle数据库中
1 2 3 4 5 6 7 | --创建表 CREATE TABLE employees ( id NUMBER, name VARCHAR2(100) ); --新增email字段,添加约束 ALTER TABLE employees ADD email VARCHAR2(100) DEFAULT '' NOT NULL ; |
- 向表中添加数据报错
1 2 | INSERT INTO employees (id, name ) VALUES (1, 'TOM' ); INSERT INTO employees VALUES (2, 'Carl' , '' ); |
- 修改约束
1 2 3 4 5 | --修改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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。