问题场景 先来看个场景: 执行一条插入语句,因为id是主键,没有设置自增,所以在插入的时候我们必须要添加该字段的值,但是上面没有添加就出现了1364的错误提示信息,针对这种情况我们应该怎么处理呢...上图中的 1364是 MySQL_error_code, HY000 是sqlstate_value 错误码 说明 MySQL_error_code 是数值类型错误代码,比如 1364 sqlstate_value...是长度为5的字符串类型错误代码,比如 HY000 案例:定义“Field_Not_Be_NULL”错误名与MySQL中违反非空约束的错误类型是“ERROR 1364 (HY000)”对应。...错误类型 也就是条件:SQLSTATE ‘字符串错误码’ :表示长度为5的sqlstate_value类型的错误代码; MySQL_error_code :匹配数值类型错误代码;错误名称 :表示DECLARE...SQLWARNING :匹配所有以01开头的SQLSTATE错误代码;NOT FOUND :匹配所有以02开头的SQLSTATE错误代码;SQLEXCEPTION :匹配所有没有被SQLWARNING或
但是大部分同学都会选择直接重写语句而不是先考虑如何根据错误信息来修改,其实学会看错误码,能够快速的定位自己的错误,更容易就能解决问题哦 那么,我们现在就介绍一下几种比较常见的错误码吧 常见错误码 1.1007 我们创建一个叫test的数据库的时候,发现创建失败,显示错误代码为...[f051ef0a35a8ff7ac6ed5c04ab87251b.png] [1ad3e288d1c9e9034547deaa4799d2a8.png] 显然,两个非空的字段,插入数据的时候没有设置数据...,也没有默认值,那肯定是会出错,返回的错误码是1364,返回的错误信息是xxx字段没有默认值 解决方法:那么给设置一个默认值,或者给另外一个设置一个自增就可以不需要设置了 那么就给id设置一个自增吧 [...31eed54af82641804864085c9f3df05b.png] 再次运行插入数据,只设置了name这个数据,不设置id,成功了 [6bd4737c4d8fae176a02274b956a4ede.png] 总结:1364...是存在字段没有默认值 4.1054 我们知道这个表的字段是id和name,那我要是插入数据的时候,插入的是不同字段名呢 我插入的字段改成username,运行 [5b34088971982852e1c3813ddf458c5d.png
row in set (0.00 sec) 因为class_id非空,所以插入失败 mysql> insert into student(name) values("tenmao"); ERROR 1364...(HY000): Field 'class_id' doesn't have a default value 使用ignore后插入失败,class_id被设置为int的默认值0 mysql> insert...| +---------+------+-----------------------------------------------+ | Warning | 1364...tenmao | 0 | | 2 | | 1 | +----+--------+----------+ 2 rows in set (0.00 sec) 字段...NOT NULL是为了防止插入时漏掉这个字段,但是使用INSERT IGNORE后,会自动设置一个没有用的默认值,导致系统数据错误。
,如下图所示,学生表有个住址ID字段,是住址表里的记录的唯一ID: 先创建住址表: create table address (addressid int, province string, city...字段关联了address表的addressid字段: create table student (name string, age int, addressid int) row format delimited...; 结果如下,可见name=mary的记录,addressid等于5,在address中不存在addressid等于5的记录,因此province和city字段都展示了NULL,而在前面使用inner...join时,结果中没有这条记录: Total MapReduce CPU Time Spent: 950 msec OK tom 11 1 guangdong guangzhou jerry 12 2...; 结果如下,可见city=nanjing的记录,在student表中没有一条记录与之关联,因此结果中展示了address的字段,而student的字段为NULL: Total MapReduce CPU
,如下图所示,学生表有个住址ID字段,是住址表里的记录的唯一ID: [在这里插入图片描述] 先创建住址表: create table address (addressid int, province string...字段关联了address表的addressid字段: create table student (name string, age int, addressid int) row format delimited...; 结果如下,可见name=mary的记录,addressid等于5,在address中不存在addressid等于5的记录,因此province和city字段都展示了NULL,而在前面使用inner...join时,结果中没有这条记录: Total MapReduce CPU Time Spent: 950 msec OK tom 11 1 guangdong guangzhou jerry...; 结果如下,可见city=nanjing的记录,在student表中没有一条记录与之关联,因此结果中展示了address的字段,而student的字段为NULL: Total MapReduce CPU
从结果来看,建表语句是可以的,但是当我们进行插入的时候,如果不指定id的值: mysql>>insert into index_test1 (name) values ('yeyz'); ERROR 1364...(HY000): Field 'id' doesn't have a default value 不指定默认值,则会进行提醒。...---+------+ 3 rows in set (0.00 sec) 结论: 主键列可以不设置not null和auto_increment选项,但是这种情况下,插入不包含主键列的记录,会提示主键没有默认值...此时,需要单独提供主键的默认值。 如果主键列为int类型,并且包含auto_increment选项,则可以直接插入不包含主键列的记录。 2 主键为多个字段时,是否允许其中一个字段自增?...,没有默认值会报错,如下: mysql >>insert into index_test4 (id) values (7); ERROR 1364 (HY000): Field 'name
水平权限漏洞是指Web应用程序接收到用户请求时,没有判断数据的所属人,或者在判断数据所属人时是从用户提交的参数中获取了userid,导致攻击者可以自行修改userid修改不属于自己的数据。...id=1 如上,攻击者修改addressId即可得到他人的address信息。...修复方案: 1、最正规的方案:把权限的控制转移到数据接口层中,避免出现select/update/delete … where addressID=#addressID#的SQL语句,使用select/...update/delete… where addressID=#addressID# and ownerId=#userId#来代替,要求web层在调用数据接口层的接口时额外提供userid,而这个userid...另外的方法: 1、可对ID加密 2、使用UUID 3、每一个信息增加一个发布人的字段,修改的人必须与发布的人为同一个人才可以访问 垂直权限漏洞是指Web应用没有做权限控制,或仅仅在菜单上做了权限控制,导致恶意用户只要猜到了其他页面的
MySQL建立索引的场景有 对于查询频率高的字段创建索引; 对排序、分组、联合查询频率高的字段创建索引; 如果需要将多个列设置为索引时,可以采用多列索引 选择唯一性索引尽量使用数据量少的索引 索引失效的原因...1.索引列出现函数参数或者表达式 解决方案:事先计算好表达式的值 2.使用左模糊 解决方案:尽量避免 3.使用OR查询的部分字段没有索引 解决方案:or的字段添加索引 4.没加单引号...PersonId 是上表主键 表2: Address +-------------+---------+ | 列名 | 类型 | +-------------+---------+ | AddressId...PersonId | int | | City | varchar | | State | varchar | +-------------+---------+ AddressId
我们通常采用建立关系表的方式来表示这种关系,比如我们创建一张Contact—_Address(ContactID, AddressID)来存储联系人和地址之间的关系。...] [INT] NOT NULL REFERENCES [Address]([AddressID]), 5: PRIMARY KEY([ContactID],[AddressID])...WHERE ContactID = @ContactID 9: AND AddressID = @AddressID 10: END 步骤三、创建实体数据模型 然后我们只需要按照...如果Contact_Address具有额外的字段,在建立模型的时候仍然被认作是实体表。 ?...很遗憾,这项工作没有得到EF设计器可视化的支持,我们不得不通过手工修改.edmx模型的XML来完成。
不难发现第一个图中爱好这一列可以分解为两列,如右图中所示,但是这样就不符合1nf要求的列不可再分的要求,右图也不符合没有重复列的要求,不符合1nf。...符合第一范式应该如下图所示(同时去掉第一个表的爱好字段): ?...如图所示,我们将Name和City两个属性作为主键,省份这个字段依赖于城市这个字段,同时不依赖于Name这个字段,根据城市可以确定省份。省份跟Name没有关系不符合第二范式。...应该将省市单独拿出来独立成表(AddressID,Province,City),主表则变成(ID,Name,AddressID),通过AddressID关联。...BCNF(Boyce-Codd normal form),在3NF的基础上,表中任何字段对任一候选关键字段的传递函数依赖都不存在。
PRIMARY KEY ④默认约束—— 保存数据时,未指定该字段的值,则采用默认值 DEFAULT ⑤检查约束(8.0.16版本之后)—— 保证字段满足某一条件 CHECK ⑥外键约束—— 用来让两证表的数据之间建立连接...,gender) VALUES ('小一',22,'1','女'); -- 当设置非空约束的字段name插入null值,会报错: -- 错误代码: 1048 Column 'name' cannot...,会报错: -- 错误代码: 3819 Check constraint 'test_chk_1' is violated....INSERT INTO test(NAME,age,STATUS,gender) VALUES ('小二',-1,'1','女'); -- 当插入数据时,没有为默认约束字段status设置值,会自动设置默认值...null(前提是外键关联字段可以为null) SET DEFAULT:在父表进行更新/删除时,首先检查记录是否存在外键,存在则将外键关联的字段值设置为一个默认值(Innodb不支持) 添加外键约束时指定更新行为
2.传输报文标准:XML 与其他零售商不同,GV并没有采用 X12、EDIFACT等常见的EDI报文标准,而是采用了XML格式。...="+31666670100" street="PO BOX 75820" vatID="" zip="1210 BG"/> addressID...phone="" street="ZA LOUAITIERES-RUE DU FOUR A C" zip="41600"/> addressID... AlternativeID字段用于携带任何可以描述文件或文件特征的额外...也可以出现在AlternativeID字段中。 目前只需要传输上文提到的订单、订单回复以及发票三种类型的业务文件,但根据GV的介绍,后期还会再增加提前发货通知ASN。
第一范式,第一范式是关系型数据库的基础条件,我将1nf的特点归纳为以下几点: 1.不允许出现重复的行; 2.没有重复的列; 3....不难发现第一个图中爱好这一列可以分解为两列,如右图中所示,但是这样就不符合1nf要求的列不可再分的要求,右图也不符合没有重复列的要求,不符合1nf。...举例说明: 如图所示,我们将Name和City两个属性作为主键,省份这个字段依赖于城市这个字段,同时不依赖于Name这个字段,根据城市可以确定省份。省份跟Name没有关系不符合第二范式。...应该将省市单独拿出来独立成表(AddressID,Province,City),主表则变成(ID,Name,AddressID),通过AddressID关联。...BCNF(Boyce-Codd normal form),在3NF的基础上,表中任何字段对任一候选关键字段的传递函数依赖都不存在。
表中的第一个timestamp列,如果没有指定null属性或者没有指定默认值,也没有指定ON UPDATE语句。...NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP属性,而后面的timestamp字段,若没有指定,则设置了 NOT NULL...如果timestamp列被加上了not null属性,并且没有指定默认值。...|+---------+------+------------------------------------------+| Warning | 1364...当timestamp 字段指定NOT NULL时,若显式插入NULL则报错提示:该字段不能为空;若不显式插入该字段且SQL_MODE不包含'NO_ZERO_DATE',则会向该列中插入'0000-00-
SQLCODE=-400是通用的致命错误代码。字段约束(SQL)字段约束指定管理字段允许的数据值的规则。...但是,可以为该字段创建多个没有值(NULL)的记录。 DEFAULT默认值:必须指定一个值,否则 IRIS会为每个记录中的此字段提供一个默认值(接受空字符串)。...DEFAULT NOT NULL:必须指定一个值,否 IRIS会为每个记录中的此字段提供一个默认值(可接受的空字符串)。...UNIQUE DEFAULT唯一默认值:不推荐-必须指定唯一值,否则 IRIS会为每个记录中的此字段提供一个默认值(一个可接受的空字符串)。...UNIQUE DEFAULT NOT NULL:不建议-必须指定唯一的值,否则 IRIS会为每个记录中的此字段提供一个默认值(一个可接受的空字符串)。
: mysql> insert into myclass(class_name) values('class1'); ERROR 1364 (HY000): Field 'class_room' doesn't...默认值default 默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。...对于default而言,当用户忽略这一列的时候,如果设置了default,则使用默认值;如果没有设置default,则报错。 而对于age列: 下来再来看这个: 为什么还是让插入了呢?...而如果为我们没有在创建表的时候显示声明默认值,MySQL会优化,自动加上默认值为NULL。 四....语法: foreign key (字段名) references 主表(列) 案例: 这样的student只是有外键之名(关联关系),但是没有外键之实(没有约束)。重新创建一个。
Model: publicclassOrder{ private Long userID; private Long addressID; private String comment; } Controller...dto.getUserID==null){ return "userID不能为空"; } if(dto.getAddressID==null){ return "addressID...dto.getComment==null){ return "comment不能为空"; } return "sucess"; } 这种做法首先是可取的,能达到我们的要求,但是这样如果model字段过多...return results.getFieldError().getDefaultMessage(); } return "success"; } 这样我们就只需要在model字段上加上非空验证和相应提示语就好了...此时需要引入包 哪怕与@Valid搭配也是没有效果,大概率是因为我们少导入了一个包hibernate- validator,我们需要同时导入以下两个包
key限制,而没有使用主键自增(auto_increament), 需要我们自己给主键字段插入值,否则会出现如下错误。..."ERROR 1364 (HY000): Field 'sid' doesn't have a default value" 但是我们上面说过,主键字段一般是不进行修改的,也就是说不要主动给他值,主键字段应该是让系..."这些细节知识,有时候是我们没有注意到的,因此单独拿出来说明。"...insert into student(age,idcard) values (33,"123456789"); 举例如下: 6.添加默认值约束(default) 某个字段当被设置了默认值以后,当我们不为该字段指定值的时候...1)怎么添加默认值约束? 方式一:创建表的时候,给字段添加默认值。
另外,IGNORE 选项还可以在非空约束、写入的字段内容超过字段长度时进行截断处理等,下面是几个具体的例子。 1....忽略非空约束 2.1 列出字段赋值为null时 当列出需赋值的字段,但是对其中的非空字段赋值为null时,结果如下: mysql> select * from test1; +----+------...1364 (HY000): Field 'card_no' doesn't have a default value mysql> insert ignore into test1(id,name...,也可以插入成功,也是将其插入一个空字符串 2.3 未列整型字段时 当赋值时未在字段列表中加入有非空约束的整型类型的字段时,情况如下: mysql> select * from test1; +---...aaa | aa | +----+------------+---------+------+ 6 rows in set (0.00 sec) mysql> 结果:此时插入了0 (整型的默认值
| B | f | 1500 | | 3 | C | m | 5500 | | 4 | D | f | 500 | 只用一个 SQL 查询,将 sex 字段反转...Address 表: +-------------+---------+ | Column Name | Type | +-------------+---------+ | AddressId...查找 FirstName, LastName, City, State 数据,而不管一个用户有没有填地址信息。...但是如果分组字段只有 score 的话,那么相同的 score 最后的结果只会有一个,例如上面的 6 个记录最后只取出 3 个。...综上,需要使用 score 和 id 两个分组字段。 在下面的实现中,首先将 Scores 表根据 score 字段进行自连接,得到一个新表,然后在新表上对 id 和 score 进行分组。
领取专属 10元无门槛券
手把手带您无忧上云