草庐IT

约束

wyh518 2023-03-28 原文

创建表的时候可以给字段添加相应的约束,约束的目的:保证表中数据的合法性,唯一性,有效性。

非空约束(not null):约束字段不能为NULL

唯一约束(unique):约束字段不能重复

主键约束(primary key):约束字段既不能为NULL也不能重复

外键约束(foreign key):阿里巴巴手册,已经禁止使用外键了

检查f约束(check):Oracle数据库有check约束,但是Mysql没有。

注意:我们主要还是记住英文,平时使用的都是英文!

1.非空约束 not null

CREATE TABLE mytable(
   id  INT(10),
   username VARCHAR(30) NOT NULL,    #添加非空约束
   PASSWORD VARCHAR(30)
);

测试

insert into mytable(id,password) values(1,'123') ;  #由于我们的的用户字段要求非空,所以会执行失败
ERROR 1364(HY000) : Filed 'username' doesn't have a default value

2.唯一约束(unique)

测试

列级约束

测试

表级约束

测试

 

3.主键约束(primary key) *
必须记住:一张表的主键约束只有一个 ;最好与别的字段不相关,仅仅代表唯一标识 !

CREATE TABLE mytable(
   id  INT(10) PRIMARY KEY,       #添加主键约束【属于列级约束】
   username VARCHAR(30), 
   email VARCHAR(30)
);

测试

 

【表级约束】

主键值自增:在primary key后面添加auto_increment(从1开始,递增);

了解:Oracle也提供一个自增序列叫做序列(sequence);

4.外键约束(foreign key)

关于外键约束的相关术语

  • 外键约束:foreign key
  • 外键字段:添加有外键约束的字段
  • 外键值:外键字段中的每一个值。

t_student中的classno字段引用t_class表中的cno字段,此时t_student表叫做子表。t_class表叫做父表。

顺序要求:

  • 删除数据的时候,先删除子表,再删除父表。
  • 添加数据的时候,先添加父表,在添加子表。
  • 创建表的时候,先创建父表,再创建子表。
  • 删除表的时候,先删除子表,在删除父表。

使用外键【Alibaba规范不推荐使用】

create table t_class(
    cno int ,
    cname varchar(255) , #被引用:父表     primary key(cno) ); create table t_student(     sno int ,     sname varchar(255) , #子表     classno int ,     foreign key(classno) reference t_class(cno) ); #t_student中的classno字段引用t_class表中的cno字段,此时t_student表叫做子表。t_class表叫做父表

 

  • reference是引用;
  • 外键可以为NULL;
  • 此时classno中的数据来自cno;
  • 外键引用的字段不一定是主键,但是起码是被unique约束;

有关约束的更多相关文章

  1. 软约束、硬约束、Minimum Snap的轨迹优化方法 - 2

    文章目录前言约束硬约束的轨迹优化Corridor-BasedTrajectoryOptimizationBezierCurveOptimizationOtherOptions软约束的轨迹优化Distance-BasedTrajectoryOptimization优化方法前言可以看看我的这几篇Blog1,Blog2,Blog3。上次基于MinimumSnap的轨迹生成,有许多优点,比如:轨迹让机器人可以在某个时间点抵达某个航点。任何一个时刻,都能数学上求出期望的机器人的位置、速度、加速度、导数。MinimumSnap可以把问题转换为凸优化问题。缺点:MnimumSnap可以控制轨迹一定经过中间的

  2. ruby-on-rails - 子域约束并排除某些子域 - 2

    在我的routes.rb文件中,我想使用rails3中的子域约束功能,但是我想从catchall路由中排除某些域。我不想在特定的子域中有特定的Controller。这样做的最佳做法是什么。#thissubdomainidontwantallofthecatchallroutesconstraints:subdomain=>"signup"doresources:usersend#hereIwanttocatchallbutexcludethe"signup"subdomainconstraints:subdomain=>/.+/doresources:carsresources:sta

  3. ruby-on-rails - 在rails中创建一个表并添加外键约束 - 2

    我有一个表students,字段为ward_id,我必须创建一个名为guardian_users的表,字段为id,ward_id,email,guardian_id,hashed_pa​​ssword等现在我必须添加约束外键。学生中的任何更新/删除/编辑/插入应该对guardian_users具有相同的效果。我如何在Rails2.3.5中做到这一点?students表存在,但其他表还不存在。 最佳答案 您要么需要foreign_key_migrations插件或#execute方法。假设您使用插件:classCreateGuardi

  4. ruby - Rails 中的 FactoryGirl - 具有唯一约束的关联 - 2

    这个问题是对这里提出的问题的扩展:Usingfactory_girlinRailswithassociationsthathaveuniqueconstraints.Gettingduplicateerrors所提供的答案对我来说非常有效。这是它的样子:#Createsaclassvariableforfactoriesthatshouldbeonlycreatedonce.moduleFactoryGirlclassSingleton@@singletons={}defself.execute(factory_key)begin@@singletons[factory_key]=Fa

  5. ruby-on-rails - 使用 rspec 测试具有子域约束的​​路由 - 2

    我在使用子域约束进行rspec路由测试时遇到问题。特别是我有一条路线constraints:subdomain=>"api"doresources:sign_ups,:only=>[:create]end和(除其他外)测试it"doesallowcreationofsignups"do{:post=>"/sign_ups"}.shouldroute_to(:controller=>"sign_ups",:action=>"create",)end如果我删除子域约束,则此测试通过,但它会失败。我必须告诉rspec使用子域,但我不知道如何使用TIA安迪 最佳答案

  6. ruby-on-rails - 使用基于已安装引擎的 url_for 获取基于约束的 url - 2

    有什么方法可以让url_for在Action调度路由期间根据request.host返回url吗?mountCollaborate::Engine=>'/apps/collaborate',:constraints=>{:host=>'example.com'}mountCollaborate::Engine=>'/apps/worktogether'示例:当用户在example.com主机上时collaborate_path=>/apps/collaborate当用户在任何其他主机上时collaborate_path=>/apps/worktogether经过大量研究,我意识到Rou

  7. ruby-on-rails - 在具有唯一约束的关联中使用 Rails 中的 factory_girl。得到重复的错误 - 2

    我正在使用一个Rails2.2项目来更新它。我正在用工厂(使用factory_girl)替换现有的固定装置,但遇到了一些问题。问题在于表示具有查找数据的表的模型。当我使用两个具有相同产品类型的产品创建购物车时,每个创建的产品都会重新创建相同的产品类型。此错误来自对ProductType模型的唯一验证。问题演示这是我创建购物车并将其分成几部分的单元测试的结果。我必须这样做才能解决这个问题。不过,这仍然说明了问题。我会解释。cart=Factory(:cart)cart.cart_items=[Factory(:cart_item,:cart=>cart,:product=>Factory

  8. javascript - Safari 12 忽略 getUserMedia 约束 - 2

    出于某种原因,Safari12(尚未在其他版本上尝试过)完全忽略了getUserMedia约束。我的代码看起来像这样navigator.mediaDevices.getUserMedia({video:{facingMode:'environment',width:{min:640,ideal:1280}},audio:true}).then(userStream)//SafarionMacignoresconstraintsandendsupexecutinghere.catch(fallback)//ChromeonMacraisesanderrorandendsupexecuti

  9. javascript - d3.js 强制定向布局受形状约束 - 2

    我想知道是否有一种方法可以使用d3.js创建力导向布局并以任意形状限制它所有节点均等价分布在形状内边界到节点的距离等于节点之间的距离我希望已经有这样的解决方案了。否则我的想法是从力导向布局开始,并在每次迭代中检查节点到边界的距离。你有什么建议吗? 最佳答案 你的想法也是我的。在tick函数中,您可以添加额外的力。这是我的建议(未测试):force.on('tick',function(e){node.each(calcBorderDistance).attr('transform',function(d){d.x-=e.alpha*

  10. javascript - propTypes isRequired 约束在 react 中的误导行为 - 2

    我对react(或者说网络技术)很陌生。我开始构建一个使用不同组件的应用程序。当我浏览文档时,我认为将isRequired放在propTypes中,会强制用户在使用组件时提供所有isRequired属性。但是,在此示例中,即使我不传递isRequired属性,我也能够加载组件。varPanelPreview=React.createClass({getInitialState:function(){return{captionIndex:0};},propTypes:{beforeSrc:React.PropTypes.string.isRequired,afterSrc:React.

随机推荐