Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

12/09 : SQLException #6

Open
mynameisseohyeon opened this issue Dec 9, 2024 · 4 comments
Open

12/09 : SQLException #6

mynameisseohyeon opened this issue Dec 9, 2024 · 4 comments

Comments

@mynameisseohyeon
Copy link
Owner

Caused by: java.sql.SQLException: (conn=1318) Can't create table cocktail.calculate_recommended_cocktails (errno: 150 "Foreign key constraint is incorrectly formed")

@mynameisseohyeon
Copy link
Owner Author

mynameisseohyeon commented Dec 9, 2024

`SET FOREIGN_KEY_CHECKS = 0; -- 외래 키 체크 해제

DROP TABLE IF EXISTS cocktail; -- 기존 칵테일 테이블 제거
DROP TABLE IF EXISTS user; -- 기존 사용자 테이블 제거

CREATE DATABASE IF NOT EXISTS cocktail; -- 데이터베이스 생성
CREATE DATABASE IF NOT EXISTS user;

USE cocktail; -- 데이터베이스 사용
-- USE user;

-- 완전한 user 테이블 생성
-- CREATE TABLE user (
-- user_idx INT AUTO_INCREMENT PRIMARY KEY,
-- email VARCHAR(255) UNIQUE,
-- pw VARCHAR(255) NOT NULL,
-- username VARCHAR(255) NOT NULL,
-- age INT NOT NULL
-- );

-- -- cocktail 테이블 생성 (외래 키 포함)
-- CREATE TABLE cocktail (
-- idx INT AUTO_INCREMENT PRIMARY KEY,
-- name VARCHAR(255) NOT NULL,
-- abv INT NOT NULL,
-- taste VARCHAR(255) NOT NULL,
-- age_group INT NOT NULL,
-- snacks VARCHAR(255) NOT NULL,
-- price_range INT NOT NULL,
-- cocktail_info TEXT NOT NULL,
-- image VARCHAR(255) NOT NULL,
-- volume INT NOT NULL,
-- user_idx INT,
-- FOREIGN KEY (user_idx) REFERENCES user(user_idx)
-- );

-- 칵테일 데이터 삽입
INSERT INTO cocktail (name, abv, taste, age_group, snacks, price_range, cocktail_info, image, volume)
VALUES
("마가리타", 40, "신맛", 25, "칩", 12500, "마가리타는 소금으로 림을 장식한 클래식 데킬라 기반 칵테일입니다. 주로 데킬라, 라임 주스, 그리고 트리플 섹을 섞어 만들며, 상큼한 신맛과 함께 소금의 짭짤한 맛이 특징입니다. 이 칵테일은 보통 차갑게 제공되며, 종종 라임 웨지와 소금으로 림을 장식하여 제공됩니다.", "/img/cocktail1.jpg", 120),
("모히토", 15, "민트향", 25, "나초", 10000, "모히토는 럼, 신선한 민트 잎, 라임 주스, 설탕, 그리고 소다수를 섞어 만드는 쿠바식 칵테일입니다. 상큼하고 시원한 맛이 특징이며, 여름에 인기가 많습니다. 전통적으로는 라임 웨지와 민트 잎으로 장식하여 제공됩니다.", "/img/cocktail2.jpg", 200),
("올드 패션드", 35, "쓴맛", 35, "견과류", 15000, "올드 패션드는 위스키, 앙고스투라 비터스, 설탕 시럽, 그리고 물을 섞어 만드는 클래식 칵테일입니다. 쓴맛과 단맛이 조화롭게 어우러져 있으며, 종종 오렌지 껍질이나 체리로 장식하여 제공됩니다. 이 칵테일은 19세기 미국에서 유래되었으며, 오랜 역사를 가지고 있습니다.", "/img/cocktail3.jpg", 90),
("피나 콜라다", 13, "단맛", 25, "과일 플래터", 12500, "피나 콜라다는 코코넛 크림과 파인애플 주스를 섞어 만드는 트로피컬 칵테일입니다. 달콤하고 부드러운 맛이 특징이며, 종종 파인애플 조각이나 체리로 장식하여 제공됩니다. 이 칵테일은 특히 열대 지방에서 인기가 많으며, 휴가나 파티에서 즐기기 좋습니다.", "/img/cocktail4.jpg", 250),
("마티니", 30, "드라이", 35, "올리브", 17500, "마티니는 진과 드라이 베르무트를 섞어 만드는 클래식 칵테일입니다. 매우 심플하면서도 강렬한 맛이 특징이며, 올리브 한 개로 장식하여 제공됩니다. 마티니는 다양한 비율로 즐길 수 있으며, 비율에 따라 맛이 달라집니다. 예를 들어, 진의 비율이 높을수록 더 드라이한 맛이 납니다.", "/img/cocktail5.jpg", 75);

SET FOREIGN_KEY_CHECKS = 1; -- 외래 키 체크 복원

-- 데이터 조회
SELECT * FROM cocktail;
`

@mynameisseohyeon
Copy link
Owner Author

-- 외래 키 제약 조건 해제
SET FOREIGN_KEY_CHECKS = 0;

-- 기존 테이블 삭제
DROP TABLE IF EXISTS ingredient;
DROP TABLE IF EXISTS cocktail;

-- user 테이블 삭제: user 테이블이 다른 DB에 존재할 가능성 고려
DROP TABLE IF EXISTS user;

-- 데이터베이스 생성 (필요 시만 생성)
CREATE DATABASE IF NOT EXISTS cocktail;

-- cocktail 데이터베이스 사용
USE cocktail;

-- user 테이블 생성 (user 테이블이 이미 존재할 가능성 차단)
CREATE TABLE IF NOT EXISTS user (
user_idx INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) UNIQUE,
pw VARCHAR(255) NOT NULL,
username VARCHAR(255) NOT NULL,
age INT NOT NULL
);

-- cocktail 테이블 생성
CREATE TABLE IF NOT EXISTS cocktail (
idx INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
abv INT NOT NULL,
taste VARCHAR(255) NOT NULL,
age_group INT NOT NULL,
snacks VARCHAR(255) NOT NULL,
price_range INT NOT NULL,
cocktail_info TEXT NOT NULL,
image VARCHAR(255) NOT NULL,
volume INT NOT NULL,
user_idx INT,
FOREIGN KEY (user_idx) REFERENCES user(user_idx)
);

-- cocktail 데이터 삽입
INSERT INTO cocktail (name, abv, taste, age_group, snacks, price_range, cocktail_info, image, volume)
VALUES
("마가리타", 40, "신맛", 25, "칩", 12500, "마가리타는 소금으로 림을 장식한 클래식 데킬라 기반 칵테일입니다. 주로 데킬라, 라임 주스, 그리고 트리플 섹을 섞어 만들며, 상큼한 신맛과 함께 소금의 짭짤한 맛이 특징입니다.", "/img/cocktail1.jpg", 120),
("모히토", 15, "민트향", 25, "나초", 10000, "모히토는 럼, 신선한 민트 잎, 라임 주스, 설탕, 그리고 소다수를 섞어 만드는 쿠바식 칵테일입니다. 상큼하고 시원한 맛이 특징이며, 여름에 인기가 많습니다.", "/img/cocktail2.jpg", 200),
("올드 패션드", 35, "쓴맛", 35, "견과류", 15000, "올드 패션드는 위스키, 앙고스투라 비터스, 설탕 시럽, 그리고 물을 섞어 만드는 클래식 칵테일입니다. 쓴맛과 단맛이 조화롭게 어우러져 있으며, 종종 오렌지 껍질이나 체리로 장식하여 제공됩니다.", "/img/cocktail3.jpg", 90),
("피나 콜라다", 13, "단맛", 25, "과일 플래터", 12500, "피나 콜라다는 코코넛 크림과 파인애플 주스를 섞어 만드는 트로피컬 칵테일입니다. 달콤하고 부드러운 맛이 특징이며, 종종 파인애플 조각이나 체리로 장식하여 제공됩니다.", "/img/cocktail4.jpg", 250),
("마티니", 30, "드라이", 35, "올리브", 17500, "마티니는 진과 드라이 베르무트를 섞어 만드는 클래식 칵테일입니다. 매우 심플하면서도 강렬한 맛이 특징이며, 올리브 한 개로 장식하여 제공됩니다.", "/img/cocktail5.jpg", 75);

-- ingredient 테이블 생성
CREATE TABLE IF NOT EXISTS ingredient (
ingredient_idx BIGINT(20) AUTO_INCREMENT PRIMARY KEY,
ing_idx INT NOT NULL,
name VARCHAR(255) NOT NULL,
base_info TEXT NOT NULL,
image VARCHAR(255) NOT NULL,
CONSTRAINT FK_ingredient_cocktail FOREIGN KEY (ing_idx) REFERENCES cocktail (idx)
ON UPDATE CASCADE
ON DELETE CASCADE
);

-- ingredient 데이터 삽입
INSERT INTO ingredient (ing_idx, name, base_info, image)
VALUES
(1, '데킬라', '증류주의 한 종류. 알코올 도수는 대개 40도 이상이며 주로 칵테일을 제조하는 데 많이 사용된다.', '/img/base4.jpg'),
(1, '럼', '사탕수수즙 또는 당밀 등의 제당 공정 부산물을 발효·증류시켜 만든 증류주. 달콤한 냄새와 특유의 맛이 있고, 알콜분은 44∼45%, 엑스트랙트분은 0.2∼0.8%이다.', '/img/base3.jpg'),
(1, '비번 위스키', '아메리칸 위스키의 한 종류. 줄여서 ''버번'' 또는 ''버본''이라 부른다. ''부르봉''이라고 드물게 불린다.', '/img/base2.jpg'),
(1, '라이 위스키', '미국과 캐나다에서 생산되는 위스키의 한 종류. 호밀을 주원료로 사용해서 만든 위스키를 뜻한다. 줄여서 ''라이''라고 부른다.', '/img/base6.jpg'),
(1, '럼', '멕시코에서 생산되는 술. 증류주 중 하나로 알콜 농도는 38~52%. 할리스코 주에 위치한 테킬라1라는 지역의 이름을 딴 것.', '/img/base1.jpg'),
(1, '진', '진(gin)은 호밀 등을 원료로 하고 두송자로 독특한 향기를 낸 무색투명한 술로 도수는 40∼47도이다.', '/img/base1.jpg');

-- 외래 키 제약 조건 복원
SET FOREIGN_KEY_CHECKS = 1;

-- 데이터 확인
SELECT * FROM cocktail;
SELECT * FROM ingredient;

해당 sql문 실행 시 ingredient 데이터 생성 완료 / cocktail 데이터 생성 오류 발생

@mynameisseohyeon
Copy link
Owner Author

-- 외래 키 제약 조건 해제
SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS cocktail;

-- 데이터베이스 생성 (필요 시만 생성)
CREATE DATABASE IF NOT EXISTS cocktail;

USE cocktail;

-- cocktail 테이블 생성
CREATE TABLE IF NOT EXISTS cocktail (
idx INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
abv INT NOT NULL,
taste VARCHAR(255) NOT NULL,
age_group INT NOT NULL,
snacks VARCHAR(255) NOT NULL,
price_range INT NOT NULL,
cocktail_info TEXT NOT NULL,
image VARCHAR(255) NOT NULL,
volume INT NOT NULL,
user_idx INT,
FOREIGN KEY (user_idx) REFERENCES user(user_idx)
);

INSERT INTO cocktail (name, abv, taste, age_group, snacks, price_range, cocktail_info, image, volume)
VALUES
("마가리타", 40, "신맛", 25, "칩", 12500, "마가리타는 소금으로 림을 장식한 클래식 데킬라 기반 칵테일입니다. 주로 데킬라, 라임 주스, 그리고 트리플 섹을 섞어 만들며, 상큼한 신맛과 함께 소금의 짭짤한 맛이 특징입니다.", "/img/cocktail1.jpg", 120),
("모히토", 15, "민트향", 25, "나초", 10000, "모히토는 럼, 신선한 민트 잎, 라임 주스, 설탕, 그리고 소다수를 섞어 만드는 쿠바식 칵테일입니다. 상큼하고 시원한 맛이 특징이며, 여름에 인기가 많습니다.", "/img/cocktail2.jpg", 200),
("올드 패션드", 35, "쓴맛", 35, "견과류", 15000, "올드 패션드는 위스키, 앙고스투라 비터스, 설탕 시럽, 그리고 물을 섞어 만드는 클래식 칵테일입니다. 쓴맛과 단맛이 조화롭게 어우러져 있으며, 종종 오렌지 껍질이나 체리로 장식하여 제공됩니다.", "/img/cocktail3.jpg", 90),
("피나 콜라다", 13, "단맛", 25, "과일 플래터", 12500, "피나 콜라다는 코코넛 크림과 파인애플 주스를 섞어 만드는 트로피컬 칵테일입니다. 달콤하고 부드러운 맛이 특징이며, 종종 파인애플 조각이나 체리로 장식하여 제공됩니다.", "/img/cocktail4.jpg", 250),
("마티니", 30, "드라이", 35, "올리브", 17500, "마티니는 진과 드라이 베르무트를 섞어 만드는 클래식 칵테일입니다. 매우 심플하면서도 강렬한 맛이 특징이며, 올리브 한 개로 장식하여 제공됩니다.", "/img/cocktail5.jpg", 75);

-- 외래 키 제약 조건 복원
SET FOREIGN_KEY_CHECKS = 1;

-- 데이터 확인 쿼리
SELECT * FROM cocktail;

해당 쿼리를 다시 실행해줌으로써 cocktail 테이블 관련 오류 해결

@mynameisseohyeon
Copy link
Owner Author

SET FOREIGN_KEY_CHECKS = 0; -- Disable foreign key checks

-- Drop existing tables if they exist
DROP TABLE IF EXISTS cocktail;
DROP TABLE IF EXISTS user;

-- Create the database and use it
CREATE DATABASE IF NOT EXISTS cocktail;
USE cocktail;

-- Create the user table
CREATE TABLE user (
user_idx INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) UNIQUE,
pw VARCHAR(255) NOT NULL,
username VARCHAR(255) NOT NULL,
age INT NOT NULL
);

-- Create the cocktail table with cocktail_idx and foreign key constraint
CREATE TABLE cocktail (
idx INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
abv INT NOT NULL,
taste VARCHAR(255) NOT NULL,
age_group INT NOT NULL,
snacks VARCHAR(255) NOT NULL,
price_range INT NOT NULL,
cocktail_info TEXT NOT NULL,
image VARCHAR(255) NOT NULL,
volume INT NOT NULL,
user_idx INT,
cocktail_idx INT,
FOREIGN KEY (user_idx) REFERENCES user(user_idx)
);

-- Insert sample cocktail data
INSERT INTO cocktail (cocktail_idx, name, abv, taste, age_group, snacks, price_range, cocktail_info, image, volume)
VALUES
(NULL, "마가리타", 40, "신맛", 25, "칩", 12500, "마가리타는 소금으로 림을 장식한 클래식 데킬라 기반 칵테일입니다. 주로 데킬라, 라임 주스, 그리고 트리플 섹을 섞어 만들며, 상큼한 신맛과 함께 소금의 짭짤한 맛이 특징입니다. 이 칵테일은 보통 차갑게 제공되며, 종종 라임 웨지와 소금으로 림을 장식하여 제공됩니다.", "/img/cocktail1.jpg", 120),
(NULL, "모히토", 15, "민트향", 25, "나초", 10000, "모히토는 럼, 신선한 민트 잎, 라임 주스, 설탕, 그리고 소다수를 섞어 만드는 쿠바식 칵테일입니다. 상큼하고 시원한 맛이 특징이며, 여름에 인기가 많습니다. 전통적으로는 라임 웨지와 민트 잎으로 장식하여 제공됩니다.", "/img/cocktail2.jpg", 200),
(NULL, "올드 패션드", 35, "쓴맛", 35, "견과류", 15000, "올드 패션드는 위스키, 앙고스투라 비터스, 설탕 시럽, 그리고 물을 섞어 만드는 클래식 칵테일입니다. 쓴맛과 단맛이 조화롭게 어우러져 있으며, 종종 오렌지 껍질이나 체리로 장식하여 제공됩니다. 이 칵테일은 19세기 미국에서 유래되었으며, 오랜 역사를 가지고 있습니다.", "/img/cocktail3.jpg", 90),
(NULL, "피나 콜라다", 13, "단맛", 25, "과일 플래터", 12500, "피나 콜라다는 코코넛 크림과 파인애플 주스를 섞어 만드는 트로피컬 칵테일입니다. 달콤하고 부드러운 맛이 특징이며, 종종 파인애플 조각이나 체리로 장식하여 제공됩니다. 이 칵테일은 특히 열대 지방에서 인기가 많으며, 휴가나 파티에서 즐기기 좋습니다.", "/img/cocktail4.jpg", 250),
(NULL, "마티니", 30, "드라이", 35, "올리브", 17500, "마티니는 진과 드라이 베르무트를 섞어 만드는 클래식 칵테일입니다. 매우 심플하면서도 강렬한 맛이 특징이며, 올리브 한 개로 장식하여 제공됩니다. 마티니는 다양한 비율로 즐길 수 있으며, 비율에 따라 맛이 달라집니다. 예를 들어, 진의 비율이 높을수록 더 드라이한 맛이 납니다.", "/img/cocktail5.jpg", 75);

-- Restore foreign key checks
SET FOREIGN_KEY_CHECKS = 1;

SELECT * FROM cocktail;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant