日期:2014-05-20  浏览次数:20676 次

让我百撕不得骑姐的问题,求真相
创建数据库两个表:
1、
XML code

create table tab_user
(
pk_user_uuid varchar(32) primary key,
f_user_name varchar(32) not null,
f_user_password varchar(32) not null,
f_user_role varchar(32) ,
f_superuser_uuid varchar(32),
f_create_time timestamp DEFAULT now(),
constraint f_user_role_id foreign key(f_user_role) references tab_user_role(pk_role_id)
)            


2、
XML code

create table tab_user_role
(
pk_role_id varchar(32) primary key,
f_role_name  varchar(32) not null
)


上面我明明用外键引用了第二张表的主键
但是:insert into tab_user values('asdfasdf1','asdfaf','',null,'11')却能正确执行
数据库是:PostgreSql
而第二张表中只有这4个ID
"7fa6ea0e157e454b8a54d683cce57ef5"
"1a109573eb6c4d09b95b7e0fd6051d0b"
"3fb05d089cc54d47a34c41e4cae3c6c4"
"daf6a3753f9a463aabce090a95e74bf9"


想问下:为什么用null能执行成功(''肯定不行不用解释)

------解决方案--------------------
即使是外键,null也可以把,不null的话才会约束。难道不null也不约束么??

或者你改f_user_role varchar(32) not null,就不会插入Null了。。
------解决方案--------------------
引用的外键,必须为引用的那张表的主键,或者为null,是可以为null的
还有"但是我在第一张表是刚好忘了主键"这句话是什么意思
------解决方案--------------------
这个如果插不进去,才是真的有问题了。
------解决方案--------------------
探讨

即使是外键,null也可以把,不null的话才会约束。难道不null也不约束么??

或者你改f_user_role varchar(32) not null,就不会插入Null了。。

------解决方案--------------------
null 表示暂时没有跟主表中记录关联上

''是有信息的,要查主表中,是否存在“''”为主键的记录