精华内容
下载资源
问答
  • 我有一个用户user,一个好友fans。 fans中三个字段 id,user_id,fans_id,其中user_id和fans_id都是跟user的id关联的外键,我发现这样会报错。 可是用户跟好友的信息又要与用户的信息关联,请问各位大神,...
  • 什么是一个表外键 他和主键有什么区别吗/?主键:唯一标识表中的所有行的一个列或一组列。主键不允许空值。不能存在具有相同的主键值的两个行,因此主键值总是唯一标识单个行。表中可以有不止一个键唯一标识...

    什么是一个表的外键 他和主键有什么区别吗/?主键:唯一标识表中的所有行的一个列或一组列。主键不允许空值。不能存在具有相同的主键值的两个行,因此主键值总是唯一标识单个行。表中可以有不止一个键唯一标识行,每个键都称作候选键。只有一个候选键可以选作表的主键,所有其它候选键称作备用键。尽管表不要求具有主键,但定义主键是很好的做法。 在规范化的表中,每行中的所有数据值都完全依赖于主键。例如,在以 EmployeeID 作为主键的规范化的 employee 表中,所有列都应包含与某个特定职员相关的数据。该表不具有 DepartmentName 列,因为部门的名称依赖于部门 ID,而不是职员 ID。 外键:外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。 Create database cat go use cat go CREATE TABLE s(s# int not null primary key,s_name varchar(8) not null) go CREATE TABLE c (c# int not null primary key,c_name varchar(8) not null) go CREATE TABLE cs(c# int not null,s# int not null,cj tinyint not null default(0), primary key (c#,s#),foreign key(s#) references s(s#),foreign key(c#) references c(c#)) go insert s values(1,’saa’) insert c values(1,’caa’) --这句是对的 insert cs values(1,1,86) --这句是错的,sql会报错,应为s表的s#列里没有2 insert cs vlaues(2,1,45) 定义主键来强制不允许空值的指定列中输入值的唯一性。如果在数据库中为表定义了主键,则可将该表与其它表相关,从而减少冗余数据。表只能有一个主键。 外键。 当创建或更改表时可通过定义 FOREIGN KEY 约束来创建外键。 例如,数据库 pubs 中的 titles 表与 publishers 表有链接,因为在书名和出版商之间存在逻辑联系。titles 表中的 pub_id 列与 publishers 表中的主键列相对应。titles 表中的 pub_id 列是到 publishers 表的外键。 FOREIGN KEY 约束并不仅仅只可以与另一表的 PRIMARY KEY 约束相链接,它还可以定义为引用另一表的 UNIQUE 约束。FOREIGN KEY 约束不允许空值,但是,如果任何组合 FOREIGN KEY 约束的列包含空值,则将跳过 FOREIGN KEY 约束的校验。 主键是本表的唯一标识,而外键是与另一个表相关联 

    展开全文
  • mySQL(8)-主键与外键

    2020-05-09 17:04:37
    一个表只能一个主键吗? 对 一个主键只能一列吗?错。主键可以由两列合起来。2.外键: 干什么的?某列数据来自于另一张表的一列,且只来自于另一张的一列。 好处: 1.节约空间:比如department,由中文字变...

    1.主键:
        干什么的?保证数据的唯一性。
                          一个表只能有一个主键吗? 对
                          一个主键只能有一列吗?错。主键可以由两列合起来。
    2.外键:
        干什么的?某列数据来自于另一张表的一列,且只来自于另一张的一列。
        好处:
    1.节约空间:比如department,由中文字变数字。比如“中共中央。。。”->1

    2.对department做约束,两表数据一致。

     不会出现如图所示的情况

    3.查询表1的department字段,改第2个表就可以了。   


    1.主键两种写法 关键字  primary key
     

     
    -- 主键两种写法 gu
       -- A) 写在字段后面 加关键字primary key
          create table t1(
              nid int(11) not null auto_increment primary key,
              pid int(11) default not null,
              num int(11)default null
    )begine=innoDB default charset=utf8;
    
       -- B) 写在最后一句 primary key(nid,pid)
           create table t1(
            nid int(11) not null auto_increment ,
            pid int(11) default not null,            -- 主键不为空
            num int(11)default null,
            primary key(nid,pid)
    )begine=innoDB default charset=utf8;

    2.外键语法

    constraint fk_user_depar foreign key("department_id",) reference department('id)

                                                                 本表字段                                   另一张表  表名 字段
     

     

    展开全文
  • 为什么链表?--博客园老牛大讲堂  因为之间关系,而且查询时需要的某些数据。 链表的前提是:之间必须设置主外键吗?  不是的,其实...假设一个不了解你结构的人,都能够任意的修...

    为什么链表?--博客园老牛大讲堂

      因为表与表之间有关系,而且查询时需要两张表的某些数据。

    链表的前提是:表与表之间必须设置主外键吗?

      不是的,其实表与表之间不需要设置主外键关系,用数据库语句就可以实现链表查询,删除,修改,增加等操作。

    为什么要设置主外键呢?

      通常我们看到表与表之间有关系,常常设置主外键。为什么?其实这样做是为了规范!假设一个不了解你表结构的人,都能够任意的修改你的外键。那这个表就不严谨了。

    我们到底设不设主外键呢?
      分情况:1、如果表结构简单,少量的表。逻辑不复杂。那么这个就不需要设置主外键了。特别对于数据库语句不熟悉的人,就方便多了。

          2、如果表结构复杂,有大量的表,逻辑复杂的。那么自己不可能记住所有主外键之间的关系,那么就需要设置主外键。

    怎样实现链表查询呢?

      链表查询又分为:左联表,右链表。等.

      链表不仅可以进行查询,还可以链表查询,链表增加,链表删除,链表修改。

     例子一、--博客园老牛大讲堂

      (左联表)、现在有两张表,a表与b表,a表主要字段有:id,a​1,a2,a3。b表字段有:id,b1,b1_id。其中a表的id为主键,b1_id为外键。

         思路:左连接就是以左边的a表为基础,查询出所关联的数据。多余的数据则清除,缺失的数据则为空。   

     

    左链表查询结果如图所示:

      

    例子二、--博客园老牛大讲堂

      (右联表)、现在有两张表,a表与b表,a表主要字段有:id,a​1,a2,a3。b表字段有:id,b1,b1_id。其中a表的id为主键,b1_id为外键。图如上所示

         思路: 右连接就是以右边的b表为基础,原理与左联接类似。

      如果是右连接的结果是:

     例子四、--博客园老牛大讲堂

        上面都是链表查询结果,下面我说一个链表删除操作。

        题目:现有两张表:chapters表:id(主键),name。division表:id(主键),name_id(chapters的外键),part。

        要求:实现链表删除操作。

        语句:DELETE c,d FROM chapters c JOIN division d ON c.id=d.name_id WHERE c.id=1

             

     

     

     

     

    转载于:https://www.cnblogs.com/laonniudajiangtang/p/6005461.html

    展开全文
  • 我有两个表dish和ingredient,dish中ingredient_id是外键,关联到ingredient的id. 在spring mvc中建立域模型Dish和Ingredient,Dish中ingredient属性,Ingredient中dish属性,分别注解@OneToOne标记。 ...
  • 1.一个属性既可以是主键又可以外键(这种情况主要出现在一个对象属于另一个对象的情况下吗?) 学生(学号,姓名) 本科生(学号,专业) 其中学号均为主键,并且学生的学号分别又为后两表外键  2.参照完整性的...

     

    1.一个属性既可以是主键又可以是外键(这种情况主要出现在一个对象属于另一个对象的情况下吗?)

    学生(学号,姓名)
    本科生(学号,专业)

    其中学号均为主键,并且学生表的学号分别又为后表的外键

     2.参照完整性的进一步理解:

    关系R( A,B,C) S(D,E,A) A是R的主键,A是S的外键
    <注意这并不属于上面既是主键又是外键的情况>
    A作为R的主键当然要有作为主键的限制,例如不能重复,不能为空之类的
    
    A作为S的外键也要有一定的限制,例如A在S中一定要是R中有的值,或者NULL。(即符合参考完整性)

     3.where字句和having的区别:

    两者作用对象不同。where字句作用于基本表和试图,从中选择满足条件的元组,having短语作用于组(即GROUP BY得到的组),

    从中选择满足条件的组,例:

    select sno

    from sc

    group by sno

    having count(*)>3

     4.数据查询主要分为:单表查询,连接查询,嵌套查询,集合查询.   

     其中连接查询里面的自身连接可以注意一下; 而嵌套查询正是Structed Query Language 的含义所在。

    下面看一个关于嵌套查询中exists查询的例子:

    查询所有选修了1号课程的学生姓名:

    select  sname

    from student

    where EXISTS

                (select *

                 from sc

                where sno=student.sno and cno='1'

                 )

    只要exists子句为真,就把student表中的sname放到结果集了,另外in子句是先内查询再外查询,而exists子句是内外同时查询。

     同理,查询没有选修1号课程的学生姓名:

    select sname

    from student

    where not EXISTS

    (select *

    from sc

    where sno=student.sno and cno='1'

    )

    总之,只要抓住三点就行:

    (1).exists子句是内外同时查询;

    (2).当使用的是存在量词EXISTS:若内层查询结果时,外层的WHERE子句返回真值  ;

    当使用的是存在量词NOT EXISTS:若内层查询没有结果时,外层的WHERE子句返回真值;

    (3).只有当where返回为真时,内查询才把得到的结果放到结果集中。

     

     

     

    补充中。。。。。。。。。。。。。。。。。。

    展开全文
  • 1. 类别被三个业务作为外键,而这三个业务对象实际使用时只是其中的一个对象被实例化。 2. 类别的映射文件通过设置3个 set one-to-many 分别关联至三个不同业务对象。 3. 类别对象定义了3个HashSet...
  • 一个表有两个字段,ID1,ID2,将其设为联合主键,之后我想将另外一个表的一个字段的外键设为ID1,但会提示“与现存的主键或UNIQUE约束不匹配”。有没有解决的办法,还是SQL Server不允许这样?谢谢! 不能...
  • 添加hibernate支持后用junit测试添加数据发现一个奇怪的问题,数据库里有两一个商家(参照),一个商品外键表),测试之前有在数据添加一些数据,第一次测试添加数据后在数据表里发现参照的id居然...
  • 这时候就存在着一个问题:主还没有新增,那么子新增时就会存在着外键约束的问题。以前我们采取的方式是在进入新增页面时先个简单的向导页面,产生一条主的记录,其中大部分字段的值为null,但是这种方式要求...
  • 现在我的mongodb数据里面个外键,这个外键是另一条数据的主键(条数据是同一张)我要实现父数据添加一个字段是子数据的name字段该怎么实现?用filter能实现吗?或者其他方法可以实现吗 数据关系就类似员工...
  • tab_student表有三个字段,student_id(主键),student_name,banji_id(外键),而tab_banjibanji_id(主键)和banji_name两个字段,我现在的想法是实现插入学生到某个班去,请问怎样才能实现? 还有一个问题,...
  • 1.3.5 给定一个整数数组和一个整数,返回两个数组的索引,这两个索引指向的数字的加和等于指定的整数。需要最优的算法,分析算法的空间和时间复杂度 1.3.6 假如给你一个新产品,你将从哪些方面来保障它的质量? ...
  • 有两个问题: [b][color=red][size=large]1、spring和hibernate中的对多问题(包括添加、删除和更行)~我现在这么写代码规范吗? 2、总感觉项目里加了spring之后,处理事务的速度变得慢了很多~比只是加入...
  • 因为用的是hibernate, 上面两个表对应的PO分别是CategoryPO , ArticlePO.没有配置外键映射. 1. 现在要求根据文章分类查询个分类的前10条record。 我想到的办法(1) .在service 层查询出所有categoryPO.name,...
  • java面试800题

    2011-09-13 20:25:48
    外键是从某个表的一个字段指向另外一个表的主健字段,两个字段的类型和精度应该一致,外键的值必须在主键中存在 Q0030 在数据库中什么代表一条记录? 主健 Q0031 如何编写效率高的SQL语句? "1.根据查询条件建立...
  • 就算是一个个对象,它也不是静止的,它的内部也是由不同分子原子发生作用的结果,可以讲对象也是一个关系体。 软件是用来对世界进行描述的一种方式,最初我们采用过程的编程,后来与世界的描述不相符,所以就出现了...
  • 比如你是一个医生,我让一个人站在你的面前测心率,结果是50次/分钟,你是不是可以断定他问题,需要安装心脏起搏器呢?实际上是不需要,因为我知道他是一个运动员,这样的心率是正常的,而医生不知道,所以他在...
  • 本书第1章强调不要把数据库当成一个黑盒,讨论了开发人员必须了解的数据库的基本特性和功能。第2章提供了一个创建Oracle数据库的绝好例子,从中你将深入地了解数据库和实例的概念。第3章介绍了各种类型的文件,特别...
  • 11.4.2 一个简单的基于函数的索引例子 414 11.4.3 只对部分行建立索引 422 11.4.4 实现选择的唯一性 424 11.4.5 关于ORA-01743的警告 424 11.4.6 基于函数的索引小结 425 11.5 应用域索引 -1 11.6 关于索引...
  • CruiseYoung提供的带详细书签的电子书籍目录 ... SQL Server 2008数据库...虽然无法自由地表达自己的想法,然而,翻译的快乐就在于:使另一个人的好想法能让更多的人了解。当然,由于时间紧张,译者水平有限,错误粗糙...
  • 不幸的是,虽然关系型数据库历经了约30年的发展,成熟的理论和大量的实践基础,但是,大多数设计、开发人员在设计数据库结构时仍然是“跟着感觉走”,根据业务的需要和编程的方便,把字段这张表放几那张表放几...
  • c++ 面试题 总结

    2009-09-16 08:44:40
    两个好象是一样的,此时*p可以修改,而p不能修改。 (4)const char * const p 这种是地址及指向对象都不能修改。 -------------------------------------------------------------------------- 6.下面是C语言中...
  • 先说明见一下:总共有两个表一个是teacher,另一个是student,多对多关系,都分别有序列S_Teacher和S_Student,使用oracle9i数据库,hibernate3.3,spring2.5和JPA的注解 下面是我的源代码: Teacher model ...
  • Oracle事例

    2007-08-26 10:35:53
    可以在服务器端,也可以在客户端建立,但必须注意,台服务器之间 数据库必须可以互访,必须各各自的别名数据库 18、查看数据库链路 select * from all_db_links; select * from user_db_links; 查询 select...

空空如也

空空如也

1 2
收藏数 25
精华内容 10
关键字:

一个表可以有两个外键吗