【MySQL】——用SQL语句实现数据库和基本表的创建

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【MySQL】——用SQL语句实现数据库和基本表的创建

🎯目的:

       熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性的定义和维护方法;掌握用户自定义完整性的定义和维护方法。


🎯内容:

(一)用SQL语句建立如下mystudent数据库,包括student、course、sc三个基本表,要求实现关系的三类完整性。


学生表student由学号Sno、姓名Sname、性别 Ssex、年龄 Sage、所在系Sdept组成。

表1-1 student表

Sno

Sname

Ssex

Sage

Sdept

201215121

李勇

20

CS

201215122

刘晨

19

CS

201215123

王敏

18

MA

201215125

张立

19

IS


代码如下:

CREATE TABLE Student          
 
      (Sno   CHAR(9)  PRIMARY  KEY,  /* 列级完整性约束条件,Sno是主码*/                  
 
        Sname  CHAR(20)  UNIQUE,     /* Sname取唯一值*/
 
        Ssex    CHAR(2),
 
        Sage   SMALLINT,
 
        Sdept  CHAR(20)
 
      )charset utf8;


插入数据:

INSERT INTO student VALUES
 
("201215121","李勇","男",20,"CS"),
 
("201215122","刘晨","女",19,"CS"),
 
("201215123","王敏","女",18,"MA"),
 
("201215125","张立","男",19,"IS");


课程表course由课程号Cno、课程名Cname、先行课Cpno、学分Ccredit组成。

表1-2 course表

Cno

Cname

Cpno

Ccredit

1

数据库

5

4

2

数学

2

3

信息系统

1

4

4

操作系统

6

3

5

数据结构

7

4

6

数据处理

2

7

PASCAL语言

6

4


代码如下:

CREATE TABLE  Course
 
          (Cno       CHAR(4)  PRIMARY  KEY,
 
          Cname  CHAR(40),            
 
           Cpno     CHAR(4),                                      
 
            Ccredit  SMALLINT,
 
            FOREIGN KEY (Cpno) REFERENCES  Course(Cno)
 
          ) charset utf8;

插入数据:

INSERT INTO course (Cno,Cname,Ccredit) VALUES
 
("1","数据库",4),
 
("2","数学",2),
 
("3","信息系统",4),
 
("4","操作系统",3),
 
("5","数据结构",4),
 
("6","数据处理",2),
 
("7","PASCAL语言",4);
 
 
 
update course set Cpno = case Cno
 
when '1' then '5'
 
when '3' then '1'
 
when '4' then '6'
 
when '5' then '7'
 
WHEN '7' then '6'
 
end
 
WHERE Cno IN('1','3','4','5','7');


选课表sc由学号Sno、课程号Cno、成绩Grade组成。

表1-3 sc表

Sno

Cno

Grade

201215121

1

92

201215121

2

85

201215121

3

88

201215122

2

90

201215122

3

80


代码如下:

CREATE TABLE  SC
 
          (Sno  CHAR(9),
 
           Cno  CHAR(4),  
 
           Grade  SMALLINT,
 
           PRIMARY KEY (Sno,Cno),  
 
           FOREIGN KEY (Sno) REFERENCES Student(Sno),
 
           FOREIGN KEY (Cno)REFERENCES Course(Cno)
 
        ) charset utf8;


插入数据:

INSERT INTO sc(Sno,Cno,Grade) values
 
("201215121","1",92),
 
("201215121","2",85),
 
("201215121","3",88),
 
("201215122","2",90),
 
("201215122","3",80);

(二)用SQL语句建立如下mySPJ数据库,包括S,P,J,和SPJ四个基本表(教材第二章习题5中的四个表),要求实现关系的三类完整性。


S(SNO,SNAME,STATUS,CITY);


P(PNO,PNAME,COLOR,WEIGHT);


J(JNO,JNAME,CITY);


SPJ(SNO,PNO,JNO,QTY)


供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成。

表1-4 供应商表S

SNO

SNAME

STATUS

CITY

S1

精益

20

天津

S2

盛锡

10

北京

S3

东方红

30

北京

S4

丰泰盛

20

天津

S5

为民

30

上海


代码如下:

CREATE TABLE S
 
(SNO CHAR(4) PRIMARY KEY,
 
SNAME CHAR(4),
 
STATUS CHAR(4),
 
CITY CHAR(4)
 
)CHARSET utf8;
 
插入数据:
 
INSERT INTO s VALUES
 
("S1","精益","20","天津"),
 
("S2","盛锡","10","北京"),
 
("S3","东方红","30","北京"),
 
("S4","丰泰盛","20","天津"),
 
("S5","为民","30","上海");


零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成。

表1-5 零件表P

PNO

PNAME

COLOR

WEIGHT

P1

螺母

12

P2

螺丝

绿

17

P3

螺丝刀

14

P4

螺丝刀

14

P5

凸轮

40

P6

齿轮

30


代码如下:

CREATE TABLE p
 
(PNO CHAR(4) PRIMARY KEY,
 
PNAME CHAR(4),
 
COLOR CHAR(4),
 
WEIGHT char(4)
 
)CHARSET utf8;
 
插入数据:
 
INSERT INTO p VALUES
 
("P1","螺母","红","12"),
 
("P2","螺丝","绿","17"),
 
("P3","螺丝刀","蓝","14"),
 
("P4","螺丝刀","红","14"),
 
("P5","凸轮","蓝","40"),
 
("P6","齿轮","红","30");


工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。

表1-6 工程项目表J

JNO

JNAME

CITY

J1

三建

北京

J2

一汽

长春

J3

弹 簧 厂

天津

J4

造 船 厂

天津

J5

机 车 厂

唐山

J6

无线电厂

常州

J7

半导体厂

南京


代码如下:

CREATE TABLE j
 
(JNO CHAR(4),
 
JNAME CHAR(4),
 
CITY CHAR(4)
 
)CHARSET utf8;  
 
插入数据:
 
INSERT INTO j VALUES
 
("J1","三建","北京"),
 
("J2","一汽","长春"),
 
("J3","弹簧厂","天津"),
 
("J4","造船厂","天津"),
 
("J5","机车厂","唐山"),
 
("J6","无线电厂","常州"),
 
("J7","半导体厂","南京");


供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,表示某供应商 供应某种零件 给某工程项目的数量为QTY。

表1-7 供应情况表SPJ

SNO

PNO

JNO

QTY

S1

P1

J1

200

S1

P1

J2

5000

S1

P1

J3

100

S1

P1

J4

700

S1

P2

J2

100

S2

P3

J1

400

S2

P3

J2

200

S2

P3

J4

500

S2

P3

J5

400

S2

P5

J1

400

S2

P5

J2

100

S3

P1

J1

200

S3

P3

J1

200

S4

P5

J1

100

S4

P6

J3

300

S4

P6

J4

200

S5

P2

J4

100

S5

P3

J1

200

S5

P6

J2

200

S5

P6

J4

500


代码如下:

CREATE TABLE spj
 
(SNO CHAR(4),
 
PNO CHAR(4),
 
JNO CHAR(4),
 
QTY char(4),
 
PRIMARY KEY (SNO,PNO,JNO),
 
FOREIGN KEY (SNO) REFERENCES s(SNO),
 
FOREIGN KEY (PNO) REFERENCES p(PNO),
 
FOREIGN KEY (JNO) REFERENCES j(JNO)
 
)CHARSET utf8;


插入数据:

INSERT INTO spj VALUES
 
("S1","P1","J1","200"),
 
("S1","P1","J2","5000"),
 
("S1","P1","J3","100"),
 
("S1","P1","J4","700"),
 
("S1","P2","J2","100"),
 
("S2","P3","J1","400"),
 
("S2","P3","J2","200"),
 
("S2","P3","J4","500"),
 
("S2","P3","J5","400"),
 
("S2","P5","J1","400"),
 
("S2","P5","J2","100"),
 
("S3","P1","J1","200"),
 
("S3","P3","J1","200"),
 
("S4","P5","J1","100"),
 
("S4","P6","J3","300"),
 
("S4","P6","J4","200"),
 
("S5","P2","J4","100"),
 
("S5","P3","J1","200"),
 
("S5","P6","J2","200"),
 
("S5","P6","J4","500");
 
SELECT *FROM spj;


🎯运行结果:

(一)用SQL语句建立如下mystudent数据库,包括student、course、sc三个基本表,要求实现关系的三类完整性。

1.创建一张学生表

2.创建一张课程表

3.创建一张选课表


(二)用SQL语句建立如下mySPJ数据库,包括S,P,J,和SPJ四个基本表(教材第二章习题5中的四个表),要求实现关系的三类完整性。

1.创建供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成。

2.创建零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成。

3.创建工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。

4.创建供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,表示某供应商 供应某种零件 给某工程项目的数量为QTY。



🎯问题及解决:

问题一:主码可以为可以为空吗?


答:主码并不能为空值,必须取值。


问题二:为什么有的主码无法删除,如果想要删除,应如何做?


答:因为有的主码会被其他表中的外码中作为参考,无法删除。要想删除,必须先把其他表中的外码删除,再删除这个主码。


问题三:如果外码和其参考码在同一个表中应如何编辑数据?


答:应该先插入参考码和其他码(外码先不插入数据),插入完成之后,再去更新(一定要是update更新,而不是insert插入)外码的值。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
10天前
|
SQL 机器学习/深度学习 人工智能
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
本文系统性地阐述了自然语言转SQL(NL2SQL) 技术如何让非技术背景的业务分析师实现数据自助查询,从而提升数据驱动决策的效率与准确性。
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
|
2月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
3月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
200 62
|
2月前
|
SQL 缓存 监控
SqlRest让SQL秒变Http API,还支持20+数据库(含国产数据库)
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
2月前
|
SQL 存储 数据库
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
332 0
|
2月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
172 0
|
4月前
|
SQL 数据采集 关系型数据库
实现MySQL与SQL Server之间数据迁移的有效方法
总的来说,从MySQL到SQL Server的数据迁移是一个涉及到很多步骤的过程,可能会遇到各种问题和挑战。但只要精心规划、仔细执行,这个任务是完全可以完成的。
255 18
|
3月前
|
SQL 人工智能 关系型数据库
GitHub 热门!MindsDB 破解 AI + 数据库瓶颈,究竟有什么惊艳亮点?只需 SQL 即可实现智能预测
MindsDB 是一款将 AI 能力直接注入数据库的开源工具,支持 MySQL、PostgreSQL 等多种数据库连接,通过 SQL 即可完成模型训练与预测。它提供 AutoML 引擎、LLM 集成、联邦查询等功能,简化 MLOps 流程,实现数据到智能的无缝衔接。项目在 GitHub 上已获 32.4k 星,社区活跃,适用于客户流失预警、推荐系统、情感分析等场景。开发者无需深入模型细节,即可快速构建智能解决方案。项目地址:https://github.com/mindsdb/mindsdb。
225 0
|
3月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
554 1
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!

热门文章

最新文章

推荐镜像

更多