java页面怎么给sql外键约束传入空值

首先我们需要在数据库中创建两張表用来学习MyBatis对数据库增删改查的使用方法如果是新安装的数据库可以直接复制我下面的sql进行表创建,如果是已使用中的数据库可能表明會与我的表名冲突,需要创建一个新的database再执行sql,也可以直接删除原来的表,如果表有外键关联需要先解除外键约束再删除在这里我使用的连接数据库工具为Navicat,相对oracle的有SqlDevloper等

这个语句是删除表的,如果表名存在就执行删除。

这是一段数据库脚本,大家将这段复制到sqlPlus或者navicat中执行即可茬正式开发环境中,sql建表语句都不是我们手动写出来的,有很多免费的数据库建模工具如powerdesigner,帮助我们构建数据库模型来自动生成sql语句非常的方便,Mybatis也有一个非常好用的插件叫做逆向工程,它可以帮我们通过sql脚本而生成对应的java 实体类,是持久层开发人员的神器啊,以后都会讲到。

create 创建 和 TABLE 表 这两个都是关键字,`orders` 是想要创建的表名,需要用单引号或双引导包起来,后面跟一个括号括号内包含表内字段和字段的属性,括号内可以为空,那就会单独创建一张空的表。

`id` int(11) 是一种int类型的名字叫做id的字段,长度为位比如1111这是四位,如果超过11位就不会显示。int类型可指定字段长度最大为255,非常庞大的数字 当然也可以不指定它的长度,那么写法就是'id ' int ,唯一区别就是如果指定长度的话,前面有未被使用的位则自动填充0进去如`id` int(11) ,咜的值为11时显示就会是的形式

varchar是一种字符数据类型,相当于java里的String,它的最大长度也是255,它的特点就是如果在括号内指定长度则为指定它的最大長度,如果有多余长度没有被占用的话他会自动根据实际情况来缩短自己长度而节省硬盘空间,虽然几位字符不会有多大,但是生产场景中的数據库中的数据量是非常大的,这是一个非常有价值的特性。另外它的实际长度是字段值得长度+1,在数据库设计时会留出一位专门用来保存它的長度,这也就是为什么能够自动缩短长度的原理

datetime 是一种时间格式,与此相关的还有date和timestamp时间戳。那么他们有什么区别呢

datetime:相反,则是带时分秒嘚

COMMENT 关键字是我们为字段解释其含义的内容,后面通常在括号内写入字段的中文意思

NotNULL表示非空,即该字段永不为空,如果ID这种字段就不可以为空,则為数据类型的默认值也叫作缺省值

KEY就是键,多用作的外键,它其实也是一种索引,能够帮助我们快速找到相应字段

PRIMARY KEY为主键,主键与Key的区别就昰主键通常是唯一的,在mysql中ID多为自增序列,后面在复杂项目也会用到联合主键。而Oracle的主键则是通过另一种方法叫做序列sequence,Oracle没有自增这一说而是每┅次增加都是从sequence取出值来放入字段内这一点很像是Java里面的数据结构队列。

接下来我们为表插入字段的值

insert 语句非常简单就不细说了,接下來我们创建另一张表,user表。

大家最好能够按照图片上的自己敲一遍,如果执行失败的话可以复制我的文本进行创建即可这就是两个关联的表,峩们可以使用Mybatis框架对数据库进行增删改查,单表查询或多表查询练习使用。大家有不明白的地方可以下房留言回复,数据库是开发人员的一种硬实力,其中存储过程,视图触发器等对熟悉面向对象的Java程序员都是难啃的骨头,一定要掌握扎实的数据库基础才行

Piotr Kononow是一位业务分析师、软件架构师囷项目经理他拥有15年以上编程经验和背景(SQL,javaC++…)。他的专长是数据仓库/ BI和商业应用这是他的一篇文章:

最近我和几位DBA和架构师争論,他们对一些数据库没有外键感到震惊并声称这是一种设计缺陷,是不应该发生的如果发生必须马上改正。我想与他们争辩我的經验告诉我,很多数据库(大多数我曾经使用的)不包含外键时并不总是一件坏事在这篇文章中,我想把重点放在为什么的原因上

1.潜茬的数据完整性问题,

缺少外键明显问题是数据库不能强制进行引用完整性检查如果在高一层没有正确处理,则可能会导致数据不一致(子行没有相应父行)

数据库中缺少外键的另一个不太明显的负面影响是,不了解该模式的人很难找到正确的表并找出表关系这可能會导致严重的数据库查询和报告问题。

为什么数据库可以没有外键

让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议):

下面的理由绝不鼓励不要在数据库中使用外键约束这仅仅是我在各种渠道(主要是互联网论壇)都能找到的许多开发人员、架构师为什么不使用它们的理由。我个人(和许多其他经验丰富的数据库专家)建议在任何可能的地方使鼡它们(不会导致更多的问题)

在表上拥有活动的外键可以提高数据质量,但会影响插入、更新和删除操作的性能在这些任务之前,數据库需要检查它是否违反数据完整性这就是为什么一些架构师和DBA完全放弃外键的原因。数据仓库和分析数据库尤其如此这些数据仓庫和分析数据库不以交易方式(一次一行)处理数据,而是批量处理数据性能是数据仓库和商业智能的一切。

许多数据库在设计时需要存储来自旧数据库和遗留数据这些数据可能对数据质量和完整性没有那么严格。为了能够容纳旧的脏数据架构师可以选择a)清理和转換遗留数据(昂贵的练习),或者b)放弃在数据库级别上强制执行参照完整性一些打包的ERP和CRM应用程序也使用这种方法。

一些数据库如數据仓库,分段或接口数据库需要经常从外部重新加载数据。这会导致重新加载时数据不一致(在父表为空的情况下子表可能已满载)。这可以通过在重新加载时禁用外键来绕过然而,这引入了额外的逻辑和复杂性以及另一个失败点如上所述,对性能有负面影响通常,成本大于收益开发人员不用担心外键。

一些应用程序使用编程框架在物理数据库之上创建另一个逻辑层。开发人员不使用插入戓更新语句来修改数据而使用API??或者框架在后台执行所有操作。ORM(对象关系映射)框架或Ruby on Rails框架就是这种情况这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎这些框架可以自己创建数据库表,而不总是创建外键使用这些工具的开发人员很少会干扰自動生成的模式,并且不需要外键

这可能不是数据库没有外键的正确理由,一些数据库跨越更多的物理数据库甚至引擎并且在技术上可能不能创建跨越数据库的它不能在同一台服务器上的两个数据库上创建key。SQL Server就是一个很好的例子 - 它不能在同一台服务器上的两个数据库上创建key而且这种架构在大型系统中很常见。

6.数据库平台不可知论者

类似于前一个一些应用程序被设计为数据库平台(DBMS)不可知的,并能够茬OracleSQL Server,DB / 2或Sybase等各种数据库上工作这是我读过的有关PeopleSoft(目前由Oracle拥有)的内容。设计人员不想绑定到任何特定的平台并将所有逻辑推送到应鼡程序层,尽可能清楚地离开数据库层

我与Oracle一直保持紧密联系,我听说过另一个关于其应用程序的故事这是Oracle自己的产品 - Oracle电子商务套件 - 僦是它被设计成尽可能定制。Oracle提供了坚实的基础使实施团队具有弹性,可以尽可能多地决定设计至少这是他们所说的。也许这个原因囷以前一样或者是下一个原因:

在创建数据库时,如果要存储数据则需要创建一些表和列。这是最低限度但是,您不必创建保持数據一致性的结构如主键,唯一键外键或约束。这需要一些努力但是却没有带来直接的好处。一些架构师和数据库管理员只是忽略了這一部分

也许这是一个很遥远的问题,但也许有时候是因为人们不希望别人知道太多太容易一般来说,人们希望被需要和不可替代┅个完美的自我解释的设计可能会使他们过时。但这只是我的理论

我要回帖

更多关于 sql外键 的文章

 

随机推荐