精华内容
下载资源
问答
  • django-给外键关系传值,删除外键关系 反查:  在表关系里 related_name = '反查name',自己不设置,django也会默认设置为class的小写名字+_set , ex: book_set. 一对一关系赋值: class ...

    反查:

      在表关系里 related_name = '反查name',自己不设置,django也会默认设置为class的小写名字+_set  , ex: book_set.

    一对一关系赋值:

    class ModelStudy(View):
        ''' ClassRoom和ClassNumber是一对一关系,给外键传值 '''
        def get(self, request):
            ''' 两种方法 教室ClassRoom和教室编号ClassNumber 外键字段在django类里名(room_number)在数据库名(room_number_id) '''
         # 一.1赋值对象给外键字段 # room_number = ClassNumber.objects.filter(class_number__exact='003')[0] # d对List切片 # c = ClassRoom() # c.room_number = room_number # c.save() # 1.2新增数据并赋值对象给新增字段 room_number = ClassNumber.objects.filter(class_number__exact='003')[0] print room_number ClassRoom.objects.create(name="python教室", room_number=room_number) # 新增数据

         # 二:获取外键字段(数据库的外键字段名字room_number_id)的值,将相对应的值直接赋值给该外键字段
         class_number = ClassNumber.object.get("id=1").room_number # 获取教室编号具体值 ‘001’
         c = ClassRoom.object.filter(id=1)[0]
         c.room_number_id = class_number # 将‘001’复制给数据库外键字段
    外键字段在django类里名(room_number)在数据库名(room_number_id)
         c.save()
    return HttpResponse("ojbk")

     多对一:

    类似一对一,只是 ''多''的一方可以对应多个"一"方。 ps: "一"放通过反查,会有不止一条数据。可以通过+all()获取。

    假设两张表:Book书 + Reply评论 表。为多对一,Reply为"多''.  那么"一",Book反查是,Book.object.get(id=1).reply_set.all()          # reply_set是不设置related_name时,django自己设置的

    多对多:

    class ModelStudy(View):
        ''' Students和Teachers是多对多关系 '''
        def get(self, request):
            ''' 两种情况 '''
            # 主类(外键所在类)数据已经存在
            # t = Teachers.objects.get(id=1)
            # s = Students.objects.get(name="学生3")
            # s.teacher.add(t) # 多对多需要add数据
            # s.save()
    
            # 主类数据不存在,新增数据时, 需先save()
            t = Teachers.objects.get(id=1)
            s = Students(name='xiaodong1', age=10, gender="")
            s.save() # 先存新增数据
            s.teacher.add(t) # 再给新增数据添加多对多关系   可以add(t, t1, t2)多个对应的关系
            s.save()
            return HttpResponse("ojbk")

     删除关系数据

    先查出对应的关系数据,在删除

    class ModelStudy(View):
        ''' Students和Teachers是多对多关系 '''
        def get(self, request):
            ''' 两种情况 '''
            s = Students.objects.get(id=1)
            t = s.teacher.all() # 多对多 s.teacher是一个<QuerySet>list对象 通过反查取值需要all(),get(),filter之类的
            for x in t: # 删除所有对应关系 haha...
                s.teacher.remove(x)
            return HttpResponse("ojbk")

     

    posted on 2018-05-09 20:02 .Tang 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/tangpg/p/9016296.html

    展开全文
  • 今天小编就为大家分享一篇对Django外键关系的描述,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • java~主外键关系

    2011-08-09 23:07:41
    Java~主外键关系~有图解~主外键关系~主外键关系
  • 需要建立主外键关系的两个表的存储引擎必须是InnoDB。 外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型。 外键列和参照列必须创建索引,如果外键列不存在索引,mysql将自动创建索引。 一、SQL...
  • 外键关系CRUD

    2020-05-13 14:24:33
    外键关系CRUD 准备工作 create table t_customer( id number, name varchar2(20) constraint customer_name_nn not null, constraint customer_id_pk primary key(id) ); create table t_order( id ...

    主外键关系CRUD

    • 准备工作

      create table t_customer( 
          id number,
          name varchar2(20) constraint customer_name_nn not null, 
          constraint customer_id_pk primary key(id)
      );
      
      create table t_order( 
      	id number, 
      	price number, 
      	customer_id number, 
      	constraint order_id_pk primary key(id),
      	constraint order_cid_fk foreign key(customer_id) references t_customer(id)
      );
      

    3.1 insert

    注意,在有主外键关系的情况下,一定要先插入没有外键的一方,再插入有外键的一方。

    因为外键列的值必须要在另外一张表中的主键列出现过。否则插入不进去

    • 插入 t_customer

      insert into t_customer values(1,'tom');
      insert into t_customer values(2,'jerry');
      insert into t_customer values(3,'terry');
      
    • 插入 t_order

      insert into t_order values(1,3000,1);
      insert into t_order values(2,3000,2);
      insert into t_order values(3,3000,2);
      -- 上面能够插入成功是因为 外键 外键列中的值 在 t_customer表中的主键列出现过。同时外键列的值可以重复
      
      -- 外键列也可以为空,如果是在建表的时候手动给外键列添加了非空约束,那么就不能为空
      insert into t_order values(1,3000,null);
      
      -- 插入失败,因为外键列的值 6 并没有在主键列中存在过
      insert into t_order(id,price,customer_id) values(4,5000,6);
      
      
      

    3.2 update

    可以修改外键列的值,但是修改后的值也必须在另外一张表中的主键列中存在。

    • 修改t_order中id为1的数据的customer_id 为 3

      update t_order set customer_id = 3  where id = 1;
      
    • 修改t_order中id为1的数据的customer_id 为 null

      update t_order set customer_id = null  where id = 1;
      
    • 修改t_order中id为1的数据的customer_id 为 1000

      update t_order set customer_id = 1000  where id = 1;
      
      -- 修改失败,因为在t_customer中的主键列没有 1000的值
      

    3.3 delete

    当删除的最好是先删除有外键的一方在删除无外键的一方。

    因为如果先删除无外键的一方,那么就会导致另外一张表里面的外键列的值不知道怎么处理从而导致报错。

    delete from t_order;
    

    删除删除成功。因为这个表里面的数据不对对t_customer的数据产生任何进行影响。

    再次插入数据进行测试:

    insert into t_order values(1,3000,1);
    insert into t_order values(2,3000,2);
    insert into t_order values(3,3000,2);
    

    删除 t_customer 中id为3的数据。

    delete from t_customer where id = 3;
    

    删除成功,因为id为3并没有在 t_order里面充当了外键。所以删除后不会对t_order表里面的数据产生影响。

    删除 t_customer 中id为1的数据。

    delete from t_customer where id  = 2;
    

    删除失败,因为在 t_customer里面id为2的数据,在t_order里面充当外键。所以当 把id为2的数据删除以后。

    t_order不知道怎么处理 外键列customer_id 中为2的数据。因此报错。

    要想不报错,可以先删除有外键的一方,在删除没有外键的一方。

    但是如果非要直接删除没有外键的一方,那么就需要在建表的时候告诉有外键的一方,当没有外键的一方删除数据时,有外键的一方该怎么处理。

    处理方式有三种:

    • on delete no action 默认就是这种
    • on delete cascade 级联操作,当删除数据时,另外一张表中也删除相关数据
    • on delete set null 级联操作,当删除数据时,将另外一张表中相关的外键数据设置为空

    3.3.1 默认方式

    on delete no action

    已上面 t_order,t_customer为例

    delete from t_customer where id = 2;
    

    报错,错误信息显示为: 违反完整约束条件- 已找到子记录

    3.3.2 on delete cascade

    需要在建表的时候指定外键的操作

    create table t_teacher(
      id number primary key,
        name varchar2(255)
    );
    create table t_student(
      id number primary key,
      name  varchar2(255),
      teacher_id number references t_teacher(id) on delete cascade
    );
    
    insert into t_teacher(1,'wangzh');
    insert into t_teacher(2,'xiezl');
    
    insert into t_student(1,'天使1号',1);
    insert into t_student(2,'天使2号',1);
    insert into t_student(3,'天使3号',2);
    

    删除 t_teacher表中id为1的数据

    delete from t_teacher where id = 1;
    

    发现 t_student中外键为1的数据也直接被删除了

    3.3.3 on delete set null

    create table tbl_hunsband(
      id number primary key,
        name varchar2(255)
    );
    create table tbl_wife(
      id number primary key,
      name  varchar2(255),
      hunsband_id number reference tbl_hunsband(id) on delete set null
    );
    
    insert into tbl_hunsband(1,'pantf');
    insert into tbl_hunsband(2,'liangwei');
    
    insert into tbl_hunsband(1,'xiaotao',1);
    insert into t_student(2,'niurui',2);
    

    删除 t_hunsband 表中 id为1的数据

    delete from tbl_student where id = 1;
    

    发现 t_wife表中 相关外键数据置空了。

    展开全文
  • Sql server怎样创建主外键关系小弟刚学Sql Server,最好能详细一点的。Sqlserver怎样创建主外键关系的方法。 如下参考: 1.为了帮助你理解,用一个例子来帮助你理解。它基本上是指通过引用表2中的字段来约束表1中的...

    Sql server怎样创建主外键关系

    小弟刚学Sql Server,最好能详细一点的。

    Sqlserver怎样创建主外键关系的方法。 如下参考: 1.为了帮助你理解,用一个例子来帮助你理解。它基本上是指通过引用表2中的字段来约束表1中的字段。 2.有两个表,第一个表创建外键表,因为第一个外键,主键可以被引用。

    651c890dc62a40508c46b890d95dfe35.png

    在oracle数据库中怎样创建主外键关系

    在oracle 的sqlplus 中写什么sql语句。 例如student表中的stuId和 score主外键需要依托多表来创建,方法如下: 创建主表: CREATE TABLE SCOTT.DEPT (DEPTNO NUMBER(2,0) PARIMARY KEY, DNAME VARCHAR2(14), LOC VARCHAR2(13));创建副表及外键: CREATE TABLE EMP (EMPNO NUMBER(4,0) PRIMARY KEY, ENAME VARCHAR2(10

    USE KUCUN GO CREATE TABLE mh_User ( ID int primary key not null , -以具有 DBA 权限的用户身份连接到数据库,执行 ALTER TABLE 语句,将表定义更新为包括外键定义。创建一个名为 Skills 的表,其中包含潜在技能列表,然后创建一个与 Skills 表具有外键关系、名为 EmployeeSkills 的表。

    数据库建表时一定要设置外键约束关系吗

    不一定。 外键约束毕竟是一个约束,只是保证数据完整性的一个手段。 数据库系统本身约束手段是更可靠的。 对于开发来说,可能觉得建立外键关系没必要,但是到了以后维护阶段,或升级阶段,如果没有这个关系,可能不利维护工作的提升。

    数据库里面不建立主外键关系有什么好处?

    不建议建立,使用外键有利于维持数据完整性和一致性,但是对于开发来说是非常不利的。 每次做DELETE 或者UPDATE都必须考虑外键约束,会导致开发的时候很痛苦,而且需要更为复杂的错误捕获机制。 做数据处理时会受到很多的束缚。

    数据库表中的主键和外键如何关联?

    它们都是关系数据库表设计的约束方式而已,为了保证数据库中不会出现脏数据的限制方法。 主键是数据库表的唯一索引序列,可以由多个字段组成,但每条数据的这几个字段的组合必须唯一;主键约束仅涉及本表数据; 外键是本表中该外键字段的取值要

    数据库一对多怎么建立,还有主外键的区别

    CSS布局HTML小编今天和大家分享指导,加QQ:804373565,望共同学习,万分感谢

    一对多:一个表的唯一健对应另一个表的某个字段 并且这个字段不是唯一的 这就是一对多 主键:唯一健 没的说 插入的值必须唯一 外键:简单地说 你对有外键的表操作的时候要满足外键的约束条件;不然不会让你操作 外键是属于约束的一种。

    在数据库中的外键与主键的关系是什么?为什么要设

    外键的概念:外键是关系数据库三个完整性的五个约束条件之一,是表与表之间建立的一种关系。在Oracle数据库的scott/tiger用户中,表Dept和Emp通过外键进行了关联。在这里Dept表叫主表,Emp表叫从表,外键是字段Deptno。

    不建立主外键的好处就是数据可以随意写入或删除,但这样的同时会造成数据容易出现错误。可举例说明: 如 主表 aid name 1 张三 2 李四 副表 id aid money 1 1 100 2 1 40 3 2 50 如上图,是有主外键的情况,其中副表的aid是主叫aid的外键。

    数据库中的外键是什么意思?

    请问数据库中的外键是什么意思?设置了外键有什么用~请举例详细说明 啦

    设表t1,t2中都有一个name字段,而且是t1的主键 那么如果设t2中的name为外键的话 向t2中添加数据的时候,如果name值不在t1之中就会报错

    展开全文
  • SQL_删除外键关系

    千次阅读 2018-04-28 10:18:54
    SQL_删除外键关系然后保存一下

    SQL_删除外键关系




    然后保存一下

    展开全文
  • Access中如何建立外键关系,首先建立Course表,Student表,和SC表,建立和删除数据表关系。
  • hibernate一对一外键关系,很适合入门者学习.
  • 主要介绍了django有外键关系的两张表如何相互查找,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • PowerDesigner中配置外键关系时,如果要删除配置的外键关系,默认设置会一同删除外键列. 要更改此设置,需在菜单栏tools中打开Model Options,在Model Settings中点击Reference, 然后把"Auto-migrate columns"这个...
  • EFCore中如何移除主外键关系 场景介绍 主外键关系的问题 解决思路 禁止级联关系的生成 MicroFX.EntityFrameworkCore.RemoveForeignKey扩展 EFCore中如何移除主外键关系 场景介绍 ...
  • PowerDesigner中配置外键关系时,如果要删除配置的外键关系,默认设置会一同删除外键列. 要更改此设置,需在菜单栏tools中打开Model Options,在Model Settings中点击Reference, 然后把"Auto-migrate columns"这个chec.....
  • PowerDesigner中配置外键关系时,如果要删除配置的外键关系,默认设置会一同删除外键列. 要更改此设置,需在菜单栏tools中打开Model Options,在Model Settings中点击Reference, 然后把"Auto-migrate columns"这个...
  • PowerDesigner中配置外键关系时,如果要删除配置的外键关系,默认设置会一同删除外键列.要更改此设置,需在菜单栏tools中打开Model Options,在Model Settings中点击Reference,然后把"Auto-migrate columns"[自动移除列]...
  • 数据库主从表关系,主外键关系

    千次阅读 2017-07-24 11:47:38
    主、外键关系和作用(转) 从数据库是主数据库的备份,当主数据库变化时从数据库要更新,这些数据库软件可以设计更新周期。这是提高信息安全的手段。主从数据库服务器不在一个地理位置上,当发生意外时数据库可以...
  • Django之ModelForm处理外键关系数据

    千次阅读 2017-12-28 19:09:06
    ModelForm对我们来说确实很方便,但是有个问题就是当调用form.save()时外键关系数据会报非空约束,如何处理这种外键关系数据呢? form.instance.外键_id = obj_id 这样再调用save()会保存数据成功!
  • 外键关系

    2011-07-25 14:59:05
    --建立主外键关系 EL_PickListTable中的RecId --做EL_PickListLine中的外键 别名PickListTableRecId --on update cascade on delete cascade 级联删除、更新,当主键表中 --有相关变动的时候
  • MySQL外键与外键关系说明(简单易懂)MySQL主键和外键使用及说明一、外键约束 MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说...
  • PowerDesigner删除外键关系,而不删除外键列[转] 数据库 database -> generate database ->format 设置为utf-8 PowerDesigner中配置外键关系时,如果要删除配置的外键关系,默认设置会一同删除外键列. 要...
  • 如何查看MySQL数据库主外键关系

    千次阅读 2019-08-23 16:45:51
    查看所有的主外键关系,例如有一张表为:role,输入以下命令 SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME='role'
  • 根据主外键关系递归生成drop语句,请在plsql developer中执行
  • 需要建立主外键关系的两个表的存储引擎必须是InnoDB。 外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型。 外键列和参照列必须创建索引,如果外键列不存在索引,mysql将自动创建索引。 一、SQL...
  • 设置自增---&...在物理模型图中打开工具选项卡,选择model-options,选择reference,把auto-migrate columns复选框取消选中就可以了,删除完外键关系,你会发现外键列并没有删除,但是还有一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,620
精华内容 5,448
关键字:

外键关系