外键

MySQL表的约束及外键的添加

时光总嘲笑我的痴心妄想 提交于 2019-11-27 18:51:32
添加表约束 add constraint 约束名 约束类型与条件, constraint 约束名 约束类型与条件; 添加表外键约束 在MySQL中,InnoDB表支持外键约束的检查。在连接两个表的时候并不需要外键约束。 查看系统支持的存储引擎 : show engines; 查看表使用的存储引擎: show table status from db_name where name='table_name'; #or show create table table_name; 修改表存储引擎: alter table table_name engine=innodb; 不支持InnoDB,可以将相应列设置为外键: create table shirt( owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id), ..., ); 上述语句并没有实际外键作用,如更新数据不符合外键只给出提醒。 此时,用SHOW CREATE TABLE 或 DESCRIBE 均看不到REFERENCES子句。 对于InnoDB表,则能添加外键约束: alter table shirt add constraint sht_fk foreign key(owner) REFERENCES person(id); #给表shirt的owner列添加外键约束

MySQL外键设置中的的 Cascade、Restrict、SET NULL 、NO ACTION

廉价感情. 提交于 2019-11-27 18:50:34
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCADE] <1> . cascade方式 在父表上update/delete记录时,同步update/delete掉子表的匹配记录 <2> . Restrict方式 同no action, 都是立即检查外键约束 <3> . set null方式 在父表上update/delete记录时,将子表上匹配记录的列设为null 要注意子表的外键列不能为not null <4> . No action方式 如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作 <5> . Set default方式 父表有变更时,子表将外键列设置成一个默认的值 但Innodb不能识别 来源: CSDN 作者: weixin_33881050 链接: https://blog.csdn.net/weixin_33881050/article/details/85773449

mysql之外键约束

大兔子大兔子 提交于 2019-11-27 18:47:58
添加外键约束语法: ALTER+空格+TABLE+表明+ADD+CONSTRAINT+外键名+FOREIGN +KEY(外键字段)+空格+REFERENCES+表明(主键); 测试表1: CREATE TABLE `test1` ( `id` INT ( 11 ) NOT NULL AUTO_INCREMENT , `name` VARBINARY ( 50 ) DEFAULT NULL , PRIMARY KEY ( `id` ) ) ENGINE = INNODB DEFAULT CHARSET = utf8 测试表2: CREATE TABLE `test2` ( `id` INT ( 11 ) NOT NULL AUTO_INCREMENT , `name` VARCHAR ( 50 ) DEFAULT NULL , `tid` INT ( 45 ) DEFAULT NULL , PRIMARY KEY ( `id` ) , ) ENGINE = INNODB DEFAULT CHARSET = utf8 执行关联语句: ALTER TABLE test2 ADD CONSTRAINT tid FOREIGN KEY ( id ) REFERENCES test1 ( id ) ; 来源: CSDN 作者: wangxuejava 链接: https://blog.csdn

Mysql外键约束

做~自己de王妃 提交于 2019-11-27 18:47:43
Mysql中的外键只有innodb存储引擎类型的表支持。 外键的作用是数据库表与表之前通过外键分为主从表,当主表的数据发生变化外键对应的从表也相应的改变,来保证数据的完整性和一致性。 外键的使用会对数据库服务器的性能有影响,要根据开发的场景来选择外键约束。 外键的添加: ALTER TABLEtbl_name ADD[CONSTRAINT 外键名] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE{CASCADE | SET NULL | NO ACTION | RESTRICT}] [ON UPDATE{CASCADE | SET NULL | NO ACTION | RESTRICT}] on delete,update时对应的4中约束类型 cascade:从表的字段值会被更新或者列被删除 setnull:主表的外键关联字段更新或删除时从表的外键列设置为null noaction:外键约束时不进行任何操作 restrict:外键约束时不进行任何操作 来源: CSDN 作者: guxinkai 链接: https://blog.csdn.net/gukunkun/article/details/53214163

ORM操作中管理对象的获取及使用

回眸只為那壹抹淺笑 提交于 2019-11-27 16:22:01
我们在使用ORM来操作有外键和多对多关系的数据库时,免不了用到管理对象,但管理对象的获取很容易混淆,特此来记录一下 以下是我们要用到的models class Publisher ( models . Model ) : pid = models . AutoField ( primary_key = True ) #主键 name = models . CharField ( max_length = 32 , unique = True ) #出版社名称 def __str__ ( self ) : return self . name class Book ( models . Model ) : id = models . AutoField ( primary_key = True ) #主键 title = models . CharField ( max_length = 32 , unique = True ) #书籍的名称 publisher = models . ForeignKey ( "Publisher" , on_delete = models . CASCADE , related_name = "books" ) #外键 def __str__ ( self ) : return "object:{}-{}>" . format ( self .

day83-drf

最后都变了- 提交于 2019-11-27 11:28:55
基表的作用(继承) class BaseModel(models.Model): create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) is_delete = models.BooleanField(verbose_name='是否删除', default=False) class Meta: abstract = True # 有该属性的Model类不会完成数据库迁移产生一张表 class Publish(BaseModel): name = models.CharField(verbose_name='出版社名', max_length=32) address = models.CharField(verbose_name='地址', max_length=64) phone = models.CharField(verbose_name='电话', max_length=32) 配置media静态文件(图片路径) settings.py: MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') models.py: class Author(BaseModel): name = models

十一 .Django 多对多表ManyToManyField (ORM)

烂漫一生 提交于 2019-11-27 11:10:47
一. 多对多表ManyToManyField (ORM) 1.创建orm表 多对多手动创建第三张关系表联 # 表一 class User(models.Model): username=models.CharField(max_length=24,db_index=True) def __str__(self): return self.username # 表二 class Tag(models.Model): title=models.CharField(max_length=24) def __str__(self): return self.title # 自定义第三张表 class UserToTag(models.Model): u=models.ForeignKey(to="User") t=models.ForeignKey(to="Tag") ctime=models.DateField() 多对多手动创建第三张关系表联合唯一# 表一 class User(models.Model): username=models.CharField(max_length=24,db_index=True) def __str__(self): return self.username # 表二 class Tag(models.Model): title=models

flask 杂记2

一笑奈何 提交于 2019-11-27 08:16:39
userlog 把user.id当作外键,则选要在user定义时,需要加上外键关系 class User(db.Model): __tablename__ = "user" __table_args__ = {"useexisting": True} id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(100), unique=True) # 昵称 pwd = db.Column(db.String(100)) # 密码 email = db.Column(db.String(100), unique=True) # 邮箱 phone = db.Column(db.String(11), unique=True) # 电话号码 info = db.Column(db.Text) # 个性简介 face = db.Column(db.String(255), unique=True) # 头像 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 uuid = db.Column(db.String(255), unique=True) # 唯一标志符 userlogs = db

键之间的区别

半世苍凉 提交于 2019-11-27 05:24:17
超键:在关系中能唯一标识元组的属性称为模式的超键。 候选键:如果一个属性集能唯一标识元组,且有不包含多余属性,那么这个属性集称为候选键(候选键是没有多余属性的超键) 。 主键:关系模式中用户正在使用的候选键称主键(primary key)。一般,如不加说明,键是指主键。 外键:在关系模式R中,如果某属性集是其他模式的候选键,那么该属性集对模式R来说就是外键。 全键:在最极端的情况下,一个关系中的所有属性集构成这个关系的 候选键,称为 全键。 假设有如下两个表: 学生(学号,姓名,性别,身份证号,教师编号) 教师(教师编号,姓名,工资) 超键: 由超键的定义可知,学生表中含有学号或者身份证号的任意组合都为此表的超键。如:(学号)、(学号,姓名)、(身份证号,性别)等。 候选键: 候选键属于超键,它是最小的超键,就是说如果再去掉候选键中的任何一个属性它就不再是超键了。学生表中的候选键为:(学号)、(身份证号)。 主键: 主键就是候选键里面的一个,是人为规定的,例如学生表中,我们通常会让“学号”做主键,教师表中让“教师编号”做主键。 外键: 外键比较简单,学生表中的外键就是“教师编号”。外键主要是用来描述两个表的关系。 总结 主键为候选键的子集,候选键为超键的子集,而外键的确定是相对于主键的。 来源: https://blog.csdn.net/weixin_37081112

外键变种

点点圈 提交于 2019-11-27 05:24:11
一对一 create table userinfo1( id int auto_increment primary key, name char(10), gender char(10), email varchar(64))engine=innodb default charset=utf8; create table admin( id int auto_increment primary key, user_id int not null, unique uq_ul (user_id),constraint fk_admin_u1 foreign key (user_id) references userinfo1(id) , password varchar(64) not null)engine=innodb default charset=utf8; 多对多 create table userinfo2( id int auto_increment primary key, name char(10) not null, gender char(10) not null, email varchar(10))engine=innodb default charset=utf8; create table host( id int auto_increment