外键

五:约束

不羁岁月 提交于 2019-11-30 07:16:36
1.约束 为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效。 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性 主要分: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KEY (FK) 标识该字段为该表的外键 NOT NULL 标识该字段不能为空 UNIQUE KEY (UK) 标识该字段的值是唯一的 AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键) DEFAULT 为该字段设置默认值 UNSIGNED 无符号 ZEROFILL 使用0填充 1. 是否允许为空,默认NULL.可设置NOT NULL,字段不允许为空,必须赋值 2. 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值 sex enum('male','female') not null default 'male' age int unsigned NOT NULL default 20 必须为正值(无符号) 不允许为空 默认是20 3. 是否是key 主键 primary key 外键 foreign key 索引 (index

数据库实体、关系(一对一实现方式、一对多实现方式、多对多实现方式)

那年仲夏 提交于 2019-11-30 06:31:51
就数据库而言, 实体 往往指某类事物的集合。 把每一类数据对象的个体称为实体。 数据库中: E-R图 也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。 实体之间的关系有 一对一; 一对多,多对一; 多对多; 数据库中一对一的实现方式: ( 如一个学生对应一个档案,一个档案对应一个学生) (1) 唯一外键方式 :在A和B任意一表中添加唯一外键(注意是添加完外键后,再点唯一键,进行设置) 具体方式点此 。 (2) 主键关联方式 :当A和B的主键相同时,我们就认为是一组数据。(注意是“我们就认为”,数据库中并没有提供主键关联的约束方式。) (3) 中间关系表 :创建一张新表作为中间关系表,两个列分别记录A和B,并且每一列的取值中,值均不能重复(即将这两列均设置为唯一外键,注意:将这两列“既设置为主键,又设置为外键”的方式不能实现该功能,因为可能会出现一列相等而另一列不相等的情况)。 数据库中多对一、一对多的实现方式: (如一个班级对应多个学生) (1) 在多的一方添加外键 :在学生表中添加一列,记录该学生是哪一个班的,该列设置成外键,取值为班级表的主键。 (2) 建立中间表 :创建一个新表,该表至少有两列,分别记录学生和班级。学生列要设置成为“外键+唯一键”,以防有两行数据的学生列的值一样

三:表存储引擎

寵の児 提交于 2019-11-30 06:04:25
一:存储引擎 select * from user 显示的表的内容尽管是这样子, Mysql并不是以上图形式对表进行的存储, 表有表结构,表数据,他们是分开存储的,分别以单独的文件形式存在,还有索引,索引和数据放一起是一种存储方式,还有不和数据放一起的存储方式 默认存储引擎InnoDB,在数据库文件夹可以看到表明.frm文件就是存放的表结构,表明.ibd是innodb-data的意思,innodb存储引擎的数据存放在这个文件里面 Mysql提供的存储方式很多,对于Oracle只有一种. show engines;查看支持的所有存储引擎,InnoDB是默认的存储引擎. mysql5.6支持的存储引擎包括InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。其中NDB和InnoDB提供事务安全表,其他存储引擎都是非事务安全表。 不同的存储引擎对应的就是不同的存储方式. InnoDB支持事务(一致性,原子性,隔离性,),外键,行级锁(并发访问同行数据,加了锁),将数据结构,数据分了两个文件存放 memory是内存数据库,重启消失,已被redis代替 myisam将数据结构,数据,索引分了三个文件存放 MySQL中的数据用各种不同的技术存储在文件(或者内存)中

DJango周总结二:模型层,单表,多表操作,连表操作,数据库操作,事务

こ雲淡風輕ζ 提交于 2019-11-30 05:51:20
django周复习二 1,模型层: 1单表操作: 13个必会操作总结 返回QuerySet对象的方法有 all() filter() exclude() order_by() reverse() distinct() 特殊的QuerySet values() 返回一个可迭代的字典序列 values_list() 返回一个可迭代的元祖序列 返回具体对象的 get() first() last() 返回布尔值的方法有: exists() 返回数字的方法有 count() 增 # 方式1: create # book_obj = models.Book.objects.create(title='三国',price=19.99,create_time='2019-11-11') # print(book_obj.title) # 方式2:对象点save()方法 效率极低,因为每执行一次,相当于从数据库从头到尾执行一遍 # from datetime import datetime # ctime = datetime.now() # book_obj = models.Book(title='西游记',price=96.66,create_time=ctime) # book_obj.save() 查 # print(models.Book.objects.all()) # print

python day56

筅森魡賤 提交于 2019-11-30 04:36:35
今日内容 Django ORM 常用字段和参数 常用字段 AutoField int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。 IntegerField 一个整数类型,范围在 -2147483648 to 2147483647。(一般不用它来存手机号(位数也不够),直接用字符串存,) CharField 字符类型,必须提供max_length参数, max_length表示字符长度。 这里需要知道的是Django中的CharField对应的MySQL数据库中的varchar类型,没有设置对应char类型的字段,但是Django允许我们自定义新的字段,下面我来自定义对应于数据库的char类型 自定义字段在实际项目应用中可能会经常用到,这里需要对他留个印象! from django.db import models ​ # Create your models here. #Django中没有对应的char类型字段,但是我们可以自己创建 class FixCharField(models.Field): ''' 自定义的char类型的字段类 ''' def __init__(self,max_length,*args,**kwargs): self.max_length=max_length super()._

select_related prefetch_related

岁酱吖の 提交于 2019-11-30 04:23:55
# select_related与prefetch_related# # select_related帮你直接连表操作 查询数据 括号内只能放外键字段# # res = models.Book.objects.all().select_related('publish')# # for r in res:# # print(r.publish.name)# # res = models.Book.objects.all().select_related('publish__xxx__yyy__ttt')# # print(res)# # res = models.Book.objects.all()# """# select_related:会将括号内外键字段所关联的那张表 直接全部拿过来(可以一次性拿多张表)跟当前表拼接操作# 从而降低你跨表查询 数据库的压力# # 注意select_related括号只能放外键字段(一对一和一对多)# res = models.Book.objects.all().select_related('外键字段1__外键字段2__外键字段3__外键字段4')# """# # prefetch_related 不主动连表# res = models.Book.objects.prefetch_related('publish')# """#

day56 模型层

落爺英雄遲暮 提交于 2019-11-30 04:03:20
字段 字段合 DateField和DateTimeField参数 auto_now_add 配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。 auto_now 配置上auto_now=True,每次更新数据记录的时候会更新该字段。 对应关系   字段参数 null 用于表示某个字段可以为空。 unique 如果设置为unique=True 则该字段在此表中必须是唯一的 。 db_index 如果db_index=True 则代表着为此字段设置索引。 default 为该字段设置默认值。 关系字段 foreignkey 外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。 ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系。   字段参数 to 设置要关联的表 to_field 设置要关联的表的字段 on_delete 当删除关联表中的数据时,当前表与其关联的行的行为。 models.CASCADE 删除关联数据,与之关联也删除 db_constraint 是否在数据库中创建外键约束,默认为True。 (了解) models.DO_NOTHING 删除关联数据,引发错误IntegrityError models.PROTECT 删除关联数据,引发错误ProtectedError

django模型层之多表关系

梦想的初衷 提交于 2019-11-30 03:41:06
一. 多表操作   数据库表关系之关联字段与外键约束   一对多   book(多)   publish(一)   查询<<水浒传>>这本书出版社的地址: select publish_id from Book where title="水浒传" select addr from Publish where id=1   一旦确定了一对多的关系: 建立一对多的关系,在多的一方建立关联字段(publish_id)   多对多:   book   author   book2author:   panshao出版过得书籍名称(子查询) select id from author where name='panshao'; # 在作者表中拿出panshao select book_id from book2author where author_id=1; # 找出作者id等于1的书籍的id select title from book where id=book_id;   一旦确定表关系是多对对: 创建第三张表 id book_id author_id   一对一:   author   authordetail   一旦确定是一对多的关系: 建立一对多的关系=======>在多的表中建立关联字段 (一个出版社可以出版多本书)   一旦确定为多对多的关系: 建立多对多的关系=====

Python Django 模型层02

微笑、不失礼 提交于 2019-11-30 03:33:16
一 模型层常用字段和参数 1.模型表建立常用字段 1. AutoField:int自增主键列。必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列 id = models.AutoField(primary_key=True) 2.CharField:字符串,相当于varchar。必须提供max_length参数,不能超过255。 title = models.CharField(max_length=255) 3.IntegerField:整数类型,范围在 -2147483648 to 2147483647。(一般不用它来存手机号(位数也不够),直接用字符串存,) kucun = models.IntegerField(null=True) # null参数可不填 4.DecimalField:浮点类型。参数1 max_digits表示总共的位数,参数2 decimal_places表示小数的位数 price = models.DecimalField(max_digits=8,decimal_places=2) 5.DateField: create_time = models.DateField() # 不指定auto_now或auto_now_add时,需要自己传参数 关键性的参数: 1.auto_now:每次操作数据