创建数据库两个表:
1、
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、
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能执行成功(''肯定不行不用解释)

解决方案 »

  1.   

    即使是外键,null也可以把,不null的话才会约束。难道不null也不约束么??或者你改f_user_role varchar(32) not null,就不会插入Null了。。
      

  2.   

    引用的外键,必须为引用的那张表的主键,或者为null,是可以为null的
    还有"但是我在第一张表是刚好忘了主键"这句话是什么意思
      

  3.   

    你的意思是说引用值可以使null?
    "但是我在第一张表是刚好忘了主键"是"但是我在向第一张表添加数据的时候刚好忘了写引用字段的值"
      

  4.   

    我怎么感觉这话好绕口啊,你学过绕口令么?
    直接说,如果你主表的外键没有对null约束的话,是可以插进去的,约束了null的话,就插不进去。
      

  5.   

    null 表示暂时没有跟主表中记录关联上''是有信息的,要查主表中,是否存在“''”为主键的记录