首页 > 其他分享 >SchoolDB字段创建添加约束以及主键

SchoolDB字段创建添加约束以及主键

时间:2024-10-23 22:31:34浏览次数:1  
标签:VARCHAR CONSTRAINT gradeId SchoolDB 字段 KEY TABLE NULL 主键

-- SchoolDB字段创建添加约束以及主键
CREATE DATABASE SchoolDB;

USE SchoolDB;

CREATE TABLE Grade(
gradeId INT(4) NOT NULL,
gradeName VARCHAR(50) NOT NULL,
PRIMARY KEY (gradeId)
);

CREATE TABLE Subject(
subjectId INT(4) NOT NULL,
subjectName VARCHAR(20),
classHour INT(4),
gradeId INT(4),
PRIMARY KEY (subjectId),
CONSTRAINT CK_ch CHECK(classHour >= 0)
);

CREATE TABLE Student(
sudentNo VARCHAR(20) NOT NULL,
loginPwd VARCHAR(20) NOT NULL,
subjectName VARCHAR(50) NOT NULL, -- 注意:这里的 subjectName 字段可能不是必需的,因为学生和课程之间的关系应该在 Result 表中表示
sex CHAR(20) NOT NULL DEFAULT '男',
gradeId INT(4),
phone VARCHAR(20),
address VARCHAR(255) DEFAULT '地址不详',
bomDate DATE,
email VARCHAR(50),
identityCard VARCHAR(18) DEFAULT '全国唯一',
PRIMARY KEY (sudentNo),
CONSTRAINT UN_ic UNIQUE KEY(identityCard)
);

CREATE TABLE Result(
id INT(4) NOT NULL,
sudentNo VARCHAR(20) NOT NULL,
subjectId INT(4) NOT NULL,
subjectResult FLOAT(6,2) NOT NULL,
examDate DATETIME,
PRIMARY KEY (id),
CONSTRAINT CK_ch CHECK(subjectResult >= 0 AND subjectResult <= 100)
);

-- 添加外键约束
ALTER TABLE Subject
ADD CONSTRAINT FK_Subject_Grade FOREIGN KEY (gradeId) REFERENCES Grade(gradeId);

ALTER TABLE Student
ADD CONSTRAINT FK_Student_Grade FOREIGN KEY (gradeId) REFERENCES Grade(gradeId);

ALTER TABLE Result
ADD CONSTRAINT FK_Result_Student FOREIGN KEY (sudentNo) REFERENCES Student(sudentNo),
ADD CONSTRAINT FK_Result_Subject FOREIGN KEY (subjectId) REFERENCES Subject(subjectId);

-- 查看表结构(可选)
DESC Grade;
DESC Subject;
DESC Student;
DESC Result;
-- SchoolDB字段创建添加约束以及主键
CREATE DATABASE SchoolDB;

USE SchoolDB;

CREATE TABLE Grade(
gradeId INT(4) NOT NULL,
gradeName VARCHAR(50) NOT NULL,
PRIMARY KEY (gradeId)
);

CREATE TABLE Subject(
subjectId INT(4) NOT NULL,
subjectName VARCHAR(20),
classHour INT(4),
gradeId INT(4),
PRIMARY KEY (subjectId),
CONSTRAINT CK_ch CHECK(classHour >= 0)
);

CREATE TABLE Student(
sudentNo VARCHAR(20) NOT NULL,
loginPwd VARCHAR(20) NOT NULL,
subjectName VARCHAR(50) NOT NULL, -- 注意:这里的 subjectName 字段可能不是必需的,因为学生和课程之间的关系应该在 Result 表中表示
sex CHAR(20) NOT NULL DEFAULT '男',
gradeId INT(4),
phone VARCHAR(20),
address VARCHAR(255) DEFAULT '地址不详',
bomDate DATE,
email VARCHAR(50),
identityCard VARCHAR(18) DEFAULT '全国唯一',
PRIMARY KEY (sudentNo),
CONSTRAINT UN_ic UNIQUE KEY(identityCard)
);

CREATE TABLE Result(
id INT(4) NOT NULL,
sudentNo VARCHAR(20) NOT NULL,
subjectId INT(4) NOT NULL,
subjectResult FLOAT(6,2) NOT NULL,
examDate DATETIME,
PRIMARY KEY (id),
CONSTRAINT CK_ch CHECK(subjectResult >= 0 AND subjectResult <= 100)
);

-- 添加外键约束
ALTER TABLE Subject
ADD CONSTRAINT FK_Subject_Grade FOREIGN KEY (gradeId) REFERENCES Grade(gradeId);

ALTER TABLE Student
ADD CONSTRAINT FK_Student_Grade FOREIGN KEY (gradeId) REFERENCES Grade(gradeId);

ALTER TABLE Result
ADD CONSTRAINT FK_Result_Student FOREIGN KEY (sudentNo) REFERENCES Student(sudentNo),
ADD CONSTRAINT FK_Result_Subject FOREIGN KEY (subjectId) REFERENCES Subject(subjectId);

-- 查看表结构(可选)
DESC Grade;
DESC Subject;
DESC Student;
DESC Result;

标签:VARCHAR,CONSTRAINT,gradeId,SchoolDB,字段,KEY,TABLE,NULL,主键
From: https://www.cnblogs.com/gdmiles/p/18498517

相关文章

  • 如何调整要素类中的字段顺序?
    一、只做临时调整,保持底层不变的方法1.ArcMap的图层属性表里,可以通过左右拖拽的方式移动字段位置2.ArcMap的图层属性里,找到字段选项卡,可以选中字段上移下移以上两种方式都是临时的,只要把数据重新添加到地图项目中,就会发现字段顺序并没有变化,或者在catalog的数据属性中切换到字......
  • schooldb字段创建添加约束以及主键
    --schooldb字段创建添加约束以及主键创建数据库和表(之前已经创建的部分)CREATEDATABASESchoolDB;USESchoolDB;CREATETABLEGrade(gradeIdINT(4)NOTNULL,gradeNameVARCHAR(50)NOTNULL,PRIMARYKEY(gradeId));CREATETABLESubject(subjectIdINT(4)NOTNULL,......
  • Mybatisplus TableInfoHelper:获取entity对应的数据表字段列表
    如题,调用TableInfoHelper#getTableInfo(clazz)这个工具方法可以得到entity类所对应的数据表的字段列表。importcom.baomidou.mybatisplus.core.metadata.TableInfoHelper;importcom.baomidou.mybatisplus.core.metadata.TableFieldInfo;importcom.baomidou.mybatisplus.co......
  • postgresql中数据表如何通过一个字段标识数据行多种状态?
    通常我们在业务开发过程中,为了避免多余字段的创建,要尽可能的减少单表字段个数,针对一些数据状态可以采用一个数字融合多种数据状态。以下是业务开发过程中的枚举类:@GetterpublicenumTicketTagEnum{REMINDERS(1,"状态1"),REASSIGNMENT(2,"状态2"),REWORK(4......
  • 使用 `com.google.gson` 库将 Java 对象转换为 JSON 字符串,并且确保 `data` 字段是 `M
    要使用com.google.gson库将Java对象转换为JSON字符串,并且确保data字段是Map<String,Object>类型的,你可以按照以下步骤编写一个示例代码。这个示例代码将创建一个包含data字段的Java对象,并将data字段初始化为一个Map<String,Object>,然后动态地向其中添加......
  • 时间戳字段减去指定时间
    在MySQL中,你可以使用`DATE_SUB()`函数来从时间戳字段中减去半小时。`DATE_SUB()`函数允许你从日期或时间中减去指定的时间间隔。下面是如何使用这个函数来从一个时间戳字段减去半小时的例子:假设你有一个表`my_table`,其中包含一个名为`timestamp_column`的时间戳字段,你......
  • 使用MySQL之创建计算字段
    1.创建计算字段存储在数据库表中的数据一般不是应用程序所需要的格式。下面举几个例子。如果想在一个字段中既显示公司名,又显示公司的地址,但这两个信息一般包含在不同的表列中。城市、州和邮政编码存储在不同的列中(应该这样),但邮件标签打印程序却需要把它们作为一个恰当格......
  • 公共字段自动填充-AOP
    1.问题描述1).在新增数据时,要将createTime、updateTime设置为当前时间,createUser、updateUser设置为当前登录用户ID。2).在更新数据时,要将updateTime设置为当前时间,updateUser设置为当前登录用户ID。在所有的新增和更新的业务操作中,都需要对上述字段进行赋值操......
  • 我在创建表时,建表语句中不同数据类型字段的排列顺序对性能有影响吗?
    在MySQL或其他数据库管理系统(DBMS)中,字段的排列顺序对表的性能影响并不是非常显著或直接的,但在某些特定情况下,优化字段排列可以带来一些性能或存储效率上的好处。以下是一些需要考虑的因素,尤其是当涉及大量数据和性能优化时。1.数据类型的对齐和存储效率MySQL在存储数据时,试......
  • 我在查询SQL的时候也可以使用反引号吧? 我应该也可以把mysql的已使用的关键字用反引号
    是的,您在编写查询SQL时也可以使用反引号(`)来包裹表名和字段名。反引号可以帮助您避免与MySQL的保留关键字发生冲突,确保SQL语句能够正确执行。查询时使用反引号的示例如果您有一个表名或字段名与MySQL关键字相同,您可以使用反引号在查询中包裹它们:SELECT`id`,`name`,`l......