数据库主外键约束

2024-01-08 07:08
文章标签 数据库 约束 主外键

本文主要是介绍数据库主外键约束,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第二次实验内容

知识点准备
主键约束:主键约束可以唯一标识数据表中的每条记录,要求主键必须唯一,且其值不能为空。主键可以是单个字段,也可以是多个字段的联合。
 单字段主键

CREATE TABLE student_info(
学号 char(4) PRIMARY KEY ,
姓名 char(8) not NULL,
性别 char(2),
出生日期 DATE,
家庭住址 VARCHAR(50)
);

或者:

CREATE TABLE student_info(
学号 char(4) ,
姓名 char(8) not NULL,
性别 char(2),
出生日期 DATE,
家庭住址 VARCHAR(50),
PRIMARY KEY(学号),
);

 多字段主键(联合主键)

CREATE TABLE  grade(
学号 char(4) not NULL,
课程编号 char(4) not NULL,
分数 INT,
PRIMARY key(学号,课程编号)
);

外键约束:用来在两个表的数据之间建立连接,可以指定一个字段或者多个字段为外键。外键的作用是保护数据的引用完整性。一个表的外键可以为空值,若不为空值,则必须是另一个表中主键的某个值。
语法格式:

CREATE TABLE  grade(
学号 char(4) not NULL,
课程编号 char(4) not NULL,
分数 INT,
Constraint fk_curriculum_grade Foreign key(课程编号) references curriculum(课程编号);
);

 删除外键

ALTER TABLE XXX
DROP CONSTRAINT XXX;

 增加外键

ALTER TABLE XXX
ADD CONSTRAINT XXX
FOREIGN KEY (XXX)
REFERENCES XXX(XXX);

 级联操作

Alter table 表名 add constraint 外键名 
Foreign key(外键字段名称) references 主表名称(主表列名称) 
on update cascade on delete cascade;

唯一性约束:
语法:字段名 数据类型 unique

CREATE TABLE student_info(
学号 char(4) not NULL ,
姓名 char(8) not NULL,
性别 char(2),
邮箱地址  char(20) unique,
家庭住址 VARCHAR(50)
);

非空约束:
语法:字段名 数据类型 not null

CREATE TABLE  grade(
学号 char(4) not NULL,
课程编号 char(4) not NULL,
分数 INT
);

默认值约束:
语法:字段名 数据类型 default 默认值

CREATE TABLE student_info(
学号 char(4) not NULL ,
姓名 char(8) not NULL,
性别 char(2) default ‘男’,
邮箱地址  char(20) unique,
家庭住址 VARCHAR(50)
);

#1创建students数据库,在该数据库下创建表stu,并同时创建约束,表结构及约束要求如表1所示。

USE students;
drop TABLE if EXISTS stu;
CREATE TABLE stu (
学号 char(4) not NULL PRIMARY KEY,
姓名 char(8) NULL,
性别 char(2) NULL DEFAULT'男', #DEFAULT是指为此字段设置一个默认值
出生日期 date  NULL
);

#2创建表course,并同时创建约束,表结构及约束要求如表2所示。

USE students;
drop TABLE if EXISTS course;
CREATE TABLE course(
课号 char(4) NOT NULL,
课名 char(20) NULL,
学分 int NULL
);
ALTER TABLE course ADD CONSTRAINT uq_cname UNIQUE(课名);
DESC course;

#3创建表sc,并同时创建约束,表结构及约束要求如表3所示。设置(学号,课号)为主键。

drop TABLE if EXISTS sc ;
CREATE TABLE sc (
学号 char(4) not NULL ,
课号 char(4) NOT NULL,
成绩 DECIMAL(5,2) NULL , 
PRIMARY key(学号,课号),
CONSTRAINT fk_sno FOREIGN KEY(学号) REFERENCES stu(学号)
);
DESC sc;

#4为course表的’课号’列建立主键约束

ALTER TABLE course add CONSTRAINT PRIMARY KEY (课号);

#5为sc表的“课号”列建立外键约束fk_cno,参照course表的“课号”列的取值。要求设定级联更新。

ALTER TABLE sc ADD CONSTRAINT fk_cno FOREIGN KEY(课号) REFERENCES course(课号)
on update cascade on delete cascade;

#6为stu表的“姓名”列建立唯一约束,约束名uq_sname。

ALTER TABLE stu ADD CONSTRAINT uq_sname UNIQUE(姓名);

#插入表记录如下

INSERT INTO course
VALUES('C1','专业英语',3),
('C2','数据库',4),
('C3','大学语文',2);
INSERT INTO stu
VALUES('001','李宇秋','女','1990-1-8'),
('002','周浅','男','1987-12-12');
INSERT INTO sc
VALUES('001','C1',90),
('001','C2',76),
('002','C1',85),
('002','C3',100);
INSERT INTO sc 
VALUES('006','C5',99);
SELECT*FROM sc;
SELECT*FROM course;
SELECT*FROM stu;

#7将course表里的课号’C1’改为’C8’,查看sc表数据。将stu表002改为003,再查看sc表数据。

UPDATE course
SET 课号='C8'
WHERE 课号='C1';
DESC sc;
UPDATE stu 
SET 学号='003'
WHERE 学号='002';
DESC sc;

#8删除stu 表里的’0001’记录。

DELETE FROM stu WHERE 学号='0001';

#9往sc表插入(’0006’,’C5’,99)记录

INSERT INTO sc 
VALUES('0006','C5',99);
SELECT*FROM sc; 

#10删除sc表的外键约束fk_cno,fk_sno

ALTER TABLE sc drop FOREIGN KEY fk_cno;
ALTER TABLE sc drop FOREIGN KEY fk_sno;

#11删除stu表的主键约束

ALTER TABLE stu drop PRIMARY KEY ;

#12删除course表的唯一约束uq_cname

ALTER TABLE course drop INDEX uq_cname;

这篇关于数据库主外键约束的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/582650

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

poj 3159 (spfa差分约束最短路) poj 1201

poj 3159: 题意: 每次给出b比a多不多于c个糖果,求n最多比1多多少个糖果。 解析: 差分约束。 这个博客讲差分约束讲的比较好: http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 套个spfa。 代码: #include <iostream>#include <cstdio>#i

poj 3169 spfa 差分约束

题意: 给n只牛,这些牛有些关系。 ml个关系:fr 与 to 牛间的距离要小于等于 cost。 md个关系:fr 与 to 牛间的距离要大于等于 cost。 隐含关系: d[ i ] <= d[ i + 1 ] 解析: 用以上关系建图,求1-n间最短路即可。 新学了一种建图的方法。。。。。。 代码: #include <iostream>#include

POJ 1364差分约束

给出n个变量,m个约束公式 Sa + Sa+1 + .... + Sa+b < ki or > ki ,叫你判断是否存在着解满足这m组约束公式。 Sa + Sa+1   +   .+ Sa+b =  Sum[a+b] - Sum[a-1]  . 注意加入源点n+1 。 public class Main {public static void main(Strin

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

DM8数据库安装后配置

1 前言 在上篇文章中,我们已经成功将库装好。在安装完成后,为了能够更好地满足应用需求和保障系统的安全稳定运行,通常需要进行一些基本的配置。下面是一些常见的配置项: 数据库服务注册:默认包含14个功能模块,将这些模块注册成服务后,可以更好的启动和管理这些功能;基本的实例参数配置:契合应用场景和发挥系统的最大性能;备份:有备无患;… 2 注册实例服务 注册了实例服务后,可以使用系统服务管理,

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

开源分布式数据库中间件

转自:https://www.csdn.net/article/2015-07-16/2825228 MyCat:开源分布式数据库中间件 为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代。如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷。 MyCat的目标就是:低成本地将现有的单机数据库和应用平滑迁移到“云”端