我正在尝试插入一些数据,但它不起作用,我正在使用SQL学习数据库
CREATE DATABASE INSTITUTO2;
USE INSTITUTO2;
CREATE TABLE Alumnos (
Num_Alumno CHAR (4) ,
Nombre CHAR (15),
Apellidos CHAR (20),
Dirección CHAR (30),
Telefono CHAR (9),
CP CHAR (14),
Email CHAR(20)
);
CREATE TABLE Asignaturas (
Cod_Asignatura CHAR (2),
Nombre CHAR(30),
Creditos INT (2)
);
CREATE TABLE Matricula (
Num_Alumno CHAR (4),
Cod_Asignatura CHAR (2),
Nota_1EVA INT (2),
Nota_2EVA INT (2),
Nota_Junio INT (2),
Nota_Septiembre FLOAT (6,2)
);
ALTER TABLE Alumnos ADD CONSTRAINT PRIMARY KEY(Num_Alumno);
ALTER TABLE Alumnos MODIFY Telefono CHAR (9) NOT NULL;
ALTER TABLE Alumnos ADD CHECK (CP BETWEEN 28000 AND 28999);
ALTER TABLE Asignaturas ADD PRIMARY KEY PK_CODASIGNATURA (Cod_Asignatura);
ALTER TABLE Asignaturas MODIFY Creditos INT (2) NOT NULL;
ALTER TABLE Matricula ADD PRIMARY KEY PK_MATA (Num_Alumno,Cod_Asignatura); /
ALTER TABLE Matricula ADD FOREIGN KEY FK_NUMAL (Num_Alumno) REFERENCES Alumnos (Num_Alumno)ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE Matricula ADD FOREIGN KEY FK_CODIGOSASIG (Cod_Asignatura)REFERENCES Asignaturas (Cod_Asignatura)ON DELETE CASCADE ON UPDATE CASCADE;
INSERT INTO Alumnos VALUES('0001','Oscar','Gonzalez','Mayor,5','911234567','28801','oscar@yahoo.es');
INSERT INTO Alumnos VALUES('0002','Miguel','Ortiz','Princesa,4','913216549','28804','Miguel@terra.es');
INSERT INTO Alumnos (Num_Alumno, Nombre,Apellidos ,Dirección ,Telefono ,CP)
VALUES('0003','Jose','Gomez','Salamanca,3','918794568','28805');
INSERT INTO Alumnos VALUES('0004','Gema','Lopez','Mayor,8','918754981','28801','gema@terra.es');
INSERT INTO Alumnos (Num_Alumno, Nombre,Apellidos ,Dirección ,Telefono ,CP)
VALUES('0005','Javiel','Alonso','Ibiza,37','91875875','28814');
INSERT INTO Asignaturas (Cod_Asignatura, Nombre,Creditos)
VALUES ('SI','Sistemas','8'),
('PL','Programacion','12'),
('AN','Analisis','10'),
('RL','Redes locales','12'),
('BD','Bases de datos','10');
INSERT INTO Matricula (Num_Alumno, Cod_Asignatura, Nota_1EVA, Nota_2EVA, Nota_Junio)
VALUES ('003','AN','7','7','7'),
('003','PL','6','6','6');
我不明白因为我先输入asignaturas表....非常感谢你
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`instituto2`.`matricula`, CONSTRAINT `matricula_ibfk_2` FOREIGN KEY (`Num_Alumno`) REFERENCES `alumnos` (`Num_Alumno`) ON DELETE CASCADE ON UPDATE CASCADE)
答案 0 :(得分:0)
在你上次的INSERT中,你缺少一个'0'。
INSERT INTO Matricula (Num_Alumno, Cod_Asignatura, Nota_1EVA, Nota_2EVA, Nota_Junio)
VALUES ('0003','AN','7','7','7'), ('0003','PL','6','6','6');
答案 1 :(得分:0)
首先,您可以在表本身中包含主键和外键约束,以避免可能使事情变得更复杂的不必要代码。
所以你的表可以变成这样(也要记住有一个编写良好的格式化代码)。我还将使用VARCHAR
而不是CHAR
,因为它在内存分配和数据完整性方面要好得多。
CREATE TABLE Alumnos(
Num_Alumno VARCHAR(4) NOT NULL,
Nombre VARCHAR(15),
Apellidos VARCHAR(20),
Dirección VARCHAR(30),
Telefono VARCHAR(9) NOT NULL,
CP VARCHAR(14),
Email VARCHAR(20),
PRIMARY KEY(Num_Alumno)
);
CREATE TABLE Asignaturas(
Cod_Asignatura VARCHAR (2),
Nombre VARCHAR(30),
Creditos INT(2) NOT NULL,
PRIMARY KEY(Cod_Asignatura)
);
CREATE TABLE Matricula(
Num_Alumno VARCHAR(4),
Cod_Asignatura VARCHAR(2),
Nota_1EVA INT(2),
Nota_2EVA INT(2),
Nota_Junio INT(2),
Nota_Septiembre FLOAT(6,2),
PRIMARY KEY(Num_Alumno,Cod_Asignatura),
CONSTRAINT ForeignKey1
FOREIGN KEY (Num_Alumno)
REFERENCES Alumnos (Num_Alumno)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT ForeignKey1
FOREIGN KEY (Cod_Asignatura)
REFERENCES Asignaturas(Cod_Asignatura)
ON DELETE CASCADE ON UPDATE CASCADE
);
现在假设您已经完成了数据库和表格的创建,您已准备好制作一些inserts
。请注意,如果该键尚不存在,则无法添加其他表的外键值。因此,您必须在插入中保持正确的顺序。
更新:我在MySQL Workbench上测试了你的Inserts
。您的问题是您指的是数据库中不存在的外键。更确切地说,你在写:
INSERT INTO Matricula (Num_Alumno, Cod_Asignatura, Nota_1EVA, Nota_2EVA, Nota_Junio)
VALUES ('003','AN','7','7','7'), ('003','PL','6','6','6');
而不是
Error Error
VALUES ('0003','AN','7','7','7'), ('0003','PL','6','6','6');
建议:这是一个很好的练习,因为你正在学习以这种方式使用ALTER来查看它的功能,但是在创建自己的数据库时尽量避免使用它。 ALTER服务器的目的是在数据库中进行更改,我们希望保持数据和其他方式的完整性。
总之。继续练习,并尝试编写更清晰的代码!还要注意错误,因为他们总是指出问题所在。