精华内容
下载资源
问答
  • MySql 的约束、字段值自动增加

    千次阅读 2017-11-21 17:30:18
    @author StormWangxhu @data 2017/11/21(一)数据的约束1、约束...举个例子:当你要为学生建立一个基本信息StudentInfo时,这个中学生的名字可以相同但是学号必须不一样,而他的年龄也得限制一定范围内,像
    @author StormWangxhu
    @data  2017/11/21

    (一)数据表的约束

    1、约束目的: 为了防止数据库中插入错误的数据。
    在设计数据库时,为了确保数据库表中数据的质量,需要考虑数据的完整性(数据的完整性是指数据的正确性和一致性)。举个例子:当你要为学生建立一个基本信息表StudentInfo时,这个表中学生的名字可以相同但是学号必须不一样,而他的年龄也得限制在一定范围内,像这样类似的“限制”有很多,如果违反了这些限制就制造了与现实不符的失真数据即破坏了数据的完整性。因为数据库不能自行判断哪些数据失真,所以需要认为添加一些约束来保证数据的完整性。
    2、约束条件:
    数据库中对表的约束有五种:
    –1.主键约束(Primary Key constraint):主键列数据唯一,并且不允许为空。
    主键是表中的一列或一组列,它们的值可以唯一地标识表中的每一行。

    –2.唯一约束(Unique constraint):该列数据唯一,允许为空,但只能出现一个空值(不重复性)。
    唯一性约束保证了除主键外的其他一个或一组列的数据具有唯一性,以防止在列中输入重复的值。(一个表只可以有一个主键约束,如果其它列也不希望有重复就可以使用唯一性约束。)

    –3.检查约束(Check constraint):范围限制、格式限制
    检查约束使指定表中一列或一组列可以接受的数据值或格式。

    –4.默认约束(Default constraint):
    为指定列定义一个默认值。在输入数据时,如果没有输入该列的值,则将该列的值设置为默认值。

    5.外键约束(Foreign Key constraint):表间约束,确保数据的参照完整性
    将当前表中的某一列或一组列关联到另一个表的主键列,可创建两个表之间的连接。当前表中的列就成为外键。外键涉及到两个表,一个主表,一个从表 ,主表中的外键是从表中的主键

    1121.1 主键约束

    作用: 为了快速查找表中的某条信息,可以通过设置主键来实现。
    方式: primary key 定义,唯一标示表中的记录,好比身份证。

    • 单字段主键

      基本语法

    字段名   数据类型 primary key 

    这里写图片描述

    • 多字段主键
      基本语法
    primary key(字段名1,字段名2...字段名n)

    说明: 字段名1,字段名2等指的是构成主键的多个字段的名称。
    这里写图片描述

    注意:
    每一个数据表中最多只能有一个主键约束,定义为primary key 的字段不能有重复,且不能为空!

    1121.2 非空约束

    基本语法:

    字段名  数据类型   not null 

    这里写图片描述

    非空约束指的是字段值不能为空

    1121.3 唯一约束

    唯一约束用于保证数据表中字段的唯一性,即表中的字段的值不能重复出现。
    基本语法

    字段名   数据类型   unique  ;

    这里写图片描述

    说明:
    id 字段为主键
    stu_id 字段为唯一值,该字段不能有重复值。
    grade 字段的值有默认值 0。

    1121.4 默认约束

    基本语法:

    字段名   数据类型   default  默认值  ;

    (二)设置表的字段值会自动增加

    定义:
    若为表中插入的新纪录自动生成一个唯一的ID,可以使用 auto increment 约束实现。

    基本语法:

    字段名   数据类型   auto_increment ;

    这里写图片描述

    说明: ID字段 为主键,且每插入一条新纪录,id值会自动增加。

    展开全文
  • 最近使用开发的过程出现了一个小问题,顺便记录一下原因和方法--字段方法 机房收费系统有几个地方都是要反映学生的当前余额的问题,...如安增加表,又只通过一个方法能一次性将三种金额都查询出来呢 ? ...

    最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--字段方法

                机房收费系统中有几个地方都是要反映学生的当前余额的问题,余额涉及到相同卡编号的花费金额、注册金额以及充值时的金额,这三种金额都放在三个地方,如果独自获得,在B层就要三个方法。如果将这三种金额放在同一个地方,就要多建一个表。如安在不增加表,又只通过一个方法能一次性将三种金额都查询出来呢 ?

              其实这就涉及到SQL语句的写法。

           Select Sum(表1.字段),Sum(表2.字段),Sum(表3.字段),From 表1 Cross Join 表2 Cross Join 表3 Where(表1.字段=表2.字段 And 表2.字段=表3.字段 and 表1.字段=查询的参数)

        例如:

             Select Sum(OutLineInfo.ConsumeCash),Sum(ReChargeInfo.AddMoney),Sum(StudentInfo.Cash) From OutLineInfo Cross Join ReChargeInfoCross Join  StudentInfo where(StudentInfo.CardNo = ReChargeInfo.CardNo And ReChargeInfo.CardNo = outlineinfo.CardNo And StudentInfo.CardNo=@CardNo)

        每日一道理
    微笑,是春天里的一丝新绿,是秋日里的一缕阳光,是骄阳下的一片浓荫,是冬雪中的一株梅红……微笑着去面对吧,你会感到人生是那样的温馨与甜蜜!

        这样就可以一次性查询出多个表中需要寻觅的参数

        总结:

              就这么一个小小的问题,也曾让我想了许久,查找了许多资料才弄出来,想想是为什么?SQL知识我们已经很早以前就学过了,但学到的也只是外相,当时在听得时候也只知道个大概与可能,对SQL整体印象也知识增编削查,但具体怎么做,却并不知道,这就需要我在当前的学习中加深对SQL知识的学习,不局限于外相。

              另外思维逻辑与寻觅知识的关键点也至关重要,就像这个问题,我开始想到的方法是从新将有关钱(包括这三个字段)建立一个表,如果这样,得增加各个层的代码,也要修改UML图;做了一点,让我越做越觉得麻烦,才追求简单方法。用视图,视图建立起来,却达不到我想要的效果,再另寻方法,查书籍,上彀搜寻,在偶尔中看到一个SQL语句,经过重复实验,修改才打到此目的。如果从一开始我就想到从新多建一张表比较麻烦,就不会再将时光花在写这部分代码上了。

             但没有开始的失败又怎么有当初的胜利呢?不管怎样,我都学到了。。。。

              

    文章结束给大家分享下程序员的一些笑话语录: Google事件并不像国内主流媒体普遍误导的那样,它仅仅是中国Z府和美国公司、中国文化和美国文化甚至中国人和美国人之间的关系,是民族主义和帝国主义之间的关系;更重要的是,它就是Z府和公司之间的关系,是权力管制和市场自由之间的关系。从这个意义上说,过度管制下的受害者,主要是国内的企业。Google可以抽身而去,国内的企业只能祈望特区。www.ishuo.cn

    转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/12/3074136.html

    展开全文
  • 介绍了一些关于数据库设计的内容,以及关于字段类型选择的内容;后面会介绍MySQL的索引优化、查询优化、分库分表、监控等;...表中的某个实体随着另一个实体而存在增加一门课程时,如果还没有学生...

    介绍了一些关于数据库设计的内容,以及关于字段类型选择的内容;

    后面会介绍MySQL的索引优化、查询优化、分库分表、监控等;

    优化目的假设有 课程选修表(一个学生同一门课一条记录)(学号(主键)、姓名、年龄、课程名(主键)、成绩、学分)减少数据冗余:同一学生选择多门课程,姓名、年龄就重复n次

    避免在数据维护中出现更新、插入和删除异常

    插入异常:表中的某个实体随着另一个实体而存在增加一门课程时,如果还没有学生选修,由于没有学号,则该课程无法插入

    更新异常:更改表中的某条记录单个字段时,需要对多行进行更新修改一学生年龄,需要将该学生的所有记录的年龄都修改

    删除异常:如果删除表中某一记录,会导致其他记录的消失如果删除了部分学生,导致没人选择 a课程,则引发插入异常

    节约数据存储空间

    提高查询效率

    数据库结构设计的步骤需求分析:全面了解产品设计的存储需求

    逻辑设计:设计数据的逻辑存储结构;数据实体间的逻辑关系,解决数据冗余和数据维护异常

    物理设计:根据所使用的数据库特点进行表结构设计

    维护优化:根据实际情况对索引、存储结构进行优化

    数据库设计范式

    设计出没有数据冗余和数据维护异常的数据库结构第一范式(基本都满足):数据库表中所有字段只具有单一属性

    且单一属性的列由基本数据类型组成

    应该是简单的二维表

    第二范式(单一主键都满足,复合主键下可能不满足):

    一个表中只有一个业务主键,也就是不能存在非主键字段对只对部分主键的依赖关系例如上面的表中,学分字段只和课程名有关系,一门课程多少学分和学生是无关的

    可以通过将该表拆分为 学生表、课程表、学生课程关系表 来优化

    第三范式:

    在第二范式的基础上,还消除了非主键属性对主键的传递依赖例如拆分后的学生表如果还有 学校名、学校地址两个字段,则不符合, 应该继续拆分出学校表,学生表中只维护学校表id;

    反范式化设计

    (空间换时间)为了性能,不遵守范式化设计,允许存在少量的数据冗余完全符合范式化的设计,有时不能得到良好的SQL查询性能,往往一个查询需要关联过多的表

    例如 商品表、商品分类表、商品-分类-关联表,在商品表中不仅保存商品分类id,还冗余商品分类名;

    这样就将原本的三张表关联查询,减少到了一张

    范式化优点数据冗余少

    更新操作比反范式化快

    表通常比反范式化小(单表字段少)

    范式化缺点查询慢,查询需要关联多个表

    更难索引优化

    反范式化优点查询快,减少表的关联

    更好的索引优化

    反范式化缺点存在数据冗余和维护异常

    对数据的修改需要更多的成本

    物理设计的内容定义数据库、表及字段的命名规范

    选择合适的存储引擎,如下:

    为字段选择合适的数据类型一个列可以选择多种类型时,优先考虑数字类型,其次是日期或二进制类型,最后是字符类型;同类型选择空间占用少的

    整数类型

    (可以使用无符号整数类型,提高存储范围)(类似int(2)不会减少其真正存储空间,1只是表示显示的长度为1位),如下:

    实数类型

    (金额推荐用DECIMAL),如下:

    字符类型(其长度以字符为单位,而不是字节):VARCHAR变长字符串,只占用必要的存储空间

    列最大长度小于255,则只占用一个额外字节存储字符串长度;大于则占用2个

    使用最小的符合需求的长度;因为该类型在MySQL内存中,存储的还是其定长长度

    适用最大长度比平均长度大很多的字段

    适用于更新少的字段(更新多会产生碎片)

    适用使用多字节字符集存储字符串

    CHAR定长

    字符串存储其中,会删除末尾空格(varchar中不会)

    最大宽度为255

    适用于存储长度相近的字段

    适用存储短字符串(varchar需要额外1字节存储长度)

    适用于存储经常更新的列

    日期类型DATATIME:以YYYY-MM-DD HH:MM:SS[.fraction] 格式存储时间(fraction:微秒)

    默认没有微秒,如果需要存储微秒,需要定义 DATATIME(6)

    与时区无关,只占用8个字节

    范围:1000-01-01 00:00:00 - 9999-12-31 23:59:59

    TIMESTAMP:存储了格林尼治时间1970年1月1日到当前时间的毫秒数

    以YYYY-MM-DD HH:MM:SS[.fraction] 格式显示,占4个字节

    如果需要存储微秒,需要定义 TIMESTAMP(6)

    范围:1970-01-01 - 2038-01-19

    显示依赖所指定的时区

    在行的数据修改时可以自动修改timestamp类型列的值(修改时间字段无需自己维护)(只有一个timestamp能自动更新,默认第一个该类型列)

    DATE:存储YYYY-MM-DD 只需3个字节

    1000-01-01 - 9999-12-31

    TIME:存储HH:MM:SS[.fraction]

    存储日期时间数据注意事项:不要使用字符类型保存日期时间数据

    日期时间类型比字符类型占用空间小

    查询过滤时可以进行对比

    有丰富的日期函数

    使用int存储时间不如使用timestamp

    为Innodb选择主键主键应该尽可能的小

    主键应该是顺序增长的

    主键和业务主键可以不同

    展开全文
  • “轻松”实现次查询多

    千次阅读 2013-05-12 13:51:26
    机房收费系统有几个地方都是要反映学生的当前余额的问题,余额涉及...如何增加表,又只通过一个方法能一次性将三种金额都查询出来呢 ?  其实这就涉及到SQL语句的写法。  Select Sum(1.字段),Sum(2.字段

            机房收费系统中有几个地方都是要反映学生的当前余额的问题,余额涉及到相同卡编号的消费金额、注册金额以及充值时的金额,这三种金额都放在三个地方,如果单独获得,在B层就要三个方法。如果将这三种金额放在同一个地方,就要多建一个表。如何在不增加表,又只通过一个方法能一次性将三种金额都查询出来呢 ?

          其实这就涉及到SQL语句的写法。

       Select Sum(表1.字段),Sum(表2.字段),Sum(表3.字段),From 表1 Cross Join 表2 Cross Join 表3 Where(表1.字段=表2.字段 And 表2.字段=表3.字段 and 表1.字段=查询的参数)

    例如:

         Select Sum(OutLineInfo.ConsumeCash),Sum(ReChargeInfo.AddMoney),Sum(StudentInfo.Cash) From OutLineInfo Cross Join ReChargeInfoCross Join  StudentInfo where(StudentInfo.CardNo = ReChargeInfo.CardNo And ReChargeInfo.CardNo = outlineinfo.CardNo And StudentInfo.CardNo=@CardNo)

    这样就能一次性查询出多个表中需要寻找的参数

    总结:

          就这么一个小小的问题,也曾让我想了好久,查找了许多资料才弄出来,想想是为什么?SQL知识我们已经很早以前就学过了,但学到的也只是皮毛,当时在听得时候也只知道个大概与可能,对SQL总体印象也只是增删改查,但具体怎么做,却并不知道,这就需要我在以后的学习中加深对SQL知识的学习,不局限于皮毛。

          另外思维逻辑与寻找知识的关键点也至关重要,就像这个问题,我开始想到的方法是重新将有关钱(包括这三个字段)建立一个表,如果这样,得增加各个层的代码,也要修改UML图;做了一点,让我越做越觉得麻烦,才寻求简单方法。用视图,视图建立起来,却达不到我想要的效果,再另寻方法,查书本,上网搜寻,在偶然中看到一个SQL语句,经过反复试验,修改才打到此目的。如果从一开始我就想到重新多建一张表比较麻烦,就不会再将时间花在写这部分代码上了。

         但没有开始的失败又怎么有现在的成功呢?不管怎样,我都学到了。。。。

          

    展开全文
  • 从表(多方)创建一个字段并作为外键,指向主表(一方)的主键. eg : 客户和订单,分类和商品,部门和员工 多对多关系 需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键. eg : 学生...
  •  定义:满足1NF的基础上,每一个非主键字段必须完全依赖于主键。只有复合字段作主键时,才可能出现不满足2NF的情况。 解释:例如,(学号,课程号,学分,成绩)组成一个表,主键为(学号,课程号)。应用...
  • 学生学籍管理信息系统

    热门讨论 2009-05-28 14:51:27
    首先是一个存放的问题,必需要有一个足够大的档案室来存放这些档案,而且随着年数的增加,这个规模几乎是成几何式的增长。其次是存取,查阅的问题,随着档案的不断增加,要从如此复杂的档案库调阅某学生的档案所...
  • 界面中包含学号、姓名、语文成绩、数学成绩、英语成绩、Java成绩的文本字段和两按钮,用户需要输入信息,点击确定按钮才能提交信息,提交的信息将存储SQL数据库中,分别存储于两个表中。 第三部分为删除信息部分...
  • 学生管理系统

    2018-07-03 13:04:12
    二:需求概述(1)目标学生信息管理系统的目标是为方便学校教务处系统的管理学生信息并学校和学生间提供一个信息共享的平台(2)需求学生管理系统的管理用户国分为三大类,分别是管理员登录功能,教师登录功能以及...
  • 2019-02-02 回答学生表 隐藏表格的一行 固定表格第一行 如果access数据库表中一个字段是自动增加的序号,如何插入一行 将a表的aa列求和. 做为一行,追加到b表的bb列(bb列已存在).用access语句怎么写? 为什么报表中...
  • 修改student表,往表中增加一个sbirthday字段,类型为date。 Alter table course alter ccredit int; 修改Course表,把ccredit字段的数据类型由numberic改成int。 (5)删除表的语句格式: Drop table <表名>; 从...
  • vb学生成绩管理系统

    2013-06-28 08:55:24
    完成本项工作后,就创建了一个全局变量ADOcn,但它是一个特殊的变量,其数据类型是数据连接对象(Connection对象)。可以把ADDcn理解成是一个虚拟的数据库。或者称为VB程序的逻辑数据库,通过它可以非常方便地访问...
  • mysql外键约束

    2016-07-24 16:29:52
    一张表中创建一个字段,该字段指向另外一张表的主键。通过一定的约束语句来指明其联系 1. 可以通过创建表的时候,指定对应的外键 语法:foreign key(当前表中的外键字段)reference 外键指向的表(外键指向表的...
  • 学生表的 gradeid 字段要去引用年级表的 gradeid 定义外键key 给这外键添加约束 (执行引用) 1.执行下面语句,生成grade表 CREATE TABLE `grade`( `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '...
  • 例如:以规范化设计的理念,学生成绩表中不需要字段“姓名”,因为“姓名”字段可以通过学号查询到,但反规范化设计中,会将“姓名”字段加入表中。这样查询一个学生的成 绩时,不需要与学生表进行连接操作,便...
  • 数据库实验(SQL SERVER)

    千次阅读 2020-07-15 17:49:25
    数据库实验一 实验内容: 用SQL语言进行基本表结构的定义、修改、删除,索引的建立和删除 实验步骤: 1 :SQL SERVER 中新建查询,建立到...(1) STUDENT表中增加一个字段入学时间scome, (2) 删除STUDENT表中sd
  • “借阅”表中增加一个“还书日期”字段。 6、用企业管理器上述三个表中输入部分虚拟数据。 7、查询分析器中实现基于单个表的查询 ① select * from Book ② select * from book where Bclass=’计算机’ ...
  • 详细讲解mysql触发器

    2014-06-13 15:33:33
    其实如果用到mysql数据库的时候,他的触发器的用处还是挺大的,比如说我有这样一个业务:有一张表student学生表,但是由于存在某个原因我需要另一张表里面totalstu表中增加一个字段来专门统计学生的个数,这个...
  • 、实验目的 使学生加深对数据库安全性和完整性的理解。并掌握SQL Server中有关用户、角色及操作权限的管理方法。... 在学生表中增加出生日期字段。定义缺省,并绑定到借阅表的“借阅日期”上,使之只能取当前日期。
  • winform sql版本问题

    2020-04-02 10:26:25
    C#winform中如何才能做到给客户安装软件时自动覆盖上一个版本的数据库SQL 例子:原数据库有个学生表(Student)内有三个字段分别为ID、Name、Age; 现又新增一个Sex;...数据库中增加一个版本表: CREATE...
  • Excel新增工具集

    2011-12-20 09:30:27
    5、多个工作簿中各个表头相同的工作表合并到同一个工作表中:合并后的表格的表头相同,为了明确每一条记录的来源,在表中增加一列标注记录来看何簿何表。 6、多个工作簿中各个名称相同的工作表合并到同一个工作表中...
  • 具体步骤如下:1、mysql中建立一个数据库student,然后数据库student中建立userinfo表,该表中可以包含三个字段:name(varchar)学生姓名、age(int)年龄、school(varchar)学校。2、设计一个index.jsp页面,访问...
  • 信息小管家

    2020-08-08 23:40:37
    学习了数据库和Servlet的知识之后,想着写一个项目来练习一下这部分,于是通过学生信息管理系统来完成这个任务 项目的主要业务是进行学生信息的管理,包括学生信息的增加,删除,查询,更新 通过前端的请求,后端进行响应...
  • 学生信息表中的联系方式有两种——邮箱和电话,如果作为一个字段(联系方式)就违反了第一范式的要求。我们应该设置为两个字段(邮箱)(电话) 第二范式 基于第一范式,表中非主键要完全依赖于主键,不能出现部份...
  • Hibernate集合映射之List

    2013-05-26 02:14:09
    这个使通过一个idx字段来实现的,比如说Team和Student的1对多关系,我们给team加入学生的时候,需要记录加入的顺序,这时候我们可以使用list方式,并student中新增加一个idx字段(但Student实体类不定义idx...
  • 请书写实现以下查询的SQL脚本: 查询“01”课程比“02”课程成绩高的所有学生的学号; 查询平均成绩大于60分的同学的学号和平均成绩;... student表中增加一列年龄字段,列出每位学生的年纪;
  • modelform

    2019-05-14 08:47:00
    比如我们的数据库有这样一张学生表字段有姓名,年龄,爱好,邮箱,电话,住址,注册时间等等一大堆信息,现在让你写一个创建学生的页面,你的后台应该怎么写呢? 首先我们会前端一个一个罗列出这些字段,让...
  • 【django之modelform】

    2018-03-29 15:38:00
    比如我们的数据库有这样一张学生表字段有姓名,年龄,爱好,邮箱,电话,住址,注册时间等等一大堆信息,现在让你写一个创建学生的页面,你的后台应该怎么写呢? 首先我们会前端一个一个罗列出这些字段,让.....
  • b) STUDENT表中增加一个字段SBIRTH,类型设置为日期时间类型,增加一个ADDRESS字段,类型为文本(字符); c) 删除STUDENT表中ADDRESS字段; d) COURSE表中CNO字段设为非空和唯一; 9. 重新定义一个简单表,然后用...

空空如也

空空如也

1 2 3 4 5 6
收藏数 120
精华内容 48
关键字:

在学生表中增加一个字段