MySQL 插入数据 数据重复 从另一个表导入数据

当使用MySQL插入数据时,我们可以根据需求选择合适的插入语句。

一、方法分类

插入语句方法分类

二、具体方法

使用场景 作用 语句 注意
常规插入
忽略字段名
insert into 表名 values (值1, 值2,...,值n) 默认value中的值依次填充所有字,如果出现唯一性冲突,就会抛出异常
按照字段插入
insert into 表名(字段1, 字段2,...,字段n) values (值1, 值2,...,值n) 字段和值一一对应
一次性插入多条数据
insert into 表名(字段1, 字段2,...,字段n) values (值a1, 值a2,...,值an),(值b1, 值b2,...,值bn) 多行之间用逗号隔开,不需要再次写insert into语句
从另一个表导入 导出A表的某些数据插入到B表 insert into 表名B(字段B1, 字段B2,...,字段Bn) select 字段A1, 字段A2,...,字段An from 表名A where [执行条件] 字段A和B可以字段名称不一样,但是数据类型必须一致
插入时数据重复
如果记录存在报错
insert into 表名(字段1, 字段2,...,字段n) values (值1, 值2,...,值n) 如果插入的数据记录存在,报错并捕获异常,不存在则直接新增记录
如果记录存在不插入记录
insert ignore into 表名(字段1, 字段2,...,字段n) values (值1, 值2,...,值n) 如果插入的数据记录存在就保存旧记录忽略新记录,不存在则直接新增记录
不论记录是否存在都要插入记录
replace 表名(字段1, 字段2,...,字段n) values (值1, 值2,...,值n) 如果插入的数据记录存在就先删除再更新,不存在则直接新增记录
如果记录存在更新指定字段
insert into … on duplicate key update 如果插入的数据记录存在就更新指定字段,不存在则直接新增记录

三、实例

students 表 (id表示主键,name是姓名,score是平均成绩)

id name score
1 李明 67

(1)常规插入

  • 忽略字段名
insert into 
	students 
values(null, '张三', '74');

执行后结果

id name score
1 李明 67
2 张三 74
  • 按照字段插入
insert into 
	students(name) 
values('孙华');

执行后结果

id name score
1 李明 67
2 张三 74
3 孙华
  • 一次性插入多条数据
insert into 
	students(name, score) 
values('刘平', '56'),('周雨', '90');

执行后结果

id name score
1 李明 67
2 张三 74
3 孙华
4 刘平 56
5 周雨 90

(2)从另一个表导入

students 表 (id表示主键,name是姓名,score是平均成绩)

id user_name mobile_phone_number
1 马化腾 13800000000
2 任正非 13800000011
3 马云 13800000022
  • 导出users表的某些数据插入到students表
insert into 
	students(name,score) 
select 
	user_name,
	mobile_phone_number 
from users where id <> 3;

执行结果

id name score
1 李明 67
2 张三 74
3 孙华
4 刘平 56
5 周雨 90
6 马化腾 13800000000
7 马云 13800000022

注意:只要对应字段的类型一样,字段不一样也可以导入数据,不会冲突。

(3)插入时数据重复

  • 如果记录存在报错
insert into 
	students 
values(1, '张三', '74');

执行结果: 报错

Duplicate entry '1' for key 'PRIMARY'
  • 如果记录存在不插入记录
insert ignore into 
	students(id,name,score) 
values(1, '张三', '74');

执行结果:不插入不报错

Affected rows:0
id name score
1 李明 67
2 张三 74
3 孙华
4 刘平 56
5 周雨 90
6 马化腾 13800000000
7 马云 13800000022
  • 不论记录是否存在都要插入记录
replace 
	students
values(1, '张三', '74');

执行结果

id name score
1 张三 74
2 张三 74
3 孙华
4 刘平 56
5 周雨 90
6 马化腾 13800000000
7 马云 13800000022
  • 如果记录存在更新指定字段
insert into 
	students(id)
values(1) on duplicate key 
update 
	name = '李明',
	score = '67';

执行结果

id name score
1 李明 67
2 张三 74
3 孙华
4 刘平 56
5 周雨 90
6 马化腾 13800000000
7 马云 13800000022

创建 students 表的代码

-- ----------------------------
-- Table structure for students
-- ----------------------------
DROP TABLE IF EXISTS `students`;
CREATE TABLE `students`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `score` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '成绩',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of students
-- ----------------------------
INSERT INTO `students` VALUES (1, '李明', '67');

创建 users 表的代码

-- ----------------------------
-- Table structure for students
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
  `mobile_phone_number` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号码',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of students
-- ----------------------------
INSERT INTO `users` VALUES (1, '马化腾', '13800000000');
INSERT INTO `users` VALUES (2, '任正非', '13800000011');
INSERT INTO `users` VALUES (3, '马云', '13800000022');

四、注意事项

(1)不写字段名,需要填充自增ID
  • [使用]:0或者null或者default,自增id默认从1开始。
  • [使用]:或者没有在自增id中出现的(不重复)数(例如-1,-2),浮点型数据例如3.4,最后显示3,会进行四舍五入。即使定义了int类型,输入‘3’或者浮点型,都会强制转化为int类型,但是输入'a'会报错。具体细节可以看源码。

问题:第一个字段id为什么可以写null?
如果建表的时候写了id为自增id,而写0或者null或者default或者没有在自增id中出现的(不重复)数(例如-1,-2),系统都会自动填充id。如果建表的时候没有写明是自增id,那么主键一定是不能为空的,这个时候写null就会报错。

(2)按字段名填充,可以不录入id
  • [注意]:字段要与值一一对应。
其余注意事项:
  • 字段名可以省略,默认所有列;
  • 录入值的类型和字段的类型要一致或兼容;
  • 字段和值的个数必须一致。不能出现一行记录5个值,另外一行6个值的情况;
  • 如果写了字段,即使是空值也不能空着,用null代替;
本文转载于网络 如有侵权请联系删除

相关文章

  • 我,一位数据科学家,用亲身经历告诉你:为啥数据科学家都在离职

    大数据文摘出品 来源:medium编译:Fisher本文的作者就是一位数据科学家,做了这么久,他觉得有必要将这个行业的苦恼公之于众,为那些想进入这个行业的人们做个参考。话不多说,来和文摘菌一起看看吧~是的,我是一名数据科学家,你也没看错标题,总得有人来说这件事。我们都读过很多文章,说数据科学是21世纪“最性感”的工作,数据科学家可以赚得盆满钵满,以至于数据科学看起来是完全梦幻般的美妙工作。考虑到这个领域里有大量高技术人才在沉迷于解决复杂的问题,这份工作值得热爱。但事实是,数据科学家们通常“每周花1-2个小时寻找新工作”,这是《金融时报》的一篇文章中提到的。此外,这篇文章还指出,“表示自己正在寻找新工作的开发者中,机器学习专家位居榜首,占14.3%。数据科学家紧随其后,占13.2%。”这些数据是StackOverflow在一次基于64000名开发者的调查中得到的。我也曾处于这个状态,我自己最近也换了另一份数据科学的工作。那么,为什么这么多的数据科学家要找新工作呢?在我回答这个问题之前,我应该澄清一下,我现在仍然是数据科学家。总体上,我热爱这份工作,我也不想劝退那些有志成为数据科学家的人,

  • 统筹方法

    统筹方法,是一种为生产建设服务的数学方法。它的实用范围极为广泛,在国防、在工业的生产管理中和关系复杂的科研项目的组织与管理中,皆可应用。比如,想泡壶茶喝。当时的情况是:开水没有。开水壶要洗,茶壶茶杯要洗;火已升了,茶叶也有了。怎么办?办法甲:洗好开水壶,灌上凉水,放在火上;在等待水开的时候,洗茶壶、洗茶杯、拿茶叶;等水开了,泡茶喝。办法乙:先做好一些准备工作,洗开水壶,洗壶杯,拿茶叶;一切就绪,灌水烧水;坐待水开了,泡茶喝。办法丙:洗净开水壶,灌上凉水,放在火上;坐待水开,开了之后急急忙忙找茶叶,洗壶杯,泡茶喝。哪一种办法省时间?谁都能一眼看出,第一种办法好,因为后二种办法都“窝了工”。这是小事,但这是引子,引出一项生产管理等方面有用的方法来。开水壶不洗,不能烧开水,因而洗开水壶是烧开水的先决问题,没开水、没茶叶、不洗壶杯,我们不能泡茶。因而这些又是泡茶的先决问题。它们的相互关系,可以用以下的箭头图来表示:从这个图上可以一眼看出,办法甲总共要16分钟(而办法乙、丙需要20分钟)。如果要缩短工时、提高工作效率,主要抓的是烧开水这一环节,而不是拿茶叶这一环节。同时,洗壶杯、拿茶叶总共不过4

  • 使用 sroll-snap-type 优化滚动

    根据 CSSScrollSnapModuleLevel1 规范,CSS新增了一批能够控制滚动的属性,让滚动能够在仅仅通过CSS的控制下,得到许多原本需要JS脚本介入才能实现的美好交互。Tips:本文截的一些Gif图涉及容器滚动,效果不是很好,可以点进Demo里实际感受下。 sroll-snap-type首先看看 sroll-snap-type 可能算得上是新的滚动规范里面最核心的一个属性样式。scroll-snap-type:属性定义在滚动容器中的一个临时点(snappoint)如何被严格的执行。光看定义有点难理解,简单而言,这个属性规定了一个容器是否对内部滚动动作进行捕捉,并且规定了如何去处理滚动结束状态。语法{ scroll-snap-type:none|[x|y|block|inline|both][mandatory|proximity]? }复制举个例子,假设,我们希望一个横向可滚动容器,每次滚动之后,子元素最终的停留位置不是尴尬的被分割,而是完整的呈现在容器内,可以这样写:<ul> <li>1</li> <li>2</l

  • “聚沙成塔”——用大数据思维理解生命的复杂体系,数据之眼看显微镜下的复杂生命【数据故事计划二等奖】

    摘要:细听学长学姐讲故事,或许在他们的路上也有你的身影!【第一届数据故事计划】“数据故事计划”旨在收集各类有关大数据的故事然后进行比赛及相关的宣传和推广。包括同学们接触大数据、使用大数据、最终取得成果的过程,主要内容为大数据在各类行业的应用以及个人感悟。希望以此活动使得更多同学认识大数据,学会利用大数据解决问题,最终实现向“数据ers”的转变。人物介绍 赵瀚森,本数据故事团队队长,喜欢用计算和模拟的角度考虑科学问题的博士生。虽然还在科研的道路上艰苦磨砺,但已经开始从思考和尝试中体会到了探索的乐趣。希望能通过检测数据和模拟计算帮助人们理解和预测复杂的生命现象。故事介绍1.“不务正业”的理学生本科阶段的我就是一个有些特别的学生。由于有高中化学竞赛的底子,所以在专业课学习上比较轻松。因此,很多的业余时间都被我投入到了各种不同的活动和兴趣爱好中。当时最为痴迷的事情莫过于游戏开发了。游戏开发最吸引我的地方在于它绝佳的自由度,只要你的技术足够好,就能在计算机里面创造和分享你心目中的世界。因此,游戏开发不仅仅是我的一项爱好,也将成为我与世界交流的桥梁。为了做好游戏开发,我学过很多技术,包括建模/动画

  • 数据库分库分表思路

    一.数据切分关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。数据库分布式核心内容无非就是数据切分(Sharding),以及切分后对数据的定位、整合。数据切分就是将数据分散存储到多个数据库中,使得单一数据库中的数据量变小,通过扩充主机的数量缓解单一数据库的性能问题,从而达到提升数据库操作性能的目的。数据切分根据其切分类型,可以分为两种方式:垂直(纵向)切分和水平(横向)切分1、垂直(纵向)切分垂直切分常见有垂直分库和垂直分表两种。垂直分库就是根据业务耦合性,将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似,按业务分类进行独立划分。与"微服务治理"的做法相似,每个微服务使用单独的一个数据库。如图:垂直分表是基于数据库中的"列"进行,某个表字段较多,可以新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中

  • 没见过车床的 IT 码农,他仅耗时三个月就DIY了一台

    编者注:本文转载自创客包一磊在知乎问题“一个人可以DIY出什么有意思的东西?”下的高分回答。在本文章中,作者将带领我们一起从0开始打造一台车床!注:本文已授权,著作权归作者所有,商业转载请联系作者获得授权。作为一个IT码农,本人迄今干的最装逼的事就是花了近三个月的时间DIY了一台车床。因为第一目标是装逼,所以就决定了这是一件逼格高于实用价值的作品。首先我集中解答一下大家比较感兴趣的问题:总物料成本4000,加上特为此次DIY购买的台钻等工具的话就奔5000去了,算经济账的话肯定是不划算的。DIY玩的就是折腾,如果只是为了要个车床我才不会徒手去锯铝板,那活谁干谁知道。车床精度,主轴工件的跳动在10-15丝之间。不算好啦,不过玩玩木头肯定足够了。金属就不想了。车床的选材和设计肯定是存在诸多不合理之处的,谢谢机械大咖们的指正,我毕竟是个机械门外汉。做车床可不是为了撸手串,虽然目前我只撸了手串,主要是因为被讨串的朋友和亲戚们绑架了。关于采购清单,有需要的并且还没收到我私信的朋友们,可以直接私信问我要,主要是评论太多,哪些人发过那些没发过我搞不清楚了。至于图纸,我只有那份及其不专业的RoomAr

  • cordova学习五 真机调试

        我说的cordova真机调试不是通过手机浏览器在访问,在电脑上调试,而是实实在在的一个apk,主要要求连接手机,还有sdk环境5.1sdk环境        Sdk环境安装会存在很多问题,不可能将问题一一记录,只记录了自己开发的时候遇到的一些问题5.1.1下载sdk        Sdk名字类似于android-sdk_r24.4.1-windows.zip,可以在官网下载,也可以在别处寻找资源        值得注意的是下载后需要配置相应的环境有两个path,个人理解为启动路径和安装路径,启动路径就是要让cmd能够找到android.bat来启动,安装路径就是在启动android.bat后安装的一系列文件存放的路径。        基本配置新增ADT_HOME==》F:\android-sdk-windows        启动路径path添加%ADT_HOME%\tools        安装路径path添加%ADT_HOME%\platform-tools5.1.2sdk结构目录        安装之前首先得对sdk目录架构介绍,这些都是完全百度自己也不够了解Androi

  • 沟通管理·会议管理

    本文节选自电子书《NetkillerManagement手札》 3.4.3.会议管理3.4.3.1.会议的时间成本会议不仅占用管理层的时间,更占用员工的时间,所以要严控会议用时。开会就要有解决方案,成熟的方案,否则不要开会,开了没有意义,浪费时间。3.4.3.2.三个臭皮匠,还是臭皮匠三个臭皮匠,还是臭皮匠,永远不会成为诸葛亮,如果三个臭皮匠能成为诸葛亮,就不会出现三足鼎立的情况,集思广益纯属扯淡。大部分的会议就浪费在听取广大群众的发言。通常我们看到的会议就是针对XXXXX问题你们看看怎么做,你们大家商量一下,然后你一言,我一嘴,各个提建议,到头什么都没有解决,一份会议记录发给所有人,几乎没有人看。提意见都很踊跃,具体到谁负责都开始低头,会议内容落实5%不到。3.4.3.3.下一个饭局会议出现交叉,追尾,就是如同赶饭局。多任务处理和预约冲突使会议效率变低,公司不得不安排更多会议完成工作。3.4.3.4.会议必须有结论会开了,问题仍然没有解决,这种议而不决非常普遍。会议不能议而不决,会议的目的是针对方案细节依次敲定,然后进入到Ticket对应具体负责人。3.4.3.5.会议记录我从来不看

  • Android | Handler.runWithScissors 解析

    前言看WMS代码的时候看到了Handler.runWithScissors方法,所以来恶补一下publicstaticWindowManagerServicemain(finalContextcontext,finalInputManagerServiceim,finalbooleanshowBootMsgs,finalbooleanonlyCore,WindowManagerPolicypolicy,ActivityTaskManagerServiceatm,Supplier<SurfaceControl.Transaction>transactionFactory,Supplier<Surface>surfaceFactory, Function<SurfaceSession,SurfaceControl.Builder>surfaceControlFactory){ DisplayThread.getHandler().runWithScissors(()-> sInstance=newWindowManagerService(conte

  • UIView的自适应高度 (图像,文字)

    1-(CGFloat)tableView:(UITableView*)tableViewheightForRowAtIndexPath:(NSIndexPath*)indexPath 2 3{ 4 5//在tableView的协议方法中制定每个cell的高度 6 7 8 9UIImage*image=[self.arrayobjectAtIndex:indexPath.row]; 10 11 12 13//cell的高度=cell的宽度*图片的高度/图片的宽度 14 15CGFloatcellHeight=tableView.bounds.size.width*image.size.height/image.size.width; 16 17returncellHeight; 18 19 20 21} 22 23///////////////////////////////////////////////////////////////// 24 25(文字)自适应高度: 26 27-(void)viewDidLoad 28 29{ 30 31[superviewDidLoad]; 3

  • 【SpringBoot】SpringBoot 配置这一篇文章就够了

    SpringBoot配置文件 一、配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的; application.properties application.yml 配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好; YAML(YAMLAin'tMarkupLanguage) YAMLAMarkupLanguage:是一个标记语言 YAMLisn'tMarkupLanguage:不是一个标记语言; 标记语言: 以前的配置文件;大多都使用的是xxxx.xml文件; YAML:以数据为中心,比json、xml等更适合做配置文件; YAML:配置例子 server: port:8081 复制 xml: <server> <port>8081</port> </server> 复制 二、YAML语法 1、基本语法 k:(空格)v:表示一对键值对(空格必须有); 以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的 server: port:

  • 深入浅出 Java Concurrency (40): 并发总结 part 4 性能与伸缩性[转]

    性能与伸缩性 使用线程的一种说法是为了提高性能。多线程可以使程序充分利用闲置的资源,提高资源的利用率,同时能够并行处理任务,提高系统的响应性。但是很显然,引入线程的同时也引入了系统的复杂性。另外系统的性能并不是总是随着线程数的增加而总是提高。   性能与伸缩性 性能的提升通常意味着可以用更少的资源做更多的事情。这里资源是包括我们常说的CPU周期、内存、网络带宽、磁盘IO、数据库、WEB服务等等。引入多线程可以充分利用多核的优势,充分利用IO阻塞带来的延迟,也可以降低网络开销带来的影响,从而提高单位时间内的响应效率。 为了提高性能,需要有效的利用我们现有的处理资源,同时也要开拓新的可用资源。例如,对于CPU而言,理想状况下希望CPU能够满负荷工作。当然这里满负荷工作是指做有用的事情,而不是无谓的死循环或者等待。受限于CPU的计算能力,如果CPU达到了极限,那么很显然我们充分利用了计算能力。对于IO而言(内存、磁盘、网络等),如果达到了其对于的带宽,这些资源的利用率也就上去了。理想状况下所有资源的能力都被用完了,那么这个系统的性能达到了最大值。 为了衡量系统的性能,有一些指标用于

  • 封装练习

    <?php//作业:设计一个类,包含$a,$b,求和的方法,求乘积的方法,可以有初始值,要求$a和$b要大于零小于100 classYunSuan{ private$a; private$b;  function__construct($a,$b) {  $this->a=$a;  $this->b=$b; } function__set($n,$v) {  if($v>0&&$v<100)  {   $this->$n=$v;  } } function__get($n) {  return$this->$n; } functionHe() {  return$this->a+$this->b; }&

  • Java内存模型

     

  • easyui combobox三级联动,点击第一级第二三级下拉值没有被清空的问题

    最近用到easyui框架,其他都还挺好,就是这个combobox在写省市区三级联动的时候,当初次选择过某省之后,再次进入之后第二三级市,区(上次某省下的市,区)还在那里,没有被清空,找了好久才发现原因。主要原因是:combobox的渲染机制问题,发现它莫名的请求了两次接口。看下图: 附代码:还有最重要的就是需要loadData本地数据为空,直接clear是解决不了问题的。 functionopenSelectAddress(value){//打开地址 varids; if(value){ ids=value.split(','); } varurl=genAPI('settings/district'); //虽说下面市区的url被清空了,但是本地数据相当于缓存一样被记录下来了,所以这里需要全局清空一下(需要说一下,我这边接口提供的返回值是在data下的数组,所以需要data:[],如果接口结构不在data下的话直接清空就可以) $('#city').combobox('loadData',{data:[]}); $('#district').combobox('loadData'

  • 权限01

    ZC:一直感觉,貌似Linux里面可以分配"角色",然后将用户指定相应的"角色"即可拥有相应的权限。后来怎么也查不到,后来想到可能这是Oracle里面的概念,Linux里面没有这个机制,搞混了糊涂了...   1、http://blog.sina.com.cn/s/blog_6fc583e70100n6rm.html linux下如何添加一个用户并且让用户获得root权限  测试环境:CentOS5.5 1、添加用户,首先用adduser命令添加一个普通用户,命令如下:#addusertommy  //添加一个名为tommy的用户#passwdtommy   //修改密码Changingpasswordforusertommy.NewUNIXpassword:     //在这里输入新密码RetypenewUNIXpassword:  //再次输入新密码passwd:allauthenticationtokensupdatedsuccessful

  • 学习笔记TF047:PlayGround、TensorBoard

    PlayGround。http://playground.tensorflow.org。教学目的简单神经网络在线演示、实验图形化平台。可视化神经网络训练过程。在浏览器训练神经网络。界面,数据(DATA)、特征(FEATURES)、神经网络隐藏层(HIDDENLAYERS)、层中连接线、输出(OUTPUT)。 数据。二维平面,蓝色正值,黄色负值。数据形态,圆形、异或、高斯、螺旋。数据配置,调整噪声(noise)大小,改变训练、测试数据比例(ratio),调整入输入每批(batch)数据数量1-30。 特征。特征提取(featureextraction)。每个点有X1、X2两个特征。衍生其他特征,X1X1、X2X2、X1X2、sin(X1)、sin(X2)。X1左边黄色是负,右边蓝色是正,表示横坐标值。X2上边蓝色是正,下边黄色是负,表示纵坐标值。X1X1横坐标抛物线信息。X2X2纵坐标抛物线信息。X1X2双曲抛物面信息。sin(X1)横坐标正弦函数信息。sin(X2)纵坐标正弦函数信息。分类器(classifier)结合特征,画出线,把原始颜色数据分开。 隐藏层。设置隐藏层数量、每个隐藏

  • android studio 3.0 hello world 之 修改系统状态栏颜色

    1建立一个空白的项目 2创建一个空白的线性布局 3设置默认背景色和系统状态栏背景色 4效果  

  • 序列化类型为XX的对象时检测到循环引用

      今天遇到的一个问题,请求一段数据,返回赋值给一个对象以后序列化失败,提示“序列化类型为XX的对象时检测到循环引用”。深入进去查看Model时,发现这个要被序列化的Model里面引用了另外一个Model,另外一个Model又引用了这个Model。   我TM也是无语。事后排查是这两个表有外键关系,使用EF生成Model的时候,就会这样。   这个问题解决起来也不复杂,循环引用的Model是无法序列化的,所以我们换个实体就可以了,你可以手动赋值给自定义的新实体,也可以通过属性映射,自动映射(如AutoMapper)。   PS:外键确实可以保证数据的一致性,但是使用起来非常不便,尤其数据库迁移。数据的一致性通过代码一样可以实现,在使用数据库的时候,应当减少这些互相依赖性的东西,不然开发过程中各种掣肘,浪费时间。     当然如果你是技术大牛,你觉得无所谓就无所谓好了。每个人看法不同,这里只是吐槽。 PS:楼主邮箱tccwpl@163.com

  • 马哥教育Linux面授37期第11周博客作业ansible基本使用教程

    转载请注明出处http://www.cnblogs.com/chenxianpao/p/7360349.html 一、介绍 1.简介   ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。   ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括: (1)、连接插件connectionplugins:负责和被监控端实现通信; (2)、hostinventory:指定操作的主机,是一个配置文件里面定义监控的主机; (3)、各种模块核心模块、command模块、自定义模块; (4)、借助于插件完成记录日志邮件等功能; (5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。   github地址:https://github.com/ansible/ansible/

  • “万法归宗”之C语言

     首先,介绍一下它的版本问题:      1)         1983年美国国家标准局(AmericanNationalStandardsInstitute,简称ANSI)成立了一个委员会,开始制定C语言标准的工作 2)         1989年C语言标准被批准,这个版本的C语言标准通常被称为ANSIC 3)         1999年,国际标准化组织ISO又对C语言标准进行修订,在基本保留原来C语言特征的基础上,针对应该的需要,增加了一些功能,命名为C99 4)         2011年12月8日,ISO正式公布C语言新的国际标准草案:C11   给大家看一个图:      上图反映的是,编程语言活跃度排行。其中

相关推荐

推荐阅读