精华内容
下载资源
问答
  • 外键值为空

    千次阅读 2021-01-19 06:41:21
    从感官上,外键用于限制主子表的关联关系,是一种强关联关系,那么子表的外键值不应该为空,而是都会关联到主表对应的记录上,但实际上,至少在Oracle中,外键可以为空的,打个比方,班级是主表,学生是子表,一个...

    从感官上,外键用于限制主子表的关联关系,是一种强关联关系,那么子表的外键值不应该为空,而是都会关联到主表对应的记录上,但实际上,至少在Oracle中,外键是可以为空的,打个比方,班级是主表,学生是子表,一个班级有多名学生,一名学生肯定会关联到一个存在的班级,但来了一个转校生,还没有分班,他现在属于学生子表,但还没有关联到班级主表中的任何一条记录。

    实验:

    1.创建主表T_A,子表T_B,子表A_ID列作为外键关联到主表T_A的主键ID字段。

    SQL> create table t_a(id number, name varchar2(1));

    Table created.

    SQL> alter table t_a add constraint pk_t_a primary key(id);

    Table altered.

    SQL> create table t_b(id number, a_id number, name varchar2(1));

    Table created.

    SQL> alter table t_b add constraint pk_t_b primary key(id);

    Table altered.

    SQL> alter table t_b add constraint fk_b_a foreign key(a_id) references t_a(id);

    Table altered.

    2.插入记录,其中T_B表的一条记录标明A_ID字段值为空。

    SQL> insert into t_a values(1, 'a');

    1 row created.

    SQL> insert into t_b values(1, 1, 'b');

    1 row created.

    SQL> insert into t_b values(2, '', 'c');

    1 row created.

    SQL> select * from t_a;

    ID N

    ---------- -

    1 a

    SQL> select * from t_b;

    ID A_ID N

    ---------- ---------- -

    1 1 b

    2 c

    可以插入,说明外键字段是可以为空。

    3.直接删除有关联子表记录的主表记录时,会报错:

    SQL> delete from t_a where id=1;

    delete from t_a where id=1

    *

    ERROR at line 1:

    ORA-02292: integrity constraint (BISAL.FK_B_A) violated - child record found

    4.先删除子表记录,再删除主表对应的记录,则可以执行。

    SQL> delete from t_b where id=1;

    1 row deleted.

    SQL> delete from t_a where id=1;

    1 row deleted.

    展开全文
  • 外键可以为空

    2021-05-04 01:54:56
    一直认为在oracle中,外键是不能为空的,今天突然发现错了,所以做了个实验:----创建表SQL> create table t(id number,name varchar2(4),sex char(2),constraint pk_id_name primary key(id,name));Table ...

    一直认为在oracle中,外键是不能为空的,今天突然发现错了,所以做了个实验:

    ----创建表

    SQL> create table t(id number,name varchar2(4),sex char(2),constraint pk_id_name primary key(id,name));

    Table created.

    SQL> create table tt(id number,name varchar2(4),class varchar2(2),constraint fk_id_name foreign             key(id,name) references t(id,name));

    Table created.

    ----插入数据至t

    SQL> insert into t values (1,'a','m');

    1 row created.

    SQL> insert into t values (2,'b','m');

    1 row created.

    SQL> insert into t values (3,'c','f');

    1 row created.

    ----测试

    SQL> insert into tt values (null,null,'01');

    1 row created.

    --以上一行可以看出当外键都为null时是可以插入的

    SQL> insert into tt values (1,null,'01');

    1 row created.

    SQL> insert into tt values (null,'a','01');

    1 row created.

    SQL> insert into tt values (null,'d','01');----t表name列无'd'

    1 row created.

    SQL> insert into tt values (5,null,'01');----t表id列无'5'

    1 row created.

    --以上四行可以看出当组合外键中有一列为空时,另一列可以不参照t表的相应数据

    SQL> insert into tt values (5,'d','01');

    insert into tt values (5,'d','01')

    *

    ERROR at line 1:

    ORA-02291: integrity constraint (SCOTT.FK_ID_NAME) violated - parent key not

    found

    所以外键约束是可以为空的,当为组合外键约束时只要其中有一列为空,则会跳过约束的检查,即别的列可以为任何值。

    -----------------------------------------------------------------------------------------------------

    ps:外键不仅可以和主键相关联,也可以是unique约束相关联

    展开全文
  • 外键可以为空吗?

    千次阅读 2021-03-04 01:42:51
    展开全部外键可以为空,但只允32313133353236313431303231363533e78988e69d8331333337613261许主键所包含的和空值。举例:创建三张表:createtablestudent(snochar(5)primarykey,snamechar(20)notnull,ssexchar(3)...

    展开全部

    外键可以为空,但只允32313133353236313431303231363533e78988e69d8331333337613261许主键所包含的值和空值。

    举例:

    创建三张表:create table student

    (sno char(5) primary key,

    sname char(20) not null,

    ssex char(3) not null,

    sage integer not null,

    sdept char(15));

    create table course

    (cno char(5) primary key,

    cname char(20) not null unique,

    cpno char(5),

    ccredit integer);

    create table sc

    (sno char(5) constraint fk_student references student(sno),

    cno char(5) constraint fk_course  references course(cno),

    grade integer);

    其中student和course都是主表,sc是副表,其中sno和cno分别为student中的sno和course中的cno的外键。

    在主表中添加数据:insert into student values ('001','zs','男',11,'计算机系')

    insert into course values ('001','C语言',null,3)

    此时在副表中添加sno、cno为空的数据:insert into sc values (null,null,10)

    结果是可以成功的:

    382a6c5a76b882c01636ef06a5faa885.png

    此时表中数据为:

    21aecaae67b087e75b9b5d88f68e71d6.png

    展开全文
  • 是的,您只能在NULL时强制执行约束。可以使用以下示例轻松测试它:CREATE DATABASE t;USE t;CREATE TABLE parent (id INT NOT NULL,PRIMARY KEY (id)) ENGINE=INNODB;CREATE TABLE child (id INT NULL,parent_...

    是的,您只能在值不为NULL时强制执行约束。可以使用以下示例轻松测试它:

    CREATE DATABASE t;

    USE t;

    CREATE TABLE parent (id INT NOT NULL,

    PRIMARY KEY (id)

    ) ENGINE=INNODB;

    CREATE TABLE child (id INT NULL,

    parent_id INT NULL,

    FOREIGN KEY (parent_id) REFERENCES parent(id)

    ) ENGINE=INNODB;

    INSERT INTO child (id, parent_id) VALUES (1, NULL);

    -- Query OK, 1 row affected (0.01 sec)

    INSERT INTO child (id, parent_id) VALUES (2, 1);

    -- ERROR 1452 (23000): Cannot add or update a child row: a foreign key

    -- constraint fails (`t/child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY

    -- (`parent_id`) REFERENCES `parent` (`id`))

    第一次插入将通过,因为我们在中插入了NULL parent_id。由于外键约束,第二次插入失败,因为我们试图插入parent表中不存在的值。

    展开全文
  • 从后台查询项目出现问题,添加项目正常,但是在执行... 问题解决了,原来 hbm.xml文件中外键有一个属性是not-null,默认true,若是需要外键为空必须将其改false,问题就解决了……,晕,纠结了我两天……
  • 请注意账户id并不是唯一的(简单起见我删除表中的其他参数,使其短)... 我无法外键为空时检索记录。import javax.persistence.*;@Entitypublic class LookupRequest {@Id@GeneratedValue(strategy= GenerationType.A...
  • MYSQL添加外键

    2021-01-25 11:32:28
    给商品表(从表)添加一个外键ALTER TABLE product ADD CONSTRAINT FK_cno FOREIGN KEY(cno) REFERENCES category(cid 从表);sql语句的执行顺序是:from-->WHERE-->GROUP BY -->HAVING --- >ORDER BY --&...
  • 62616964757a686964616fe58685e5aeb931333366306538外键就是自己设置了也即可以有多个,可以设置除主键以外的其他字段全部是外键的。数据库的每张表只能有一个主键,不可能有多个主键。所谓的一张表多个主键,我们称...
  • mysql怎么增加外键

    2021-01-18 18:22:23
    mysql增加外键的方法:1、在CREATE TABLE语句中,通过FOREIGN KEY关键字来添加外键;2、在ALTER TABLE语句中,通过ADD和FOREIGN KEY关键字来添加外键。MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键...
  • MySQL外键的个人理解

    2021-01-18 22:12:38
    问题描述:错误理解:原来我一直以为,两个表只要存在相同的列就可以把他设成外键,这个想法是错误的。问题解决:查了不少的资料,外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一...
  • 一、外键:1、什么是主键外键:主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性。外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的。所以说到了外键,一定...
  • MySQL外键+唯一索引

    2021-01-27 18:13:09
    外键是指一个表里的列与另一张表里的列进行关系连接,可用于使用简单的数字或字母替代复杂的数据结构,不仅可以节省空间,也拥有约束功能,可减少书写出错的机会。1.1使用方式constraint 变量名 foreign key (列名) ...
  • 有一个东西一直在我脑海中是个很烦的东西,但是这东西不搞清楚会阻碍自己的前进。...首先我么要搞明白,什么要使用外键,比如有两张表(在最下面我会附上表的创建SQL语句,以及外键的添加和关联删除时候的语句...
  • 主键不能重复,且只能有一个,也不允许为空。定义主键主要是为了维护关系数据库的完整性。2、外键外键用于与另一张表的关联,是能确定另一张表记录的字段。外键是另一个表的主键,可以重复,可以有多个,也可以是...
  • not null:非空,用于保证该字段的不能为空(比如姓名、学号等) default:默认,用于保证该字段有默认值(比如性别等) primary key:主键,用于保证该字段的具有唯一性,并且非空(比如学号、员工编号等) ...
  • MySQL数据库外键

    2021-01-19 09:30:11
    设置外键外键及功能:成绩表(参照表也叫子...在on delete on update设置参照动作:restrict(限制) cascade(级联)Set null(设置为空) no action(无动作)简单点说就是外键所在的表是子表,外键所参照的表是父表。A. r...
  • JPA 不生成外键

    2020-12-24 22:53:47
    在用jpa这种orm框架时,有时我们实体对象存在关联关系,但实际的业务场景可能不需要用jpa来控制数据库创建数据表之间的关联约束,这时我们就需要消除掉数据库表与表之间的外键关联。但jpa在处理建立外键时存在一些...
  • 外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。外键主要用来保证数据的完整性和一致性两个表必须是InnoDB表,MyISAM表...
  • 外键约束如果公共关键字在一个关系中是主关键字,那么这个公共...外键、主键的区别定义主键:唯一标识一条记录,不能有重复,不允许为空,一张数据表只能有一个主键外键:表的外键是另一张表中可以唯一标识的字段...
  • 使用工具 Navicat Excel 注意事项 注意时间字段 Excel中数据不可拆分(数据库的原子性) 模拟导入数据 ...进入如下页面,可以改时间格式,这里你表中时间是什么样的格式...数据库表中各个字段的名字与类型可以在这块修
  • sql设置外键(设置外键的sql语句)

    千次阅读 2021-02-01 02:46:07
    sql设置外键(设置外键的sql语句)2020-07-24 11:44:03共8个回答sql怎么设置外键创建数据库时就是有主键的创建了主键,但是表之间的关系没有联系,要建数据库关系图只有主键没有外键时不行的。建外键的前提是此外键...
  • 1.外键的作用,主要有两个:一个是让数据库自己通过外键来保证数据的完整性和一致性一个就是能够增加ER图的可读性2.外键的配置1)先创建一个主表,代码如下:#创建表student,并添加各种约束create table student(id int...
  • 外键约束

    千次阅读 2021-01-05 22:33:40
    外键约束 在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名) 在已有表中添加外键约束:alter table 从表表名 add constraints 外键约束名称 ...
  • mysql数据库外键、主键详解

    千次阅读 2021-01-18 18:41:25
    一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,...
  • mysql 外键的基本使用

    2021-01-18 18:47:37
    外键的使用条件:两个表必须是...外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以表添加外键的语法:alter table 表名 add constraint 外键...
  • MySQL主键外键设定方法

    千次阅读 2021-03-15 21:53:27
    外键作用: 使两张表形成关联,外键只能引用外表中的列的!指定主键关键字: foreign key(列名)引用外键关键字: references (外键列名)事件触发限制: on delete 和on update , 可设参数cascade(跟随外键改动), ...
  • MySQL外键

    2021-01-18 20:57:10
    1.创建表(1)外键:FOREIGN KEY(ordersid) references orders(id)在建表过程中create table team(id int primary key auto_increment,name varchar(40));create table star(id int ,name varchar(40),team_id int,...
  • Oracle的外键用来限制子表中参考的字段的,必须在主表中存在。而且在主表的记录发生变化导致外键参考唯一约束...置为空Set to null:当参考的数据被更新或者删除,那么所有参考它的外键值被置为空;置默认值S...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,338
精华内容 26,535
关键字:

外键值是否可以为空