数据库的增删改查(二)

这篇具有很好参考价值的文章主要介绍了数据库的增删改查(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、数据库约束

关系型数据库的一个重要功能

主要作用是保证数据的完整性,也就是数据的正确性(数据本身是正确的,关联关系也是正确的)

人工检查数据的完整性的工作量非常的大,在数据表定义一些约束,那数据库在写入数据时,帮我们完成这个工作

1.1、约束类型

*NOT NULL -指示某列不能存储NULL值

*UNIQUE -保证某列的每行必须由唯一的值

*DEFAULT -规定没有给列赋值时的默认值

*PRIMARY KEY - NOT NULL和UNIQUE的结合。确保某列(或两个列多个列的结合)唯一的标识,有助于更容易更快速的找到表中的一个特定的记录

*FOREING KEY - 保证一个表中的数据匹配到另一个表中的值的参照完整性

*CHECK - 保证每列的值都符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句

1.2、NULL 约束

*创建表时可以指定某列不能为空

-- 重新设置学生表结构

DROP TABLE IF EXISTS student;
CREATE TABLE student (
             id INT NOT NULL,
             sn INT,
             name VARCHAR(20),
             qq_mail VARCHAR(20)
);

 数据库的增删改查(二)

 1.3、UNIQUE:唯一约束

保证某列的每一行必须有唯一的值(某一列的值不能重复)

-- 重新设置表结构

DROP TABLE IF EXISTS student;

create table student(

                  id int NOT NULL,

                  sn int UNIQUE,

                  name VARCHAR(20),

                  qq_mail VARCHAR(20)

);

数据库的增删改查(二)

 1.4、DEFAULT:默认值约束

*规定没有给列赋值时的默认值

-- 重新设置表结构

DROP TABLE IF EXISTS student;

create table student(

                  id int NOT NULL,

                  sn int UNIQUE,

                  name VARCHAR(20) DEFAULT '无名氏',

                  qq_mail VARCHAR(20)

);

数据库的增删改查(二)

 1.5、PRIMARY KEY:主键约束

主键帮我们做了两个检验,一个是非空,一个是唯一校验

*指定id列为主键:

-- 重新设置表结构

DROP TABLE IF EXISTS student;

create table student(

                  id int NOT NULL PRIMARY KEY,

                  sn int UNIQUE,

                  name VARCHAR(20),

                  qq_mail VARCHAR(20)

);

 数据库的增删改查(二)

 对于整型类型的主键,常搭配auto_increament来使用。插入数据对应字段不给值时,使用最大值+1。

-- 主键是NOT NULL和UNIQUE的结合,可以不使用NOT NULL

id INT PRIMARY KEY auto_increament;

注:

*一个表中不允许有两个主键存在

*一个主键可以包括两个主键(复合主键)

1.6、FOREING KEY:外键约束 

表中某个列的值,必须是另一张表中的主键列或是唯一约束列的值,也就是当前表中的值必须在另一张表中存在,且满足主键或唯一约束

外键用于关联其他表的主键或唯一键,语法:

foreign key (字段名) references 主表(列)

 示例:

*创建班级表classes,id为主键

-- 创建班级表,有使用MySQL关键字作为字段时,需要使用··来标识

drop table id exists classesl;

 create table classes (

                id int PRIMARY KEY auto_increment,

                name varchar(20),

               `desc` VARCHAR(100)

);

*创建学生表,一个学生对应一个班级,一个班级对应多个学生,使用id作为主键,classes_id为外键,关联班级表id

-- 重置学生表结构

drop table if exists student;

create Table student(

                id int primary key auto_increment,

                sn int UNIQUE,name varchar(20) default '无名氏',

                qq_mail varchar(20),

                classes_id int,

                foreign key(classes_id) references classes(id)

);

2、表的设计

*需要从需求中获取类,类对应的是数据库中的实体,实体在数据库中的表现就是一张一张表,类中的属性就对应数据表中的字段

*根据实体编写SQL语句,DDL,创建具体的数据库,数据表

*设计表的时候会遵循一些范式,一般常说的有三大范式

*分类:第一范式1NF,第二范式2NF,第三范式3NF,BC范式BCNF

2.1、第一范式(一对一)

关系型数据库的最基本要求,不满足第一范式就不可以称为数据库

数据库的增删改查(二)

数据库的增删改查(二)

数据库的增删改查(二)

2.2、第二范式(一对多)

在满足第一范式的基础上,不存在非关键字段对任意候选字段的部分函数依赖(存在复合主键的情况下)

数据库的增删改查(二)

数据库的增删改查(二)

数据库的增删改查(二)

 不满足第二范式可能会出现的问题

数据库的增删改查(二)

*数据冗余: 学分和学生的姓名年龄都出现了,造成了大量的数据冗余。

*更新异常:如果要调整MySQL的学分,那么就需要更新所有的记录中关于MySQL的条目,如果一旦某些记录更新成功,某些更新失败,那么就会造成同一门课程出现不同分数的情况,数据不一致

*插入异常:每一门课都与学生都有对应的关系,只有同学选修并且通过考试获得了成绩,才可能生成一条记录,也就是一门新课程没有同学出成绩之前是无法写入数据的。

*删除异常:把毕业的同学考试成绩都删除了,删除记录的同时,课程和学分的信息也会被一块删除,导致一段时间内是没有课程和学分的数据信息。

2.3、第三范式(多对多)

数据库的增删改查(二)

 在第二范式的基础上,不存在非关键字段,对任意候选键(可以理解为主键,外键)的传递依赖

数据库的增删改查(二)

 数据库的增删改查(二)

 满足第三范式对于插入,更新,删除来说都是比较友好的,但是查询效率明显降低

比如说,要查询同学在那个学院,首先要查出来学生记录,再通过学生记录中的学员编号,再去数据库中查询学院信息

*创建课程表

-- 创建课程表
DROP TABLE IF EXISTS course;
CREATE TABLE course (
                   id INT PRIMARY KEY auto_increment,
                   name VARCHAR(20)
);

 *创建学生课程中间表,考试成绩表

DROP TABLE IF EXISTS score;
CREATE TABLE score (
                  id INT PRIMARY KEY auto_increment,
                  score DECIMAL(3, 1),
                  student_id int,
                  course_id int,
                  FOREIGN KEY (student_id) REFERENCES student(id),
                  FOREIGN KEY (course_id) REFERENCES course(id)
);文章来源地址https://www.toymoban.com/news/detail-476711.html

到了这里,关于数据库的增删改查(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据库概论】第二章 关系型数据库

    关系模型的数据结构十分简单,只包含单一的数据结构——关系。在用户看来,关系模型中数据的逻辑结构是一张扁平的二维表。关系模型的数据结构虽然简单却能表达丰富的语义。在关系模型中,现实世界的实体以及实体之间的联机都是用单一的关系结构类型来表示。 域(

    2024年02月05日
    浏览(56)
  • 关系型和非关系型数据库的区别

    关系型数据库,是指采用了关系模型来组织数据的数据库,关系型数据库的最大特点就是事务的一致性。关系型数据天然就是表格式的,因此数据存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。 优点 易于维护:都是使用表结构,格式一致。 使

    2024年02月13日
    浏览(89)
  • 非关系型数据库

    一、什么是非关系型数据库? 随着互联网的飞速发展,人们对数据存储和管理的需求越来越高,传统的关系型数据库遇到了越来越多的挑战。为了满足海量数据存储和高性能查询的需求,非关系型数据库(NoSQL)应运而生。 非关系型数据库是指不使用关系模型进行数据组织和

    2024年02月07日
    浏览(48)
  • 关系型数据库设计

    目录 1.数据库设计的重要性及定义 1.1 数据库设计的重要性 1.1.1 失败的数据库设计造成的后果  1.1.2 优秀的数据库设计带来的好处  1.2 数据库设计的定义  2.数据库需求分析  2.1 需求分析的步骤 2.1.1 收集信息 2.1.2 标识实体 2.1.3 标识每个实体的详细信息  2.1.4 标识实体之

    2024年04月10日
    浏览(65)
  • 常见数据库介绍对比之SQL关系型数据库

    关系型数据库是一种基于关系模型的数据库,它使用表格来组织和存储数据。下面是一些常见的关系型数据库: MySQL是一种开源的关系型数据库管理系统(RDBMS),广泛用于Web应用程序和企业级解决方案。它具有高性能、可靠性和易用性的特点,支持广泛的操作系统和编程语

    2024年02月09日
    浏览(60)
  • 从传统型数据库到非关系型数据库

         数据库顾名思义保存数据的仓库,其本质是一个具有数据存储功能的复杂系统软件,数据库最终把数据保存在计算机硬盘,但数据库并不是直接读写数据在硬盘,而是中间隔了一层操作系统,通过文件系统把数据保存为本地文件系统的数据文件;我们讲过Hadoop,分布式

    2024年02月04日
    浏览(44)
  • 数据库第十五课-------------非关系型数据库----------Redis

    🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉🎉🎉🎉🎉 🎂 🎂作者id:老秦包你会, 🎂 简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂 喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂

    2024年02月11日
    浏览(38)
  • 常见数据库介绍对比之NoSQL非关系型数据库

    常见的非关系型数据库(NoSQL)包括以下几种: MongoDB: MongoDB是最受欢迎的文档型数据库之一。它使用BSON(二进制JSON)格式存储数据,并提供灵活的数据模型和复杂的查询功能。MongoDB支持水平扩展和高可用性,并具有丰富的生态系统和工具支持。 CouchDB: CouchDB是另一个流行的

    2024年02月09日
    浏览(42)
  • 阿里云关系型数据库有哪些?RDS云数据库汇总

    阿里云RDS关系型数据库大全,关系型数据库包括MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等,NoSQL数据库如Redis、Tair、Lindorm和MongoDB,阿里云百科分享阿里云RDS关系型数据库大全: 目录 阿里云RDS关系型数据库大全 RDS关系型数据库大全 云原生数据库 PolarDB MySQL 版 云原生数据库

    2024年02月07日
    浏览(48)
  • Redis_非关系型数据库

    也叫Not Only SQL(不仅仅是SQL, 不用 sql语言操作的数据库), 一般指 非关系型数据库 关系型数据库: 以数据库表为单位存储,表与表之间存在某种关系 非关系型数据库: 数据与数据之间没有关系, 数据就是以键值对的形式存储, 通过键获取到值 在互联网发展中: 大致经历三个时期,w

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包