mysql数据库创建spj表
时间: 2023-09-05 21:08:41 浏览: 239
创建 SPJ 表可以按照以下 SQL 语句操作:
```
CREATE TABLE spj (
s_id CHAR(5),
p_id CHAR(5),
j_id CHAR(5),
qty INT,
PRIMARY KEY (s_id, p_id, j_id),
FOREIGN KEY (s_id) REFERENCES suppliers(s_id),
FOREIGN KEY (p_id) REFERENCES parts(p_id),
FOREIGN KEY (j_id) REFERENCES projects(j_id)
);
```
其中,s_id、p_id 和 j_id 分别是供应商、零件和项目的 ID,qty 则是供应商提供的零件数量。在创建表时,我们设置了三个外键,分别引用了 suppliers、parts 和 projects 表中的 ID 字段,以确保 SPJ 表中的数据的完整性和一致性。
相关问题
(1) 请使用 MySQL命令创建 SPJ数据库及其包含的表 (若实验一已经创建SPJ数据库,请使用ALTERTABLE 命令按下要求修改实验一创建的SPJ数据库中的数据表)
创建SPJ数据库及其包含的表,可以按照以下步骤进行:
1. 登录MySQL数据库,使用以下命令创建SPJ数据库:
```
CREATE DATABASE SPJ;
```
2. 进入SPJ数据库,使用以下命令创建S表:
```
USE SPJ;
CREATE TABLE S(
SNO CHAR(3) PRIMARY KEY,
SNAME VARCHAR(20),
SADDR VARCHAR(20)
);
```
3. 使用以下命令创建P表:
```
CREATE TABLE P(
PNO CHAR(3) PRIMARY KEY,
PNAME VARCHAR(20),
COLOR VARCHAR(10),
WEIGHT DECIMAL(5,2)
);
```
4. 使用以下命令创建J表:
```
CREATE TABLE J(
JNO CHAR(3) PRIMARY KEY,
JNAME VARCHAR(20),
CITY VARCHAR(20)
);
```
5. 使用以下命令创建SP表:
```
CREATE TABLE SP(
SNO CHAR(3),
PNO CHAR(3),
JNO CHAR(3),
QTY INT,
PRIMARY KEY(SNO, PNO, JNO),
FOREIGN KEY(SNO) REFERENCES S(SNO),
FOREIGN KEY(PNO) REFERENCES P(PNO),
FOREIGN KEY(JNO) REFERENCES J(JNO)
);
```
如果实验一已经创建了SPJ数据库,可以使用ALTER TABLE命令修改数据表。例如,如果需要在S表中增加一个新的列SAGE,可以使用以下命令:
```
USE SPJ;
ALTER TABLE S ADD SAGE INT;
```
数据库实现创建一个存储过程,以工程号为参数,删除J表及SPJ表中相应的记录,如果不存在该工程,显示“无此工程!”;如果该工程没有零件供应记录,显示“该工程没有供应记录,J表中记录已删除!”;如果该工程有零件供应记录,显示“已删除J表及SPJ表中的记录!”
好的,以下是MySQL数据库实现的存储过程代码:
```mysql
DELIMITER // -- 改变语句结束符为 //
CREATE PROCEDURE delete_project(IN pno VARCHAR(20))
BEGIN
DECLARE spj_count INT;
SELECT COUNT(*) INTO spj_count FROM SPJ WHERE JNO IN (
SELECT JNO FROM J WHERE PNO = pno
);
IF spj_count > 0 THEN
DELETE FROM SPJ WHERE JNO IN (
SELECT JNO FROM J WHERE PNO = pno
);
END IF;
DELETE FROM J WHERE PNO = pno;
IF ROW_COUNT() = 0 THEN
SELECT '无此工程!' AS message;
ELSEIF spj_count = 0 THEN
SELECT '该工程没有供应记录,J表中记录已删除!' AS message;
ELSE
SELECT '已删除J表及SPJ表中的记录!' AS message;
END IF;
END//
DELIMITER ; -- 恢复语句结束符为 ;
```
该存储过程接受一个工程号作为参数,首先查询SPJ表中与该工程相关的记录数量,如果数量大于0,则删除SPJ表中对应的记录;然后删除J表中对应的记录。最后,根据删除的行数以及SPJ表记录数量的情况,返回相应的提示信息。
希望这个存储过程可以解决您的需求。
阅读全文