题目:创建一个教务管理数据库,名称为 JWGL
在 JWGL 数据库中创建学生表 Student、课程表 Course、学生选课表 SC,它们的表结构如下所示:
学生表Student
列名 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 |
---|---|---|---|---|---|
Sno | char | 8 | × | 主键 | |
Sname | varchar | 10 | × | ||
Sex | char | 2 | × | 男 | 只能“男”或“女” |
Age | tinyint | × | 20 | 只能为 15-30 | |
Phonenumber | char | 12 | √ | 取值唯一 | |
Sdept | varchar | 20 | × |
课程表Course
列名 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 |
---|---|---|---|---|---|
Cno | char | 10 | × | 主键 | |
Cname | varchar | 20 | × | 取值唯一 | |
Total_perior | tinyint | √ | 64 | 只能为32-108 | |
Week_perior | tinyint | √ | 4 | 只能为2-7 | |
Credit | tinyint | × | 4 | 只能为1-7 | |
Pcno | char | 10 | √ |
学生选课表SC
列名 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 |
---|---|---|---|---|---|
Sno | char | 8 | × | 主键、外键 | |
Cno | char | 10 | × | 主键、外键 | |
Grade | tinyint | √ | 只能为0-100 |
首先需要启动mysql服务,这部分之前的博客中已经介绍过,这里就不做过多陈述,有需要可查看mysql服务的启动
接下来,我们需要创建一个数据库
CREATE DATABASE JWGL; /* 创建一个名为JWGL的数据库 */
SHOW DATABASES; /* 显示所有的数据库 */
结果如下:
此处需要注意,创建数据库时使用的是database,而显示时使用的是databases,显示时显示的是所有的,因此加了s,后面表的创建和显示也与之类似。
创建好数据库之后,我们需要创建表了,然而如上图所示,已有的数据库不止一个,怎样才能保证创建的表在数据库JWGL中呢?我们需要选择数据库。
USE JWGL; /* 选择使用JWGL这个数据库 */
这样,我们便可以随意切换数据库而不用担心表创建到别的数据库里了。
接下来便开始创建第一张表——学生表Student;
CREATE TABLE Student( /* 创建一个名为Student的表*/
Sno CHAR(8) PRIMARY KEY COMMENT '主键',
/*
CHAR(8):SNO为长度为8的定长字符串;
PRIMARY KEY:设置为主键;
COMMENT '主键':注释Sno为主键
*/
Sname VARCHAR(10) NOT NULL,
/* VARCHAR(10):Sname为最大长度为10的变长字符串,NOT NULL:不能为空值*/
Sex ENUM ('男','女') NOT NULL COMMENT '只能“男”或“女”',
/*
ENUM ('男','女'):Sex只能在“男”和“女”里面选;,
NOT NULL:不能为空值;
COMMENT '只能“男”或“女”':注释Sex;
由于此项里限定了Sex只能在枚举出的“男”和“女”里面选择,并且不能为空,因此默认为枚举出的第一个选项“男”
*/
Age TINYINT CHECK(Age BetWEEN 15 AND 30) DEFAULT 20 NOT NULL COMMENT '只能为15-30',
/*
TINYINT:Age为TINYINT类型,取值范围在(-128,127);
CHECK(Age BetWEEN 15 AND 30):限制范围在15-30之间;
DEFAULT 20:默认值为20;
COMMENT '只能为15-30':注释Age
*/
Phonenumber CHAR(12) UNIQUE COMMENT '取值唯一',
/*CHAR(12):Phonenumber为定长为12的字符串;
UNIQUE:取值唯一,不能重复;
COMMENT '取值唯一':注释Phonenumber
*/
Sdept VARCHAR(20) NOT NULL
/*
VARCHAR(20):Sdept 为最大长度为20的变长字符串;
NOT NULL:Sdept不能为控制
*/
)COMMENT='学生表'; /* Student表添加注释为“学生表”*/
创建基本表时,表中内容用","隔开,当一条命令输出完毕,在最后添加上“;”,若中途输错,想退出重新输入,也可使用“;”结束。
接下来创建剩下两张表:
课程表Course:
CREATE TABLE Course( /* 定义一个名为Course的表 */
Cno CHAR(10) PRIMARY KEY COMMENT '主键',
/*
CHAR(10):Cno为定长为10的字符串;
PRIMARY KEY:设置为主键;
COMMENT '主键':注释Cno
*/
Cname VARCHAR(20) UNIQUE NOT NULL COMMENT '取值唯一',
/*
VARCHAR(20):Cname为最大长度为20的变长字符串;
UNIQUE:Cname取值唯一,不能重复;
NOT NULL:Cname不能为空;
COMMENT '取值唯一':注释Cname
*/
Total_perior TINYINT CHECK(Total_perior BETWEEN 32 AND 108) DEFAULT 64 COMMENT '只能为32-108',
/*
TINYINT:Total_perior为TINYINT类型,取值范围在(-128,127);
CHECK(Total_perior BetWEEN 32 AND 108):限制范围在32-108之间;
DEFAULT 64:默认值为64;
COMMENT '只能为32-128':注释Total_perior
*/
Week_perior TINYINT CHECK(Week_perior BETWEEN 2 AND 7) DEFAULT 4 COMMENT '只能为2-7',
/*
TINYINT:Week_perior为TINYINT类型,取值范围在(-128,127);
CHECK(Week_perior BetWEEN 2 AND 7):限制范围在2-7之间;
DEFAULT 4:默认值为4;
COMMENT '只能为2-7':注释Week_perior
*/
Credit TINYINT CHECK(Credit BETWEEN 1 AND 7)DEFAULT 4 NOT NULL COMMENT '只能为1-7',
/*
TINYINT:Credit为TINYINT类型,取值范围在(-128,127);
CHECK(Credit BetWEEN 1 AND 7):限制范围在1-7之间;
DEFAULT 4:默认值为4;
COMMENT '只能为1-7':注释Credit
*/
Pcno CHAR(10)
/*
CHAR(10):Pcno为定长为10的字符串
*/
)COMMENT='课程表'; /* Course表添加注释为“课程表”*/
学生选课表SC:
CREATE TABLE SC(
Sno CHAR(10) COMMENT '主键、外键',
/*
CHAR(10):Sno为长度为10的定长字符串;
COMMENT '组件、外键':注释Sno
*/
Cno CHAR(10) COMMENT '主键、外键',
/*
CHAR(10):Cno为长度为10的定长字符串;
COMMENT '组件、外键':注释Cno
*/
Grade TINYINT CHECK(Grade BETWEEN 0 AND 100) COMMENT '只能为0-100',
/*
TINYINT:Grade为TINYINT类型,取值范围在(-128,127);
CHECK(Grade BetWEEN 0 AND 100):限制范围在0-100之间;
COMMENT '只能为0-100':注释Grade
*/
PRIMARY KEY(SNO,CNO),
/*
设置SNO,CNO这个组合为主键
*/
FOREIGN KEY (SNO) REFERENCES Student(SNO),
/*设置SNO为外键,用于关联Student表,SNO为表Student的主键*/
FOREIGN KEY (CNO) REFERENCES Course(CNO)
/*设置CNO为外键,用于关联Student表,Cno为表Course的主键*/
)COMMENT='学生选课表'; /* SC添加注释为“学生选课表”*/
基本表创建完成了,你可以查看下数据库中的表。
SHOW TABLES;
当然,你还可以进一步查看表中的具体信息,比如Course表。
DESC COURSE;
到现在为止,一个数据库就创建完成了,可以对其增、删、改、查了。