外键

常见问题

霸气de小男生 提交于 2020-03-04 06:55:45
一.语言 1.推荐一本看过最好的python书籍? 2.谈谈python的装饰器,迭代器,yield,内存管理等? 3.标准库线程安全的队列是哪一个?不安全的是哪一个?logging是线程安全的吗? 4.python适合的场景有哪些?当遇到计算密集型任务怎么办? 5.python高并发解决方案?- 计算密集型,IO密集型任务怎么办 二.操作系统 可以直接认为是linux,毕竟搞后端的多数是和linux打交道。 1.tcp/udp的区别?tcp粘包是怎么回事,如何处理?udp有粘包吗? 2.time_wait是什么情况?出现过多的close_wait可能是什么原因? 3.epoll,select的区别?边缘触发,水平触发区别? 4.Http协议 三.存储 存储可能包含rdbms,nosql以及缓存等,我以mysql,redis举例 mysql相关 1.谈谈mysql字符集和排序规则? 2.varchar与char的区别是什么?大小限制?utf8字符集下varchar最多能存多少个字符 3.primary key和unique的区别? 4.外键有什么用,是否该用外键?外键一定需要索引吗? 5.myisam与innodb的区别?innodb的两阶段锁定协议是什么情况? 6.索引有什么用,大致原理是什么?设计索引有什么注意点? redis相关 1.什么场景用redis

python面试(3)

天大地大妈咪最大 提交于 2020-03-04 06:55:26
一、语言 推荐一本看过最好的python书籍? 拉开话题好扯淡 谈谈python的装饰器,迭代器,yield? 标准库线程安全的队列是哪一个?不安全的是哪一个?logging是线程安全的吗? python适合的场景有哪些?当遇到计算密集型任务怎么办? python高并发解决方案?我希望听到twisted->tornado->gevent,能扯到golang,erlang更好 二、操作系统 可以直接认为是linux,毕竟搞后端的多数是和linux打交道。 tcp/udp的区别?tcp粘包是怎么回事,如何处理?udp有粘包 time_wait是什么情况?出现过多的close_wait可能是什么原因? epoll,select的区别?边缘触发,水平触发区别? 三、存储 存储可能包含rdbms,nosql以及缓存等,我以mysql,redis举例 mysql相关 谈谈mysql字符集和排序规则? varchar与char的区别是什么?大小限制?utf8字符集下varchar最多能存多少个字符 primary key和unique的区别? 外键有什么用,是否该用外键?外键一定需要索引吗? myisam与innodb的区别?innodb的两阶段锁定协议是什么情况? 索引有什么用,大致原理是什么?设计索引有什么注意点? redis相关 什么场景用redis,为什么mysql不适合?

vue day73

人走茶凉 提交于 2020-03-03 07:26:49
目录 一、基表 二、断关联表关系 (一) 为什么要断开关联表关系 (二)断开表关系后的优缺点 (1)优点 (2)缺点 三、外键字段属性补充 (一)related_name (二)on_delete (三)db_constraint 四、子序列化(序列化补充) 一、基表 基表是一种抽象类,专门用来被继承,提供公有字段的,执行迁移命令时自身不会完成数据库迁移 通过在类中定义Meta配置类,再Meta中定义abstract=True来表示这是一个基类 from django.contrib.auth.models import User class BaseModel(models.Model): is_delete = models.BooleanField(default=False) created_time = models.DateTimeField(auto_now_add=True) class Meta: # 基表,为抽象表,是专门用来被继承,提供公有字段的,自身不会完成数据库迁移 abstract = True 二、断关联表关系 (一) 为什么要断开关联表关系 在实际开发中,有时候一个项目中的数据表会有很多,有各种外键关联,此时表关系就会很复杂。在进行数据的增删改时会非常繁琐,且后期数据库的重构基本不能实现。因此这时我们就需要断开表关系了。 (二)断开表关系后的优缺点

sql check约束

∥☆過路亽.° 提交于 2020-03-03 05:24:28
一.主键 主键作为表中的唯一标识,标识这一列不允许出现重复数据 如果两列或多列组合起来唯一标识表中的每一行,该主键叫“复合主键” 选择主键的原则 最少性 尽量选择单个键作为主键 稳定性 尽量选择数值更新少的列作为主键 二.默认值 设置列默认值的前提是这一列必须是允许为空的,否则设置默认值无效 如果在插入数据或者更改数据时,这一列不输入的话那么会按照默认值进行绑定 三:标识列 将想要设置的标识列设置成主键,保证这一列的数据类型为int,然后在此列的标识规范改为是,标识种子代表从几开始,标识增量表示每次加几 四:创建主外键 外键表找主键表 注:我们在创建表组织数据时要注意数据的完整性,这是我们创建一个结构良好的数据库的基础,一个结构功能良好的数据库它的数据完整性都比较完善,这样便于以后维护和使用,所以我们在创建表时这点要注意。为什么要使用完整性。我们举个例子来分析什么是完整性。看下面的问题想想我们在创建数据库时如何在表里组织这些信息和数据,记得要符合要求。这时我们就需要数据的完整性构成结构完善的数据库。如何实现数据的完整性。实现数据的完整性主要从域完整性,实体完整性,引用晚自习,自定义完整性这4点出发来看我们的表是否符合完整性。怎样实现实体完整性。我们逐一分析如何使用完整性组织数据,我们是通过约束方法:唯一约束、主键约束、标识列来实现表的实体完整性的。怎样实现域完整性。通过限制数据类型

自己来控制EntityFramework4.1 Code-First,逐步消除EF之怪异现象

泪湿孤枕 提交于 2020-03-02 10:35:03
最近的项目开始使用EF4.1,拜读各路大侠文章数遍,满以为可以轻车熟路,却屡遭悲惨啊,怪异现象接连... 1, 虽然使用Code-First模式,就是因为它代码整洁清爽条理,但还是习惯先建立数据表,再POCO... 结果发现Entity实体类与数据表的映射是EF自己独特智能操控的,比如实体类名为Product,它会智能映射成Products的表,加了个"s",然而,Category的实体类却映射成了Categories, 它居然能识别单词的复数写法,很神奇,难道它内置词典?要不然它该映射成Categorys才合理嘛(虽然它不是个单词),你说EF神奇么,真神奇! 后来,同事给个方法,解决了这个神奇的功能,我要自控,有些关键地方不需要EF来控制我的想法,于是在分类名上面添加一个特性[Table("映射的表名")]即可。 [Table("Product")] public class Product { public int ID { get; set; } [Required] [Display(Name = "产品名")] public string Name { get; set; } public int CategoryID { get; set; } [Required] [Display(Name = "产品价格")] public Decimal? Price { get

MyISAM和InnoDB区别 及选择

牧云@^-^@ 提交于 2020-03-01 16:40:06
MySQL默认采用的是MyISAM。 MyISAM不支持事务,而InnoDB支持。InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所以最好是把多条SQL语句显示放在begin和commit之间,组成一个事务去提交。 InnoDB支持数据行锁定,MyISAM不支持行锁定,只支持锁定整个表。即 MyISAM同一个表上的读锁和写锁是互斥的,MyISAM并发读写时如果等待队列中既有读请求又有写请求,默认写请求的优先级高,即使读请求先到,所以 MyISAM不适合于有大量查询和修改并存的情况,那样查询进程会长时间阻塞。因为MyISAM是锁表,所以某项读操作比较耗时会使其他写进程饿死。 InnoDB支持外键,MyISAM不支持。 InnoDB的主键范围更大,最大是MyISAM的2倍。 InnoDB不支持全文索引,而MyISAM支持。全文索引是指对char、 varchar和text中的每个词(停用词除外)建立倒排序索引。MyISAM的全文索引其实没啥用,因为它不支持中文分词,必须由使用者分词后加入空 格再写到数据表里,而且少于4个汉字的词会和停用词一样被忽略掉。 MyISAM支持GIS数据,InnoDB不支持。即MyISAM支持以下空间数据对象:Point,Line,Polygon,Surface等。 没有where的count(

Hibernate4实战 之 第四部分:关系映射

血红的双手。 提交于 2020-03-01 15:13:34
数据表之间的关系分为三类:一对一、一对多、多对多 一对一数据表(部门表 和 部门主管表) 一对多数据表(部门表 和 部门下的人员表) 多对多数据表(部门表 和 人员表) 根据相互寻找的关系又分:单向和双向 对象一对一 (双向 ) java代码: public class A { private B b = null; } public class B { private A a = null; } n对象一对多 (双向) public class A { private B b = null; } public class B { private Collection<A> colA = null; } n对象多对多 (双向) public class A { private Collection<B> colB = null; } public class B { private Collection<A> colA = null; } 双向一对多是最常用的映射关系 <key>元素 <key> 元素在父映射元素定义了对新表的连接,并且在被连接表中定义了一个外键引用原表的主键的情况下经常使用。 java代码: <key column="columnname"(1) on-delete="noaction|cascade"(2) property-ref="propertyName"

MySQL(2)操作数据库及表

拈花ヽ惹草 提交于 2020-03-01 13:24:40
数据库 1.创建数据库 创建:CREATE DATABASE 数据库名; 显示数据库:SHOW DATABASES; 2.删除数据库 删除数据库会删除该数据库中所有的表和所有数据。 删除:DROP DATABASE 数据库名; 表 1.创建表 在创建表前,首先要使用USE语句选择数据库。如果没有选择数据库,创建表时会出现错误。 完整性约束条件: 约束条件 说明 PRIMARY KEY 标识该属性为该表的主键,可以唯一的标识对应的元组 POREIGN KEY 标识该属性为该表的外键,是与之联系某表的主键 NOT NULL 标识该属性不能为空 UNIQUE 标识该属性的值是唯一的 AUTO_INCREMENT 标识该属性的值是自动增加,这是MySQL的语句的特色 DEFAULT 为该属性设置默认值 查看数据库里有哪些表:show tables; 查看表的基本结构:DESCRIBE 表名; 可以缩写为DESC 表名; 查看单个表的详细结构:show create table 表名; 2.修改表 修改表名:ALTER TABLE 旧表名 RENAME TO 新表名; TO可省略 修改字段的数据结构:ALTER TABLE 表名 MODIFY 属性名 数据类型; 修改字段名:ALTER TABLE 表名 CHANGE 旧属性名 新属性名 新数据类型; 只修改字段名,例:ALTER TABLE

ef core 随记

我只是一个虾纸丫 提交于 2020-03-01 12:11:39
EntityTypeConfiguration internal class OrderEntityTypeConfiguration : IEntityTypeConfiguration<Order> { public void Configure(EntityTypeBuilder<Order> builder) { builder.ToTable("Orders", OrderingContext.DEFAULT_SCHEMA);//表名 builder.HasKey(s => s.Id);//主键 builder.Property(s => s.Id).ForSqlServerUseSequenceHiLo("ordersqu", OrderingContext.DEFAULT_SCHEMA);//主键自增规则 builder.OwnsOne(s => s.Address);//一对一关系 builder.Property<DateTime>("OrderDate").IsRequired(); builder.Property<int?>("BuyerId").IsRequired(false); builder.Property<int>("OrderStatusId").IsRequired(); builder.Property<int?>(

循环删除外键约束

允我心安 提交于 2020-03-01 08:13:41
SQL删除,有外键约束常常不能删除,需要先删除外键 --/***********PowerBy:rovedog ***************/ --/第1步**********删除所有表的外键约束*************************/ DECLARE c1 CURSOR FOR SELECT 'alter table ['+ object_name(parent_obj) + '] drop constraint ['+name+']; ' FROM sysobjects WHERE xtype = 'F' OPEN c1 DECLARE @c1 varchar(8000) FETCH NEXT FROM c1 INTO @c1 WHILE (@@fetch_status=0) BEGIN EXEC (@c1) FETCH NEXT FROM c1 INTO @c1 END CLOSE c1 DEALLOCATE c1 --/第2步**********删除所有表*************************/ DECLARE @sql varchar(8000) WHILE (select count(*) FROM sysobjects WHERE type='U')>0 BEGIN SELECT @sql='drop table [' + name+']'