유재우 | 차경태 | 이승용 | 안상현 | 이희진 |
---|---|---|---|---|
팀장 | 팀원 | 팀원 | 팀원 | 팀원 |
BeyondCloud는 사용자들에게 다양한 음악을 즐길 수 있는 서비스를 제공하는 플랫폼입니다.
- 아티스트로 등록된 유저만이 앨범과 음악을 등록 일반 유저는 등록된 음악을 감상하고 좋아요와 댓글을 남길 수 있습니다. 이를 통해 아티스트와 청취자 간의 명확한 역할 구분과 상호작용을 강화합니다.
- 공유가 허용된 다른 사람의 플레이리스트를 무작위로 추천해주는 "이 음악 어때?" 기능 이를 통해 사용자는 몰랐던 숨은 명곡들을 발견하고 음악적 식견을 넓힐 수 있습니다.
- 여러 카테고리의 Top 100 차트 제공 사용자들은 최신 트렌드와 인기 있는 곡들을 쉽게 파악할 수 있습니다.
- 앨범에 좋아요를 남길 수 있는 기능 제공
특정 앨범이 좋아요 10만 개 이상을 받을 경우
명반
타이틀을 획득하게 됩니다. 이 타이틀은 1년 단위로 집계되어 업데이트됩니다. - 이러한 기능들은 사용자들에게 풍부한 음악 경험과 커뮤니티 참여 기회를 제공합니다.
- 사용자 중심의 음악 감상 환경 제공: 기존 음악 스트리밍 서비스에서 부족했던 개인화된 기능과 사용자 간 상호작용을 강화합니다.
- 아티스트와 팬의 연결: 아티스트가 직접 자신의 곡을 등록하고 관리할 수 있어 팬들과 더 가까워질 수 있는 기회를 제공합니다.
- 플레이리스트 공유 문화 활성화: 사용자들이 자신만의 플레이리스트를 공유하거나 타인의 플레이리스트를 탐색할 수 있어 음악 취향을 넓힐 수 있습니다.
- 음악 데이터 기반 차트 제공: 실시간 스트리밍 데이터를 기반으로 한 차트를 통해 최신 트렌드와 인기 곡을 쉽게 파악할 수 있습니다.
- 회원가입 및 로그인/로그아웃
- 회원 정보 수정 및 탈퇴
- 아티스트 승인 요청 및 관리
- 노래 등록 및 관리
- 등록된 노래 수정/삭제
- 노래에 대한 댓글 및 좋아요 기능
- 개인 플레이리스트 생성, 수정, 삭제
- 플레이리스트 내 곡 추가 및 삭제
- 공유 허용된 플레이리스트 탐색 및 복사
- 무작위 추천 플레이리스트 제공 ("이 음악 어때?" 기능)
- 현재 재생 중인 곡 조회
- 노래 또는 앨범 추가 (중복 방지)
- 자동 재생 규칙 설정 (무작위/순서대로)
- 매일 갱신되는 Top 100 차트 제공 (스트리밍 데이터 기준)
- 장르별 및 연도별 차트 제공
- 신곡 추천 기능
- 제목, 가수 이름, 장르로 검색 가능
- 좋아요 10만 개 이상 시 명반 등극
- 앨범 단위로 플레이리스트에 추가 가능
CREATE TABLE IF NOT EXISTS `Role` (
`role_code` INT NOT NULL,
`name` VARCHAR(10) NOT NULL,
PRIMARY KEY (`role_code`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE if NOT exists `Member` (
`member_id` bigint NOT NULL auto_increment,
`password` varchar(20) NOT NULL,
`name` varchar(10) NOT NULL,
`isLogin` tinyint NOT NULL DEFAULT 0,
`reg_date` Date NOT NULL DEFAULT CURDATE(),
`email` varchar(50) NOT NULL,
`nickname` varchar(50) NOT NULL,
`role_code` int NOT NULL DEFAULT 0,
PRIMARY KEY(`member_id`),
FOREIGN KEY (`role_code`) REFERENCES `Role` (`role_code`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS `PlayList` (
`playList_id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`isPublic` tinyint NOT NULL DEFAULT 0,
`reg_date` Date NOT NULL DEFAULT CURDATE(),
`member_id` bigint NOT NULL,
PRIMARY KEY(`playList_id`),
FOREIGN KEY (`member_id`) REFERENCES `Member` (`member_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS `Album` (
`album_id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`member_id` bigint NOT NULL,
`Field` tinyint(1) NOT NULL DEFAULT 0,
`rel_date` datetime NOT NULL,
PRIMARY KEY(`album_id`),
FOREIGN KEY (`member_id`) REFERENCES `Member` (`member_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE `Song` (
`song_id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`genre` varchar(10) NOT NULL,
`Streaming_cnt` int NOT NULL DEFAULT 0,
`album_id` bigint NOT NULL,
`length` int NOT NULL,
PRIMARY KEY(`song_id`),
FOREIGN KEY (`album_id`) REFERENCES `Album` (`album_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS `Comment` (
`comment_id` bigint NOT NULL AUTO_INCREMENT,
`content` varchar(255) NOT NULL,
`write_date` Date NOT NULL DEFAULT CURDATE(),
`member_id` bigint NOT NULL,
`song_id` bigint NOT NULL,
PRIMARY KEY(`comment_id`),
FOREIGN KEY (`member_id`) REFERENCES `Member` (`member_id`),
FOREIGN KEY (`song_id`) REFERENCES `Song` (`song_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS `Song_In_Playlist` (
`sip_id` bigint NOT NULL AUTO_INCREMENT,
`playList_id` bigint NOT NULL,
`song_id` bigint NOT NULL,
PRIMARY KEY(`sip_id`),
FOREIGN KEY (`playList_id`) REFERENCES `PlayList` (`playList_id`),
FOREIGN KEY (`song_id`) REFERENCES `Song` (`song_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS `NowPlayList` (
`nowPlayList_id` bigint NOT NULL AUTO_INCREMENT,
`member_id` bigint NOT NULL,
PRIMARY KEY(`nowPlayList_id`),
FOREIGN KEY (`member_id`) REFERENCES `Member` (`member_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS `Song_In_NowPlayList` (
`sin_id` bigint NOT NULL AUTO_INCREMENT,
`nowPlayList_id` bigint NOT NULL,
`song_id` bigint NOT NULL,
`reg_date` datetime NOT NULL DEFAULT NOW(),
PRIMARY KEY(`sin_id`),
FOREIGN KEY (`nowPlayList_id`) REFERENCES `NowPlayList` (`nowPlayList_id`),
FOREIGN KEY (`song_id`) REFERENCES `Song` (`song_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS `Listening_song` (
`Listening_song_id` bigint NOT NULL AUTO_INCREMENT,
`nowPlayList_id` bigint NOT NULL,
PRIMARY KEY(`Listening_song_id`),
FOREIGN KEY (`nowPlayList_id`) REFERENCES `NowPlayList` (`nowPlayList_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS `Chart` (
`chart_id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL,
PRIMARY KEY(`chart_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS `Song_In_Chart` (
`sic_id` bigint NOT NULL AUTO_INCREMENT,
`chart_id` bigint NOT NULL,
`song_id` bigint NOT NULL,
PRIMARY KEY(`sic_id`),
FOREIGN KEY (`chart_id`) REFERENCES `Chart` (`chart_id`),
FOREIGN KEY (`song_id`) REFERENCES `Song` (`song_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS `Streaming_count_by_member` (
`Streaming_count_id` bigint NOT NULL AUTO_INCREMENT,
`member_id` bigint NOT NULL,
`song_id` bigint NOT NULL,
`Streaming_dateTime` Date NOT NULL DEFAULT CURDATE(),
PRIMARY KEY(`Streaming_count_id`),
FOREIGN KEY (`member_id`) REFERENCES `Member` (`member_id`),
FOREIGN KEY (`song_id`) REFERENCES `Song` (`song_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS `like_cnt` (
`like_cnt_id` bigint NOT NULL AUTO_INCREMENT,
`member_id` bigint NOT NULL,
`album_id` bigint NOT NULL,
PRIMARY KEY(`like_cnt_id`),
FOREIGN KEY (`member_id`) REFERENCES `Member` (`member_id`),
FOREIGN KEY (`album_id`) REFERENCES `Album` (`album_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE INDEX idx_song_id ON song(song_id);
CREATE INDEX idx_member_id ON member(member_id);
CREATE INDEX idx_album_id ON album(rel_date);
CREATE INDEX idx_song_chart ON song_in_chart(song_id, chart_id);
1. 회원 데이터 삽입
INSERT INTO `member` (`member_id`, `password`, `name`, `isLogin`, `reg_date`, `email`, `nickname`, `role_code`) VALUES
(371, '1234', 'SHINee', 0, '2024-12-26', '[email protected]', '샤이니', 2),
(372, '1234', '신정환', 0, '2024-12-26', '[email protected]', '신유', 0),
(373, '1234', '조테리', 0, '2024-12-26', '[email protected]', '샤이보이토이', 2),
(374, '1234', '임현식', 0, '2024-12-26', '[email protected]', '임현식', 0),
(375, '1234', '이우', 0, '2024-12-26', '[email protected]', '이우', 0),
(376, '8440', '소녀시대', 0, '2024-12-26', '[email protected]', '소녀시대', 2),
(377, '1234', '김용선', 0, '2024-12-26', '[email protected]', '솔라', 2),
(378, '1234', '송대관', 0, '2024-12-26', '[email protected]', '송대관', 2),
(379, '1234', '권순일', 0, '2024-12-26', '[email protected]', '권순일', 0),
(380, '1234', '장다혜', 0, '2024-12-26', '[email protected]', '헤이즈', 2),
(381, '1234', '임한별', 0, '2024-12-26', '[email protected]', '임한별', 2),
(382, '1234', '주범진', 0, '2024-12-26', '[email protected]', '범진', 0),
(383, '1234', '이창섭', 0, '2024-12-26', '[email protected]', '이창섭', 0),
(384, '1234', '최수빈', 0, '2024-12-26', '[email protected]', '수빈', 0),
(385, '1234', '김준면', 0, '2024-12-26', '[email protected]', '수호', 0),
(386, '1234', '동영배', 0, '2024-12-26', '[email protected]', '태양', 0),
(387, '1234', '박성진', 0, '2024-12-26', '[email protected]', '성진', 0),
(388, '8910', '이순규', 0, '2024-12-26', '[email protected]', '써니', 0),
(389, '1234', 'seveenteen', 0, '2024-12-26', '[email protected]', '세븐틴', 2),
(390, '4775', '최수영', 0, '2024-12-26', '[email protected]', '수영', 0),
(391, '3417', '설윤아', 0, '2024-12-26', '[email protected]', '설윤', 0),
(392, '1234', '김태형', 0, '2024-12-26', '[email protected]', '뷔', 0),
(393, '1234', '이태민', 0, '2024-12-26', '[email protected]', '태민', 0),
(394, '3583', '김태연', 0, '2024-12-26', '[email protected]', '태연', 0),
(395, '1234', '강태현', 0, '2024-12-26', '[email protected]', '태현', 0),
(396, '12song_unlike`Member', '김태형', 0, '2024-12-26', '[email protected]', '폴킴', 2),
(397, '1845', 'TWICE', 0, '2024-12-26', '[email protected]', 'TWICE', 2),
(398, '1234', '투AM', 0, '2024-12-26', '[email protected]', '"2AM"', 2),
(399, '1234', 'TWS', 0, '2024-12-26', '[email protected]', '투어스', 2),
(400, '1234', '투모로우바이투게더', 0, '2024-12-26', '[email protected]', '투모로우바이투게더', 2),
(401, '4660', '저우쯔위', 0, '2024-12-26', '[email protected]', '쯔위', 0),
(402, '1234', 'Urban Zakapa', 0, '2024-12-26', '[email protected]', '어반자카파', 2),
(403, '1234', '최한솔', 0, '2024-12-26', '[email protected]', '버논', 0),
(404, '1467', '쑹첸', 0, '2024-12-26', '[email protected]', '빅토리아', 0),
(405, '1234', '김정우', 0, '2024-12-26', '[email protected]', '정우', 0),
(406, '1667', '손승완', 0, '2024-12-26', '[email protected]', '웬디', 0),
(407, '1234', '서영주', 0, '2024-12-26', '[email protected]', '너드커넥션', 2),
(408, '1234', '노을', 0, '2024-12-26', '[email protected]', '노을', 2),
(409, '1234', '박재정', 0, '2024-12-26', '[email protected]', '박재정', 0),
(410, '2465', '장원영', 0, '2024-12-26', '[email protected]', '장원영', 0),
(411, '1234', '려욱', 0, '2024-12-26', '[email protected]', '려욱', 2),
(412, '1234', '이지훈', 0, '2024-12-26', '[email protected]', '우지', 0),
(413, '1234', '전원우', 0, '2024-12-26', '[email protected]', '원우', 0),
(414, '1234', '김민석', 0, '2024-12-26', '[email protected]', '시우민', 0),
(415, '6319', '황예지', 0, '2024-12-26', '[email protected]', '예지(itzy)', 0),
(416, '1234', '전예지', 0, '2024-12-26', '[email protected]', '예지(경서예지)', 0),
(417, '8711', '김예림', 0, '2024-12-26', '[email protected]', '예리', 0),
(418, '1234', '육성재', 0, '2024-12-26', '[email protected]', '육성재', 0),
(419, '9313', '임윤아', 0, '2024-12-26', '[email protected]', '윤아', 0),
(420, '1234', '윤정한', 0, '2024-12-26', '[email protected]', '정한', 0),
(421, '9808', '황미영', 0, '2024-12-26', '[email protected]', '티파니', 0),
(422, '1234', '박영탁', 0, '2024-12-26', '[email protected]', '영탁', 2),
(423, '1234', '최영재', 0, '2024-12-26', '[email protected]', '영재', 0),
(424, '1234', '강영현', 0, '2024-12-26', '[email protected]', 'Young K', 0),
(425, '1234', '박용인', 0, '2024-12-26', '[email protected]', '박용인', 0),
(426, '8323', '신유나', 0, '2024-12-26', '[email protected]', '유나', 0),
(427, '9580', '권유리', 0, '2024-12-26', '[email protected]', '유리', 0),
(428, '8241', '안유진', 0, '2024-12-26', '[email protected]', '안유진', 0),
(429, '7206', '김애리', 0, '2024-12-26', '[email protected]', '지젤', 0),
(430, '6606', 'Aespa', 0, '2024-12-26', '[email protected]', 'Aespa', 2),
(431, '1234', '권정열', 0, '2024-12-26', '[email protected]', '10CM', 2),
(432, '1234', '이미자', 0, '2024-12-26', '[email protected]', '이미자', 2),
(433, '6934', '류이윈', 0, '2024-12-26', '[email protected]', '엠버', 0),
(434, '3463', '김가을', 0, '2024-12-26', '[email protected]', '가을', 0),
(435, '7512', '배진솔', 0, '2024-12-26', '[email protected]', '베이', 0),
(436, '1234', '변백현', 0, '2024-12-26', '[email protected]', '백현', 0),
(437, '1234', '최재호', 0, '2024-12-26', '[email protected]', '최자', 0),
(438, '1234', '빅뱅', 0, '2024-12-26', '[email protected]', '빅뱅', 2),
(439, '1234', '강대성', 0, '2024-12-26', '[email protected]', '대성', 0),
(440, '1234', '검정치마', 0, '2024-12-26', '[email protected]', '검정치마', 2),
(441, '1234', '송하예', 0, '2024-12-26', '[email protected]', '송하예', 2),
(442, '1234', '부승관', 0, '2024-12-26', '[email protected]', '승관', 0),
(443, '1234', 'BTOB', 0, '2024-12-26', '[email protected]', '비투비', 2),
(444, '1234', 'BTS', 0, '2024-12-26', '[email protected]', '방탄소년단', 2),
(445, '1234', '최범규', 0, '2024-12-26', '[email protected]', '범규', 0),
(446, '1234', '박찬열', 0, '2024-12-26', '[email protected]', '찬열', 0),
(447, '1234', '김종대', 0, '2024-12-26', '[email protected]', '첸', 0),
(448, '1599', '손채영', 0, '2024-12-26', '[email protected]', '채영', 0),
(449, '1234', '최연준', 0, '2024-12-26', '[email protected]', '연준', 0),
(450, '1234', '최승철', 0, '2024-12-26', '[email protected]', '에스쿱스', 0),
(451, '8979', '이채령', 0, '2024-12-26', '[email protected]', '채령', 0),
(452, '1234', '신효섭', 0, '2024-12-26', '[email protected]', 'Crush', 2),
(453, '1234', '서명호', 0, '2024-12-26', '[email protected]', '디에잇', 0),
(454, '1234', 'DAY6', 0, '2024-12-26', '[email protected]', '데이식스', 2),
(455, '1234', '이찬', 0, '2024-12-26', '[email protected]', '디노', 0),
(456, '1234', '이석민', 0, '2024-12-26', '[email protected]', '도겸', 0),
(457, '1234', '도경수', 0, '2024-12-26', '[email protected]', '디오', 0),
(458, '1234', '김윤성', 0, '2024-12-26', '[email protected]', '개코', 0),
(459, '1234', '김도훈', 0, '2024-12-26', '[email protected]', '도훈', 0),
(460, '1234', '윤도운', 0, '2024-12-26', '[email protected]', '도운', 0),
(461, '8305', '김다현', 0, '2024-12-26', '[email protected]', '다현', 0),
(462, '1234', '다이나믹 듀오', 0, '2024-12-26', '[email protected]', '다이나믹 듀오', 2),
(463, '1234', '한성호', 0, '2024-12-26', '[email protected]', '이클립스', 2),
(464, '1234', 'EXO', 0, '2024-12-26', '[email protected]', '엑소', 2),
(465, '1234', '허각', 0, '2024-12-26', '[email protected]', '허각', 2),
(466, '2998', 'f(x)', 0, '2024-12-26', '[email protected]', 'f(x)', 2),
(467, '1234', '송가인', 0, '2024-12-26', '[email protected]', '송가인', 2),
(468, '1234', '강희건', 0, '2024-12-26', '[email protected]', '개리', 0),
(469, '1234', '권지용', 0, '2024-12-26', '[email protected]', '지드래곤', 0),
(470, '1234', '고윤하', 0, '2024-12-26', '[email protected]', '윤하', 2),
(471, '1234', '원경서', 0, '2024-12-26', '[email protected]', '경서', 0),
(472, '1234', '한쩐', 0, '2024-12-26', '[email protected]', '한진', 0),
(473, '1234', '한지수', 0, '2024-12-26', '[email protected]', '한로로', 2),
(474, '1234', '이희상', 0, '2024-12-26', '[email protected]', '이희상', 2),
(475, '1234', '임영웅', 0, '2024-12-26', '[email protected]', '임영웅', 2),
(476, '1234', '조휴일', 0, '2024-12-26', '[email protected]', '조휴일', 0),
(477, '1234', '권순영', 0, '2024-12-26', '[email protected]', '호시', 0),
(478, '1234', '조현아', 0, '2024-12-26', '[email protected]', '조현아', 0),
(479, '1234', '카이카말휴닝', 0, '2024-12-26', '[email protected]', '휴닝카이', 0),
(480, '9509', '배주현', 0, '2024-12-26', '[email protected]', '아이린', 0),
(481, '6593', 'ITZY', 0, '2024-12-26', '[email protected]', 'ITZY', 2),
(482, '1234', '이지은', 0, '2024-12-26', '[email protected]', 'IU', 2),
(483, '2205', 'IVE', 0, '2024-12-26', '[email protected]', 'IVE', 2),
(484, '1234', '장윤정', 0, '2024-12-26', '[email protected]', '장윤정', 2),
(485, '2422', '김제니', 0, '2024-12-26', '[email protected]', '제니', 0),
(486, '1234', '김종현', 0, '2024-12-26', '[email protected]', '종현', 0),
(487, '1234', '정호석', 0, '2024-12-26', '[email protected]', '제이홉', 0),
(488, '1234', '한지훈', 0, '2024-12-26', '[email protected]', '지훈', 0),
(489, '2158', '박지효', 0, '2024-12-26', '[email protected]', '지효', 0),
(490, '1234', '김석진', 0, '2024-12-26', '[email protected]', '진', 0),
(491, '1234', '정진운', 0, '2024-12-26', '[email protected]', '정진운', 0),
(492, '9969', '김지수', 0, '2024-12-26', '[email protected]', '지수', 0),
(493, '1884', '장규진', 0, '2024-12-26', '[email protected]', '규진', 0),
(494, '1234', '조권', 0, '2024-12-26', '[email protected]', '조권', 0),
(495, '1234', '주현미', 0, '2024-12-26', '[email protected]', '주현미', 2),
(496, '1234', '홍지수', 0, '2024-12-26', '[email protected]', '조슈아', 0),
(497, '5824', '박수영', 0, '2024-12-26', '[email protected]', '조이', 0),
(498, '1234', '문준휘', 0, '2024-12-26', '[email protected]', '준', 0),
(499, '1234', '전정국', 0, '2024-12-26', '[email protected]', '정국', 0),
(500, '8334', '김지우', 0, '2024-12-26', '[email protected]', '지우', 0),
(501, '8764', '유정연', 0, '2024-12-26', '[email protected]', '정연', 0),
(502, '1234', '김종인', 0, '2024-12-26', '[email protected]', '카이', 0),
(503, '5794', '유지민', 0, '2024-12-26', '[email protected]', '카리나', 0),
(504, '1234', '김범수', 0, '2024-12-26', '[email protected]', '김범수', 2),
(505, '1234', '김기범', 0, '2024-12-26', '[email protected]', '키', 0),
(506, '1159', '김효연', 0, '2024-12-26', '[email protected]', '효연', 0),
(507, '1234', '이경민', 0, '2024-12-26', '[email protected]', '경민', 0),
(508, '1234', '구창모', 0, '2024-12-26', '[email protected]', '창모', 2),
(509, '4642', '정수정', 0, '2024-12-26', '[email protected]', '크리스탈', 0),
(510, '1234', '이창민', 0, '2024-12-26', '[email protected]', '이창민', 0),
(511, '1234', '서혜린', 0, '2024-12-26', '[email protected]', '혜린', 2),
(512, '1234', '김민겸', 0, '2024-12-26', '[email protected]', '릴러말즈', 2),
(513, '2419', '이현서', 0, '2024-12-26', '[email protected]', '이서', 0),
(514, '1234', '리쌍', 0, '2024-12-26', '[email protected]', '리쌍', 2),
(515, '7540', '최지수', 0, '2024-12-26', '[email protected]', '리아', 0),
(516, '1234', '경서예지', 0, '2024-12-26', '[email protected]', '경서예지', 2),
(517, '5919', '라리사 마노반', 0, '2024-12-26', '[email protected]', '리사', 0),
(518, '1853', '김지원', 0, '2024-12-26', '[email protected]', '리즈', 0),
(519, '8980', 'Lily Jin Park Morrow', 0, '2024-12-26', '[email protected]', '릴리', 0),
(520, '1234', '이진용', 0, '2024-12-26', '[email protected]', '루피', 2),
(521, '9727', '박선영', 0, '2024-12-26', '[email protected]', '루나', 0),
(522, '1234', '박민영', 0, '2024-12-26', '[email protected]', '미노이', 2),
(523, '1234', '이민혁', 0, '2024-12-26', '[email protected]', '이민혁', 0),
(524, '1234', '민윤기', 0, '2024-12-26', '[email protected]', '슈가', 0),
(525, '5918', '묘이 미나', 0, '2024-12-26', '[email protected]', '미나', 0),
(526, '1234', '김민규', 0, '2024-12-26', '[email protected]', '민규', 0),
(527, '1234', '최민호', 0, '2024-12-26', '[email protected]', '민호', 0),
(528, '1637', '김민정', 0, '2024-12-26', '[email protected]', '윈터', 2),
(529, '7577', '히라이 모모', 0, '2024-12-26', '[email protected]', '모모', 0),
(530, '1234', '성시경', 0, '2024-12-26', '[email protected]', '성시경', 2),
(531, '1234', '김남진', 0, '2024-12-26', '[email protected]', '남진', 2),
(532, '1234', '나훈아', 0, '2024-12-26', '[email protected]', '나훈아', 2),
(533, '1234', '김형수', 0, '2024-12-26', '[email protected]', '케이윌', 2),
(534, '7321', '닝이줘', 0, '2024-12-26', '[email protected]', '닝닝', 0),
(535, '6180', 'NMIXX', 0, '2024-12-26', '[email protected]', 'NMIXX', 2),
(536, '1415', '임나연', 0, '2024-12-26', '[email protected]', '나연', 0),
(537, '4654', '오해원', 0, '2024-12-26', '[email protected]', '해원', 0),
(538, '1234', '이진기', 0, '2024-12-26', '[email protected]', '온유', 0),
(539, '1234', '임슬옹', 0, '2024-12-26', '[email protected]', '임슬옹', 0),
(540, '1234', '김현우', 0, '2024-12-26', '[email protected]', '오왼', 2),
(541, '1234', '박지민', 0, '2024-12-26', '[email protected]', '지민', 0),
(542, '1234', '신동근', 0, '2024-12-26', '[email protected]', '프니엘', 0),
(543, '1234', '김원필', 0, '2024-12-26', '[email protected]', '원필', 0),
(544, '1234', '조용필', 0, '2024-12-26', '[email protected]', '조용필', 2),
(545, '1234', '김남석', 0, '2024-12-26', '[email protected]', 'RM', 0),
(546, '6430', 'Red Velvet', 0, '2024-12-26', '[email protected]', 'Red Velvet', 2),
(547, '7107', '나오이 레이', 0, '2024-12-26', '[email protected]', '레이', 0),
(548, '1234', '한경일', 0, '2024-12-26', '[email protected]', '한경일', 2),
(549, '1234', '소재훈', 0, '2024-12-26', '[email protected]', 'Rad Museum', 2),
(550, '1234', '길성준', 0, '2024-12-26', '[email protected]', '길', 0),
(551, '1234', '노연정', 0, '2024-12-26', '[email protected]', '연정', 2),
(552, '1908', '박채영', 0, '2024-12-26', '[email protected]', '로제', 0),
(553, '6346', '신류진', 0, '2024-12-26', '[email protected]', '류진', 0),
(554, '1891', '미나토자키 사나', 0, '2024-12-26', '[email protected]', '사나', 0),
(555, '1234', '수와 진', 0, '2024-12-26', '[email protected]', '수와 진', 2),
(556, '1234', '안상진', 0, '2024-12-26', '[email protected]', '진', 0),
(557, '1234', '안상수', 0, '2024-12-26', '[email protected]', '수', 0),
(558, '1234', '임재현', 0, '2024-12-26', '[email protected]', '임재현', 2),
(559, '7204', '서주현', 0, '2024-12-26', '[email protected]', '서현', 0),
(560, '1234', '서은광', 0, '2024-12-26', '[email protected]', '서은광', 0),
(561, '3163', '강슬기', 0, '2024-12-26', '[email protected]', '슬기', 0),
(562, '1234', '오세훈', 0, '2024-12-26', '[email protected]', '세훈', 0),
(563, '1234', '블랙핑크',0,'2024-12-26', '[email protected]', '블랙핑크', 2);
2. 앨범 데이터 삽입
INSERT INTO album(name, member_id, rel_date) VALUES
('2009, Year Of Us', 371, '2010-11-01'),
('누난 너무 예뻐 (Replay)', 371, '2008-05-25'),
('Odd - The 4th Album', 371, '2015-05-18'),
('ROMEO\' The Second Mini Album', 371, '2009-05-25'),
('The 2nd Album \"Lucifer\"', 371, '2010-07-19'),
('Archiive', 373, '2021-03-11'),
('DOPEBOii', 373, '2022-08-09'),
('SHE', 375, '2000-04-12'),
('다시만난세계 (Into The New World)', 376, '2007-08-05'),
('소원을 말해봐 Gennie - The Second Mini Album', 376, '2009-06-29'),
('훗 Hoot - The 3rd Mini Album', 376, '2010-10-27'),
('FOREVER 1 - The 7th Album', 376, '2022-08-05'),
('Gee - The First Mini Album', 376, '2009-01-07'),
('I GOT A BOY - The 4th Album', 376, '2013-01-01'),
('Lion Heart - The 5th Album', 376, '2015-08-18'),
('Run Devil Run - The 2nd Album Repackage', 376, '2010-03-17'),
('The Boys - The 3rd Album', 376, '2011-10-19'),
('솔라감성', 377, '2014-10-20'),
('넌 어디에', 380, '2003-12-01'),
('사랑하지 않아서 그랬어', 381, '2004-07-12'),
('인사', 382, '2001-05-09'),
('눈물의 여왕 part2', 389, '2015-03-04'),
('사랑한다고 말해줘', 389, '2016-02-01'),
('Love&Letter Repackage Album', 389, '2016-07-04'),
('SEVENTEEN 10th Mini Album ‘FML\'', 389, '2023-04-24'),
('SEVENTEEN 12th Mini Album ‘SPILL THE FEELS\'', 389, '2024-10-09'),
('SEVENTEEN 1ST ALBUM [FIRST ‘LOVE&LETTER’]', 389, '2016-04-25'),
('SEVENTEEN 4th Album \"Face the Sun\"', 389, '2022-05-27'),
('SEVENTEEN BEST ALBUM ‘17 IS RIGHT HERE\'', 389, '2023-06-08'),
('눈물의 여왕 part4', 396, '2017-09-01'),
('키스 먼저 할까요?', 396, '2018-03-01'),
('Feel Special', 397, '2019-09-23'),
('Merry & Happy', 397, '2017-12-11'),
('PAGE TWO', 397, '2016-04-25'),
('Summer Night', 397, '2018-07-09'),
('THE STORY BEGINS', 397, '2015-10-20'),
('혹시 니 생각이 바뀌면', 398, '2008-06-20'),
('TWS 1st Mini Album ‘Sparkling Blue’', 399, '2022-05-15'),
('TWS 1st Single ‘Last Bell\'', 399, '2023-07-12'),
('TWS 2nd Mini Album ‘SUMMER BEAT!’', 399, '2023-08-15'),
('꿈의 장: MAGIC', 400, '2019-10-21'),
('꿈의 장: STAR', 400, '2019-03-04'),
('별의 장: SANCTUARY', 400, '2019-11-18'),
('이름의 장: TEMPTATION', 400, '2023-01-27'),
('minisode 3: TOMORROW', 400, '2022-05-09'),
('열 손가락', 402, '2006-11-07'),
('푸바오와 할부지', 405, '2023-03-01'),
('그대만 있다면', 407, '2005-02-12'),
('남들은 춰워도 우린 뜨거웠던 그 계절', 408, '2008-07-15'),
('Alone 1집', 409, '2010-11-01'),
('마중', 411, '2002-10-05'),
('Better Things', 430, '2023-07-21'),
('MY WORLD - The 3rd Mini Album', 430, '2023-05-08'),
('Next Level', 430, '2021-05-17'),
('Savage - The 1st Mini Album', 430, '2021-10-05'),
('SYNK : PARALLEL LINE - Special Digital Single', 430, '2022-06-24'),
('Whiplash - The 5th Mini Album', 430, '2024-03-07'),
('눈물의 여왕 part3', 431, '2016-09-15'),
('호텔 델루나', 431, '2019-07-13'),
('빅뱅 미니앨범 5집 \"ALIVE\"', 438, '2012-02-29'),
('A', 438, '2014-06-01'),
('Always', 438, '2007-08-16'),
('Hot Issue', 438, '2007-11-22'),
('MADE', 438, '2016-12-12'),
('Stand Up (2008 빅뱅 3rd Mini Album)', 438, '2008-08-08'),
('201 (Special Edition)', 440, '2020-02-20'),
('내 고향 서울엔', 440, '2015-05-12'),
('또 오해영 OST Part 7', 440, '2016-06-14'),
('유미의 세포들 OST Part 3', 440, '2021-10-01'),
('EVERYTHING', 440, '2023-02-17'),
('Hollywood', 440, '2014-04-22'),
('잊지 말아요', 441, '2013-06-23'),
('천상연', 443, '2002-09-15'),
('Brother Act.', 443, '2017-10-23'),
('HOUR MOMENT', 443, '2018-11-26'),
('I Mean', 443, '2015-10-12'),
('NEW MEN', 443, '2016-11-07'),
('THIS IS US', 443, '2018-06-11'),
('화양연화 Young Forever', 444, '2016-05-02'),
('Dynamite (DayTime Version)', 444, '2020-08-21'),
('LOVE YOURSELF \"Her\"', 444, '2017-09-18'),
('MAP OF THE SOUL : PERSONA', 444, '2019-04-12'),
('WINGS', 444, '2016-10-10'),
('YOU NEVER WALK ALONE', 444, '2017-02-13'),
('눈물의 여왕 part1', 452, '2014-05-11'),
('Band Aid', 454, '2001-09-12'),
('DAYDREAM', 454, '2007-03-25'),
('Every DAY6 February', 454, '2017-02-06'),
('Fourever', 454, '2018-01-05'),
('Remember Us : Youth Part 2', 454, '2018-12-10'),
('The Book of Us : Gravity', 454, '2019-07-15'),
('Band Of Dynamic Brothers', 462, '2010-05-03'),
('선재 업고 튀어', 463, '2004-10-21'),
('겨울 스페셜 앨범 \'12월의 기적 (Miracles In December)\'', 464, '2013-12-09'),
("DON'T MESS UP MY TEMPO - The 5th Album", 464, '2018-11-02'),
("EX'ACT - The 3rd Album", 464, '2016-06-09'),
('LOVE ME RIGHT - The 2nd Album Repackage', 464, '2015-06-03'),
('LOVE SHOT - The 5th Album Repackage', 464, '2018-12-13'),
("The 1st Album 'XOXO' Repackage", 464, '2013-08-05'),
('오래된 노래', 465, '2012-02-17'),
('4 Walls - The 4th Album', 466, '2015-10-27'),
('라차타 LA chA TA', 466, '2009-09-05'),
('Electric Shock - The 2nd Mini Album', 466, '2012-06-10'),
("Pink Tape - f(x) The 2nd Album", 466, '2013-07-29'),
('Audition', 470, '1998-03-22'),
('비틀비틀 짝짜꿍', 473, '2019-10-03'),
('이상비행', 473, '2020-06-15'),
('입춘', 473, '2018-02-04'),
('정류장', 473, '2016-11-27'),
('집', 473, '2015-09-13'),
('HOWEVER', 474, '2003-04-21'),
('온기', 475, '2019-12-18'),
('CHECKMATE', 481, '2019-07-29'),
("IT'z Different", 481, '2019-02-12'),
("IT'z ICY", 481, '2019-07-29'),
("IT'z ME", 481, '2020-03-09'),
('꽃갈피', 482, '2014-05-16'),
('꽃갈피 둘', 482, '2017-09-22'),
('밤편지', 482, '2017-03-24'),
('사랑의 불시착', 482, '2020-02-16'),
('조각집', 482, '2022-12-29'),
('Celebrity', 482, '2021-01-27'),
('CHAT-SHIRE', 482, '2015-10-23'),
("IU 5th Album 'LILAC'", 482, '2021-03-25'),
('Love poem', 482, '2019-11-01'),
('Palette', 482, '2017-04-21'),
('After LIKE', 483, '2022-08-22'),
("I'VE MINE", 483, '2023-10-13'),
('IVE SWITCH', 483, '2024-03-14'),
('LOVE DIVE', 483, '2022-04-05'),
('Supernova Love', 483, '2023-06-05'),
('여행', 504, '2017-05-12'),
('Sollsta', 504, '2014-09-10'),
('돈 벌 시간 2', 508, '2020-10-15'),
('Boyhood', 508, '2018-05-07'),
('술 한잔할래요', 511, '2005-01-23'),
('거리에서 (feat. ASH ISLAND)', 512, '2020-03-23'),
('인생은 한번이야', 512, '2019-04-15'),
('Trip', 512, '2020-07-10'),
('AsuRaBalBalTa', 514, '2011-08-09'),
('Unplugged', 514, '2010-06-25'),
('하루하루', 516, '2008-08-08'),
('KING LOOPY', 520, '2023-05-22'),
('우리집 고양이 츄르를 좋아해', 522, '2022-02-14'),
('DA DA!', 522, '2021-09-29'),
("윈터 of aespa X 마이데몬", 528, '2024-01-11'),
('별에서 온 그대', 530, '2014-01-15'),
('All The Way', 533, '2019-07-19'),
("A Midsummer NMIXX's Dream", 535, '2023-06-20'),
('AD MARE', 535, '2022-02-22'),
('ENTWURF', 535, '2022-09-19'),
('expergo', 535, '2023-03-20'),
('Fe304: STICK OUT', 535, '2023-07-03'),
('Sonar (Breaker)', 535, '2022-06-22'),
('City', 540, '2019-10-04'),
('Smile', 540, '2020-02-25'),
('행복 Happiness', 546, '2014-08-01'),
('Chill Kill - The 3rd Album', 546, '2016-09-07'),
('Russian Roulette - The 3rd Mini Album', 546, '2016-09-07'),
('Summer Magic', 546, '2018-08-06'),
("The Perfect Red Velvet (Repackage)", 546, '2018-01-29'),
("The ReVe Festival 2022 - Feel My Rhythm'", 546, '2022-03-21'),
("The ReVe Festival: Finale", 546, '2019-12-23'),
('Travel', 548, '2021-10-13'),
('HOMESICK', 549, '2019-12-03'),
('눈에 보이지 않는 노래는', 551, '2023-04-09'),
('사랑을 사람으로 그린다면', 551, '2020-11-11'),
('비의 랩소디', 558, '2012-03-14'),
('BORN PINK', 563, '2022-09-16'),
('THE ALBUM', 563, '2020-10-02'),
('사랑과 추억', 532, '2022-03-01 00:00:00'),
('지갑이 형님', 378, '2021-05-15 00:00:00'),
('모정의 노래', 544, '2023-01-10 00:00:00'),
('바람처럼 하늘처럼', 484, '2020-09-20 00:00:00'),
('슬픈 사랑의 노래', 432, '2019-12-25 00:00:00'),
('다섯 번 째 이야기', 555, '2018-07-01 00:00:00'),
('목포 노래 큰 잔치', 531, '2023-08-14 00:00:00'),
('주현미 30th Anniversary album', 495, '2021-10-02 00:00:00'),
('FORM', 422, '2022-06-18 00:00:00'),
('연가', 467, '2020-11-11 00:00:00'),
('IM HERO', 475, '2023-05-09 00:00:00');
3. 노래 데이터 삽입
INSERT INTO song (name, genre, album_id, length) VALUES
('O.O', 'K-POP', 150, 173),
('DICE', 'K-POP', 151, 166),
('Love Me Like This', 'K-POP', 152, 189),
('Party O\'Clock', 'K-POP', 149, 184),
('Roller Coaster', 'K-POP', 149, 180),
('Sonar (Breaker)', 'K-POP', 154, 174),
('별별별 (See that?)', 'K-POP', 153, 183),
('달라달라 DALLA DALLA', 'K-POP', 114, 200),
('ICY', 'K-POP', 115, 192),
('WANNABE', 'K-POP', 116, 192),
('SNEAKERS', 'K-POP', 113, 180),
('OOH-AHH하게', 'K-POP', 36, 216),
('CHEER UP', 'K-POP', 34, 209),
('Feel Special', 'K-POP', 32, 207),
('Heart Shaker', 'K-POP', 33, 187),
('Dance the night away', 'K-POP', 35, 181),
('다시만난세계 (Into The New World)', 'K-POP', 9, 268),
('소원을말해봐 Gennie', 'K-POP', 10, 231),
('Gee', 'K-POP', 13, 203),
('The Boys', 'K-POP', 17, 227),
('I GOT A BOY', 'K-POP', 14, 272),
('Lion Heart', 'K-POP', 15, 225),
('Run Devil Run', 'K-POP', 16, 202),
('훗 Hoot', 'K-POP', 11, 200),
('Forever 1', 'K-POP', 12, 203),
('행복 Happiness', 'K-POP', 157, 221),
('Power Up', 'K-POP', 160, 203),
('러시안 룰렛 (Russian Roulette)', 'K-POP', 159, 212),
('Chill Kill', 'K-POP', 158, 215),
('Feel My Rhythm', 'K-POP', 162, 211),
('Bad Boy', 'K-POP', 161, 211),
('Psycho', 'K-POP', 163, 211),
('Whiplash', 'K-POP', 57, 184),
('Next Level', 'K-POP', 54, 222),
('Better Things', 'K-POP', 52, 204),
('Spark (WINTER Solo)', 'K-POP', 56, 202),
('Flowers', 'K-POP', 57, 191),
('I\'m Unhappy', 'K-POP', 53, 206),
('Savage', 'K-POP', 55, 239),
('LOVE DIVE', 'K-POP', 130, 178),
('Baddie', 'K-POP', 128, 155),
('Supernova Love', 'K-POP', 131, 200),
('해야(HEYA)', 'K-POP', 129, 190),
('After LIKE', 'K-POP', 127, 177),
('첫 사랑니 Rum Pum Pum Pum', 'K-POP', 104, 198),
('4 Walls', 'K-POP', 101, 208),
('제트별 Jet', 'K-POP', 103, 204),
('라차타 LA chA TA', 'K-POP', 102, 194),
('Typa Girl', 'K-POP', 169, 180),
('Ice Cream (with Selena Gomez)', 'K-POP', 170, 176),
('Celebrity', '발라드', 122, 195),
('정거장', '발라드', 119, 253),
('꽃', '발라드', 117, 180),
('이름에게', '발라드', 126, 290),
('무릎', '발라드', 123, 283),
('개여울', '발라드', 118, 338),
('나의 옛날이야기', '발라드', 117, 214),
('Love poem', '발라드', 125, 258),
('러브레터', '발라드', 121, 238),
('마음을 드려요', '발라드', 120, 280),
('아이와 나의 바다', '발라드', 124, 317),
('마침표', '발라드', 126, 236),
('자장가', '발라드', 125, 262),
('천상연', '발라드', 73, 271),
('비의 랩소디', '발라드', 168, 235),
('소나기', '발라드', 93, 234),
('헤어지자 말해요', '발라드', 50, 244),
('미안해 미워해 사랑해', '발라드', 85, 244),
('자꾸만 웃게 돼', '발라드', 22, 214),
('인사', '발라드', 21, 216),
('기다리다', '발라드', 105, 280),
('열 손가락', '발라드', 46, 237),
('내게 어울릴 이별 노래가 없어', '발라드', 148, 189),
('우린 다른 길을 걷고 있었나 봐', '발라드', 8, 217),
('하루하루', '발라드', 142, 237),
('With You', '발라드', 146, 255),
('잊지말아요', '발라드', 72, 238),
('그대만 있다면', '발라드', 48, 251),
('모든 날, 모든 순간', '발라드', 31, 211),
('이젠 웃으며, 안녕', '발라드', 47, 228),
('너의 모든 순간', '발라드', 147, 243),
('오래된 노래', '발라드', 100, 258),
('혹시 니 생각이 바뀌면', '발라드', 37, 220),
('그대가 오면', '발라드', 23, 250),
('슬픈 초대장', '발라드', 164, 256),
('온기', '발라드', 112, 235),
('고장난 걸까', '발라드', 58, 236),
('사랑했지만', '발라드', 18, 241),
('그대의 세계', '발라드', 132, 249),
('좋아해요', '발라드', 30, 245),
('끝사랑', '발라드', 133, 252),
('그리움만 쌓이네', '발라드', 18, 245),
('나의 어깨에 기대어요', '발라드', 59, 211),
('사랑하지 않아서 그랬어', '발라드', 20, 224),
('혼술하고 싶은 밤', '발라드', 20, 240),
('넌 어디에', '발라드', 19, 233),
('입술', '발라드', 19, 201),
('술 한잔할래요', '발라드', 136, 227),
('남들은 춰워도 우린 뜨거웠던 그 계절', '발라드', 49, 224),
('마중', '발라드', 51, 217),
('예쁘다', 'K-POP', 27, 207),
('아주 NICE', 'K-POP', 24, 192),
('손오공', 'K-POP', 25, 200),
('MAESTRO', 'K-POP', 29, 198),
('청춘찬가', 'K-POP', 29, 191),
('HOT', 'K-POP', 28, 197),
('LOVE, MONEY, FAME (feat. DJ Khaled)', 'K-POP', 26, 186),
('HAPPY', 'K-POP', 89, 189),
('한 페이지가 될 수 있게', 'K-POP', 91, 205),
('예뻤어', 'K-POP', 88, 283),
('놓아 놓아 놓아', 'K-POP', 87, 230),
('아픈 길', 'K-POP', 90, 249),
('망겜', 'K-POP', 86, 189),
('첫 만남은 계획대로 되지 않아', 'K-POP', 38, 152),
('내가 S면 넌 나의 N이 되어줘', 'K-POP', 40, 168),
('마지막 축제', 'K-POP', 39, 191),
('그리워하다', 'K-POP', 74, 236),
('신바람', 'K-POP', 74, 237),
('너 없인 안 된다', 'K-POP', 78, 226),
('기도 (I\'ll Be Your Man)', 'K-POP', 77, 220),
('아름답고도 아프구나', 'K-POP', 75, 239),
('집으로 가는 길', 'K-POP', 76, 240),
('9와 4분의 3 승강장에서 너를 기다려 (Run Away)', 'K-POP', 41, 211),
('Over The Moon', 'K-POP', 43, 157),
('내일에서 기다릴게 (I\'ll See You There Tomorrow)', 'K-POP', 45, 196),
('Sugar Rush Ride', 'K-POP', 44, 186),
('어느날 머리에서 뿔이 자랐다 (CROWN)', 'K-POP', 42, 230),
('첫 눈', 'K-POP', 94, 207),
('Tempo', 'K-POP', 95, 224),
('LOVE ME RIGHT', 'K-POP', 97, 205),
('으르렁 (Growl)', 'K-POP', 99, 207),
('Love Shot', 'K-POP', 98, 200),
('Monster', 'K-POP', 96, 221),
('LAST DANCE', 'K-POP', 64, 279),
('뱅뱅뱅 (BANG BANG BANG)', 'K-POP', 61, 220),
('FANTASTIC BABY', 'K-POP', 60, 230),
('하루 하루', 'K-POP', 65, 256),
('거짓말', 'K-POP', 62, 229),
('마지막 인사', 'K-POP', 63, 231),
('Dynamite', 'K-POP', 80, 199),
('작은 것들을 위한 시 (Boy With Luv) (Feat. Halsey)', 'K-POP', 82, 229),
('봄날', 'K-POP', 84, 274),
('DNA', 'K-POP', 81, 223),
('불타오르네 (FIRE)', 'K-POP', 79, 203),
('피 땀 눈물', 'K-POP', 83, 217),
('View', 'K-POP', 3, 190),
('Ring Ding Dong', 'K-POP', 1, 231),
('Lucifer', 'K-POP', 5, 233),
('누난 너무 예뻐 (Replay)', 'K-POP', 2, 214),
('줄리엣 (Juliette)', 'K-POP', 4, 205),
('사랑을 얻은 나는', '인디', 167, 219),
('내 마지막이 이리 저문다면', '인디', 167, 208),
('머피의 법칙(Rock ver.)', '인디', 167, 264),
('숨바꼭질', '인디', 167, 202),
('놀이터', '인디', 167, 238),
('사랑엔 용기가 필요해', '인디', 166, 245),
('아름다움이란 이름을 가졌지', '인디', 166, 198),
('On Your Side', '인디', 166, 231),
('날 위한 태양이 아니어도', '인디', 166, 198),
('귀가', '인디', 110, 110),
('ㅈㅣㅂ', '인디', 110, 231),
('먹이사슬', '인디', 110, 203),
('놀이터', '인디', 110, 244),
('재', '인디', 110, 236),
('생존법', '인디', 110, 217),
('보수공사', '인디', 110, 205),
('이상비행', '인디', 107, 155),
('해초', '인디', 107, 225),
('화해', '인디', 107, 221),
('금붕어', '인디', 107, 212),
('자처', '인디', 107, 272),
('사랑하게 될 거야', '인디', 107, 165),
('입춘', '인디', 108, 249),
('비틀비틀 짝짜꿍', '인디', 106, 211),
('정류장', '인디', 109, 252),
('크로커스', '인디', 111, 157),
('Be My First', '인디', 111, 198),
('How to fall in love (feat. 박현진)', '인디', 111, 182),
('lch liebe dich!', '인디', 111, 206),
('란', '인디', 111, 246),
('천년지애', '인디', 111, 332),
('야래향', '인디', 111, 181),
('먼 훗날 우리', '인디', 111, 237),
('Venti Girl', '인디', 111, 273),
('좋아해줘', '인디', 111, 185),
('Stand Still', '인디', 66, 224),
('강아지', '인디', 66, 209),
('상아', '인디', 66, 216),
('AntiFreeze', '인디', 66, 244),
('Tangled', '인디', 66, 287),
('Avant Garde Kim', '인디', 66, 221),
('Le Fou Muet', '인디', 66, 126),
('Dientes', '인디', 66, 191),
('Kiss And Tell', '인디', 66, 279),
('기다린 만큼, 더', '인디', 68, 270),
('EVERYTHING', '인디', 70, 293),
('Hollywood', '인디', 71, 331),
('Ling Ling', '인디', 69, 229),
('내 고향 서울엔', '인디', 67, 183),
('너에게 배운다 (My Love) 인트로', '랩', 141, 47),
('너에게 배운다 (My Love)', '랩', 141, 297),
('Someday (feat. 윤도현)', '랩', 141, 284),
('겸손은 힘들어', '랩', 141, 238),
('HOLA (feat. 정인)', '랩', 141, 259),
('행복을 찾아서 인트로', '랩', 141, 72),
('행복을 찾아서 (feat. 조현아)', '랩', 141, 244),
('사람들은 모두 변하나봐 (feat. 정인, Simon Dominic, 바비킴)', '랩', 141, 242),
('별을 따라...(feat.주비트레인)', '랩', 141, 43),
('Casanova (feat. 주비트레인)', '랩', 141, 192),
('개리와 기리... 세번째 이야기', '랩', 141, 212),
('울고 싶어라', '랩', 141, 265),
('Bururi (feat. 정인)', '랩', 141, 240),
('나란 놈은 답은 너다 (Prologue)', '랩', 140, 34),
('나란 놈은 답은 너다 (feat. 하림)', '랩', 140, 238),
('TV를 껐네... (feat. 윤미래, 10cm)', '랩', 140, 216),
('Serenade (feat. 개코, 윈디 시티)', '랩', 140, 284),
('회상 (feat. 백지영)', '랩', 140, 287),
('나 그대에게 모두 드리리 (feat. 정인)', '랩', 140, 266),
('죽기 전까지 날아야 하는 새 (feat. 강산에, 비지)', '랩', 140, 245),
('Grand Final (Planet Shiver Mix Version)', '랩', 140, 228),
('Trip (feat. Hannah)', '랩', 139, 235),
('일어나 보니', '랩', 138, 171),
('이쁜 여자가 좋더라 (feat. Gist, Jayci Yucca)', '랩', 138, 147),
('거리에서 (feat. ASH ISLAND)', '랩', 137, 210),
('PAPER CUT', '랩', 165, 178),
('그림에 떡 (Dynamic Sinsa Rangers)', '랩', 92, 230),
('돈이다가 아니야 (Get Money) (feat. 강산에)', '랩', 92, 245),
('두꺼비집 (One More Drink) (feat. gong(공), 0cd)', '랩', 92, 233),
('잔돈은 됐어요 (Keep The Change) (feat. 개리, 범키)', '랩', 92, 252),
('죽일 놈 (Guilty)', '랩', 92, 224),
('왜 벌써가 (Be My Brownie) (feat. 범키)', '랩', 92, 238),
('Biggestmagicalvision', '랩', 92, 66),
('불꽃놀이 (Fireworks)', '랩', 92, 233),
('우리집 고양이 츄르를 좋아해 (feat. Yumdda)', '랩', 144, 179),
('sunbeam', '랩', 145, 158),
('busy guy', '랩', 145, 226),
('ii Fu*ks (feat. Yung Blesh)', '랩', 7, 151),
('Empty (처음이자 마지막)', '랩', 6, 177),
('Prime Time', '랩', 6, 170),
('Gear 2', '랩', 143, 244),
('KING LOOPY', '랩', 143, 153),
('Nike', '랩', 143, 154),
('빌었어', '랩', 135, 222),
('METEOR', '랩', 135, 198),
('마에스트로 (Maestro)', '랩', 134, 222),
('아름다워', '랩', 134, 221),
('Sadderday', '랩', 156, 263),
('gimmick (feat. BRADYSTREET, LO VOLF)', '랩', 156, 201),
('City', '랩', 155, 182),
('영동부루스 (Cover Ver)', '트로트', 171, 221),
('추억의대관령 (Cover Ver,)', '트로트', 171, 251),
('날울리는파도 (Cover Ver,)', '트로트', 171, 192),
('이루지못한사랑 (Cover Ver,)', '트로트', 171, 296),
('지갑이 형님', '트로트', 172, 203),
('덕분에', '트로트', 172, 208),
('덤', '트로트', 172, 308),
('님이여', '트로트', 173, 272),
('마음속의 그림자', '트로트', 173, 203),
('사랑의 맹세', '트로트', 173, 177),
('영상', '트로트', 173, 224),
('바람처럼 하늘처럼...', '트로트', 174, 178),
('너무 좋아', '트로트', 174, 181),
('회상', '트로트', 175, 247),
('서글픈 사랑', '트로트', 175, 259),
('새드 무비', '트로트', 175, 209),
('잊고 살리라', '트로트', 175, 187),
('낙엽따라 가버린 사랑', '트로트', 175, 283),
('태양 아래로', '트로트', 176, 221),
('사랑해야 해', '트로트', 176, 317),
('처음의 약속', '트로트', 176, 262),
('원치 않는 사랑', '트로트', 176, 263),
('후회', '트로트', 176, 221),
('목포 아리랑', '트로트', 177, 214),
('목포항 블루스', '트로트', 177, 317),
('서울에서 목포까지', '트로트', 177, 209),
('목포 아가씨', '트로트', 177, 178),
('삼학도에서', '트로트', 177, 220),
('빗속에서', '트로트트', 178, 250),
('소녀 일기', '트로트트', 178, 317),
('최고의 사랑', '트로트트', 178, 179),
('첫사랑 그 기억', '트로트트', 178, 198),
('가을과 겨울 사이', '트로트트', 178, 209),
('로렐라이', '트로트', 179, 133),
('톡톡톡', '트로트', 179, 178),
('폼 미쳤다', '트로트', 179, 253),
('올려', '트로트', 179, 301),
('값', '트로트', 179, 323),
('우길걸 우겨', '트로트', 179, 194),
('비 내리는 금강산', '트로트', 180, 317),
('기억 저편에', '트로트', 180, 252),
('장미꽃의 전설', '트로트', 180, 174),
('월하가약', '트로트', 180, 220),
('밤차에서', '트로트', 180, 221),
('사랑의 꽃씨', '트로트', 180, 202),
('다시 만날 수 있을까', '트로트', 181, 178),
('무지개', '트로트', 181, 153),
('손이 참 곱던 그대', '트로트', 181, 230),
('우리들의 블루', '트로트', 181, 317),
('아버지', '트로트', 181, 120),
('연애편지', '트로트', 181, 295);
회원 가입
delimiter $$
CREATE OR REPLACE PROCEDURE makeMemberProc (
IN inputName varchar(20),
IN inputPassword varchar(20),
IN inputEmail varchar(255),
IN inputNickname varchar(50)
)
BEGIN
IF EXISTS(
SELECT *
FROM member
WHERE email LIKE inputEmail
) SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '이미 가입한 이메일입니다.';
ELSEIF EXISTS(
SELECT *
FROM member
WHERE nickname = inputNickname
) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '이미 있는 닉네임입니다.';
ELSE
INSERT INTO Member (name, password, email, nickname) VALUES (inputName,inputPassword,inputEmail,inputNickname);
END IF;
END $$
delimiter ;
로그인
delimiter $$
CREATE OR REPLACE PROCEDURE loginMemberProc(
IN inputEmail varchar(255),
IN inputPassword varchar(20)
)
BEGIN
IF NOT EXISTS(
SELECT *
FROM member
WHERE email LIKE inputEmail
) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '가입된 적 없는 이메일입니다.';
ELSEIF NOT EXISTS (
SELECT *
FROM member
WHERE email LIKE inputEmail AND PASSWORD LIKE inputPassword
) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '비밀번호가 일치하지 않습니다. ';
ELSE
UPDATE Member SET isLogin = 1 WHERE email = inputEmail and password = inputPassword;
END IF;
END $$
delimiter ;
로그 아웃
회원 정보 수정
delimiter $$
CREATE OR REPLACE PROCEDURE modifyMemberProc(
IN u_id BIGINT(20),
IN inputPassword varchar(20),
IN inputNickname varchar(50),
IN inputEmail varchar(255)
)
BEGIN
DECLARE cur_is_login TINYINT(4);
SELECT isLogin INTO cur_is_login
FROM member
WHERE member_id = u_id;
IF cur_is_login = 1
THEN
UPDATE Member SET nickname = inputNickname, password = inputPassword where email = inputEmail;
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '로그인 되어 있지 않습니다.';
END IF;
END $$
delimiter ;
아티스트 승격
delimiter $$
CREATE OR REPLACE PROCEDURE confirmArtistProc(
IN inputMemberId bigint(20)
)
BEGIN
DECLARE c_member_id BIGINT(20);
SELECT member_id INTO c_member_id
FROM member
WHERE member_id = inputMemberId;
IF ISNULL(c_member_id)
THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '존재하지 않는 회원입니다.';
ELSE
UPDATE Member SET role_code = 2 where member_id = inputMemberId;
END IF;
END $$
delimiter ;
회원 탈퇴
delimiter $$
CREATE OR REPLACE PROCEDURE deleteMemberProc(
IN inputMemberId bigint(20)
)
BEGIN
DECLARE c_member_id BIGINT(20);
SELECT member_id INTO c_member_id
FROM member
WHERE member_id = inputMemberId;
IF ISNULL(c_member_id)
THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '존재하지 않는 회원입니다.';
ELSE
DELETE FROM Member WHERE member_id = inputMemberId;
END IF;
END $$
delimiter ;
플레이 리스트 생성
DELIMITER $$
CREATE OR REPLACE PROCEDURE make_playlist(
IN uid BIGINT(20),
IN play_list_name VARCHAR(20),
IN is_shared TINYINT(1)
)
BEGIN
DECLARE p_name VARCHAR(20);
SELECT NAME INTO p_name
FROM playlist
WHERE member_id = uid AND NAME = play_list_name;
IF p_name IS NOT NULL
THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '이미 있는 이름입니다.';
ELSE
SET is_shared = IFNULL(is_shared, 0);
INSERT INTO playlist(`name`, member_id, isPublic)
VALUES(play_list_name, uid, is_shared);
END IF;
END $$
DELIMITER ;
플레이 리스트에 노래 담기
DELIMITER $$
CREATE OR REPLACE PROCEDURE add_song_to_playlist(
IN uid BIGINT(20),
IN ply_id BIGINT(20),
IN song_id BIGINT (20)
)
BEGIN
-- 만약 song_in_playlist에서 특정 플리 아이디의 해당 노래 아이디가 없을 경우-
IF NOT EXISTS (
SELECT *
FROM song_in_playlist AS s
WHERE s.playList_id = ply_id AND s.song_id = song_id
)
THEN
INSERT INTO song_in_playlist(playList_id, song_id)
VALUES(ply_id, song_id);
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '이미 존재하는 곡입니다.';
END IF;
END $$
DELIMITER ;
플레이 리스트 수정
DELIMITER $$
CREATE OR REPLACE PROCEDURE playlist_u(
IN plName VARCHAR(50),
IN change_name VARCHAR(50),
IN Public TINYINT,
IN mem_id BIGINT(20)
)
BEGIN
DECLARE c_name VARCHAR(50);
SELECT NAME INTO c_name
FROM playlist
WHERE member_id = mem_id AND NAME = plName;
-- 1, 0 이외의 값이 등록되면 0으로 기본 고정
IF Public NOT IN (0, 1) THEN
SET Public = 0;
END IF;
IF c_name IS NULL THEN
UPDATE playlist
SET name = change_name, isPublic = Public
WHERE name = plName AND member_id = mem_id;
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '이미 존재하는 이름입니다.';
END IF ;
SELECT *
FROM playlist
WHERE name = change_name AND member_id = mem_id;
END $$
DELIMITER ;
플레이 리스트 삭제
DELIMITER $$
CREATE or REPLACE PROCEDURE playlist_d(
IN plName VARCHAR(50),
IN mem_id BIGINT(20)
)
BEGIN
DECLARE deleted_count INT;
-- 먼저, 플레이리스트에 속한 노래들 삭제
DELETE FROM song_in_playlist
WHERE playList_id IN (
SELECT playList_id
FROM playlist
WHERE name = plName
AND member_id = mem_id
);
-- 플레이리스트 삭제
DELETE FROM playlist
WHERE name = plName
AND member_id = mem_id;
-- 삭제된 행 수 확인
SET deleted_count = ROW_COUNT();
IF deleted_count > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '플레이리스트가 삭제되었습니다.';
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '해당 플레이리스트가 존재하지 않습니다.' ;
END IF;
END $$
DELIMITER ;
공개 플리 조회
내 플리 제목 조회
내 플리 노래 조회
DELIMITER $$
CREATE OR REPLACE PROCEDURE playlist_song_r(
IN pl_name VARCHAR(50),
IN mem_id BIGINT(20)
)
BEGIN
SELECT
p.name AS playlist_name,
s.name AS song_name,
s.genre,
s.length
FROM playlist p
INNER JOIN song_in_playlist i
ON p.playList_id = i.playList_id
INNER JOIN song s
ON s.song_id = i.song_id
WHERE p.name = pl_name
AND p.member_id = mem_id;
END $$
DELIMITER ;
플레이 리스트 복사
DELIMITER $$
CREATE OR REPLACE PROCEDURE playlist_copy(
IN original_mem_id BIGINT(20), -- 원본 플레이리스트의 사용자 ID
IN pl_name VARCHAR(50), -- 원본 플레이리스트의 제목
IN copy_mem_id BIGINT(20) -- 복사할 플레이리스트를 받을 사용자 ID
)
BEGIN
-- 새로 생성된 플레이리스트 ID 담을 변수 선언
DECLARE new_playlist_id BIGINT;
-- playlist 테이블 복사
INSERT INTO playlist(`name`, isPublic, member_id)
SELECT `name`,
isPublic,
copy_mem_id
FROM playlist
WHERE member_id = original_mem_id
AND `name` = pl_name;
-- 새로 생성된 플레이리스트 ID 할당
SET new_playlist_id = (SELECT playlist_ID
FROM playlist
WHERE member_id = copy_mem_id
AND `name` = pl_name);
INSERT INTO song_in_playlist (playlist_id, song_id)
SELECT new_playlist_id,
song_id
FROM song_in_playlist i
INNER JOIN playlist p
ON i.playList_id = p.playList_id
WHERE member_id = original_mem_id
AND `name` = pl_name;
SELECT
p.`name` AS playlist_name,
s.`name` AS song_name,
s.genre,
s.length
FROM playlist p
INNER JOIN song_in_playlist i
ON p.playList_id = i.playList_id
INNER JOIN song s
ON s.song_id = i.song_id
WHERE p.`name` = pl_name
AND p.member_id = copy_mem_id;
END $$
DELIMITER ;
이 음악 어때? - 랜덤 플리 복사해오기
DELIMITER $$
CREATE OR REPLACE PROCEDURE playlist_rand(
IN mem_id BIGINT(20)
)
BEGIN
-- 랜덤으로 복사할 플레이 리스트 ID, 이름 담을 변수 선언
DECLARE copy_playlist_id BIGINT;
DECLARE copy_playlist_name VARCHAR(50);
-- 새로 생성된 플레이리스트 ID 담을 변수 선언
DECLARE new_playlist_id BIGINT;
-- 랜덤으로 복사할 플레이 리스트 ID, 이름 담을 변수에 데이터 할당
SELECT playlist_id, name
INTO copy_playlist_id, copy_playlist_name
FROM playlist
WHERE isPublic = 1
AND member_id != mem_id
AND name NOT IN (SELECT name FROM playlist WHERE member_id = mem_id)
ORDER BY RAND()
LIMIT 1;
-- playlist 테이블 Insert
INSERT INTO playlist (name, isPublic, member_id)
SELECT name, isPublic, mem_id
FROM playlist
WHERE playlist_id = copy_playlist_id;
-- 새로 생성된 플레이리스트 ID 담을 변수에 데이터 할당
SET new_playlist_id = (
SELECT playlist_id
FROM playlist
WHERE member_id = mem_id
AND name = copy_playlist_name
);
-- song_in_playlist 테이블 Insert
INSERT INTO song_in_playlist (playlist_id, song_id)
SELECT new_playlist_id, song_id
FROM song_in_playlist s
WHERE playlist_id = copy_playlist_id;
SELECT
p.name AS playlist_name,
s.name AS song_name,
s.genre,
s.length
FROM playlist p
INNER JOIN song_in_playlist i
ON p.playList_id = i.playList_id
INNER JOIN song s
ON s.song_id = i.song_id
WHERE p.playList_id = new_playlist_id;
END $$
DELIMITER ;
아티스트 승인 유저 노래 등록 가능(한 곡)
DELIMITER $$
CREATE OR REPLACE PROCEDURE insert_one_song_only_artist(
IN uid BIGINT (20),
IN s_name VARCHAR (30),
IN s_genre VARCHAR(10),
IN a_name VARCHAR (50),
IN s_time INT -- > 노래 시간 받기
)
BEGIN
DECLARE u_role INT;
DECLARE new_album_id BIGINT(20);
SELECT role_code INTO u_role
FROM member
WHERE member_id = uid;
IF u_role = 2 THEN
-- 앨범 먼저 등록-> 앨범 이름이랑 아티스트 아이디 등록
INSERT INTO album(NAME, member_id) VALUES(a_name, uid);
-- 현재 세션 기반 가장 최근에 등록된 앨범의 아이디를 new_album_id에 저장
SET new_album_id = LAST_INSERT_ID();
-- 노래를 해당 앨범 아이디에 저장
INSERT INTO song(`name`, genre, album_id, LENGTH)
VALUES(s_name, s_genre, new_album_id, s_time);
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '일반 유저는 노래를 추가할 수 없습니다.';
END IF;
END $$
DELIMITER ;
아티스트 승인 유저 노래 등록 가능(여러 곡)
DELIMITER $$
CREATE OR REPLACE PROCEDURE insert_songs_only_artist(
IN uid BIGINT (20),
IN s_name TEXT, -- > 노래 이름 받기(, 기준으로 받기) -> (435, 3235, 34254,2353245)
IN s_genre VARCHAR(10),
IN a_name VARCHAR (50),
IN s_time TEXT -- > 노래 시간 받기(, 기준으로 시간 맞춰서)
)
BEGIN
DECLARE u_role INT;
DECLARE song_count INT;
DECLARE song_title VARCHAR(30);
DECLARE song_time INT;
DECLARE new_album_id BIGINT(20);
SELECT role_code INTO u_role
FROM member
WHERE member_id = uid;
SET song_count = 1;
IF u_role = 2 THEN
-- 앨범을 먼저 등록하기
INSERT INTO album(NAME, member_id) VALUES(a_name, uid);
-- 현 세션에서 가장 최근에 업데이트된 앨범의 아이디 받기
SELECT album_id INTO new_album_id
FROM album
WHERE NAME = a_name;
-- , 기준으로 나눠진 텍스트로 받은 값을 나눠서 노래를 앨범에 저장
WHILE song_count <= LENGTH(s_name) - LENGTH(REPLACE(s_name, ',', '')) + 1
DO
SET song_title = TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(s_name, ',', song_count), ',', -1));
SET song_time = CAST(TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(s_time, ',', song_count), ',', -1)) AS INT);
INSERT INTO song(`name`, genre, album_id, LENGTH)
VALUES(song_title, s_genre, new_album_id, song_time);
SET song_count = song_count + 1;
END WHILE;
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '일반 유저는 노래를 추가할 수 없습니다.';
-- 오류 처리 구문
-- SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '일반 유저는 노래를 추가할 수 없습니다.';
END IF;
END $$
DELIMITER ;
내가 올린 노래 삭제 가능
DELIMITER $$
CREATE OR REPLACE PROCEDURE my_song_del(
IN uid BIGINT (20),
IN song_name VARCHAR (30)
)
BEGIN
DECLARE u_role INT;
DECLARE song_u_id BIGINT (20);
-- 해당 아이디의 유저가 아티스트인지 확인
SELECT role_code INTO u_role
FROM member
WHERE member_id = uid;
IF u_role = 2 THEN
-- 해당 유저가 저장한 노래의 u_id를 확인
SELECT s.song_id INTO song_u_id
FROM song AS s
JOIN album AS a ON s.album_id = a.album_id
WHERE a.member_id = uid AND s.name = song_name;
IF ISNULL(song_u_id) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '해당 노래가 존재하지 않습니다.';
ELSE
-- 노래가 존재할 경우 해당 노래를 삭제
DELETE FROM song
WHERE song_id = song_u_id;
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '노래가 제거되었습니다.';
END IF;
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '일반 유저는 노래를 삭제할 수 없습니다.';
END IF;
END $$
DELIMITER ;
내가 올린 노래 수정 가능
DELIMITER $$
CREATE OR REPLACE PROCEDURE my_song_edit(
IN uid BIGINT (20),
IN old_song_name VARCHAR(30),
IN edit_song_name VARCHAR (30),
IN edit_song_genre VARCHAR (10),
IN song_time INT
)
BEGIN
DECLARE u_role INT;
DECLARE song_u_id BIGINT (20);
-- 해당 아이디의 유저가 아티스트인지 확인
SELECT role_code INTO u_role
FROM member
WHERE member_id = uid;
IF u_role = 2 THEN
-- 유저의 노래 제목에 맞는 노래 아이디를 조회
SELECT song_id INTO song_u_id
FROM song AS s
JOIN album AS a ON s.album_id = a.album_id
WHERE a.member_id = uid AND s.name = old_song_name;
IF ISNULL(song_u_id) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '해당 노래가 존재하지 않거나 수정할 수 없습니다.';
ELSE
UPDATE song
SET name = edit_song_name, genre = edit_song_genre, LENGTH = song_time
WHERE song_id = song_u_id;
END IF;
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '일반 유저는 노래를 수정할 수 없습니다.';
END IF;
END $$
DELIMITER ;
노래 댓글 기능
노래 댓글 삭제 기능
현재 재생 목록 추가
DELIMITER $$
CREATE OR REPLACE PROCEDURE play_song_current_ply(
IN uid BIGINT (20),
IN s_id BIGINT (20)
)
BEGIN
DECLARE now_ply_id BIGINT(20);
DECLARE song_length INT;
-- 유저가 현재 재생 목록을 가지고 있지 않은 경우
IF NOT EXISTS(
SELECT *
FROM nowplaylist
WHERE member_id = uid
)
THEN
-- 해당 유저의 현재 재생 목록을 새롭게 생성해줌
INSERT INTO nowplaylist(member_id) VALUES (uid);
END IF;
-- 해당 유저가 생성한 현재 재생 목록의 아이디를 now_ply_id에 받음
SELECT nowPlayList_id INTO now_ply_id
FROM nowplaylist
WHERE member_id = uid;
-- 현재 재생목록에 담긴 노래가 이미 존재할 경우 삭제
IF EXISTS(
SELECT *
FROM song_in_nowplaylist
WHERE song_id = s_id AND nowplayList_id = now_ply_id
) THEN
DELETE FROM song_in_nowplaylist WHERE song_id = s_id AND nowplayList_id = now_ply_id;
END IF;
-- 재생중인 노래 삭제
DELETE FROM Listening_song WHERE nowplayList_id = now_ply_id;
-- 해당 아이디의 노래의 길이를 song_length에 저장
SELECT length INTO song_length
FROM song
WHERE song_id = s_id;
-- 해당 노래를 재생중인 노래 / 현재 재생목록에 담긴 노래에 저장
INSERT INTO song_in_nowplaylist(song_id, nowplayList_id) VALUES (s_id, now_ply_id);
INSERT INTO Listening_song(Listening_song_id, nowplayList_id) VALUES (s_id, now_ply_id);
INSERT INTO streaming_count_by_member(member_id, song_id) VALUES (uid, s_id);
EXECUTE IMMEDIATE CONCAT('DROP EVENT IF EXISTS ', 'del_song');
SET @event_sql = CONCAT(
'CREATE EVENT del_song',
' ON SCHEDULE AT "', DATE_ADD(NOW(), INTERVAL song_length SECOND), '" ',
'DO BEGIN ',
' DELETE FROM Listening_song WHERE Listening_song_id = ', s_id, ' AND nowPlayList_id = ', now_ply_id, '; ',
' DELETE FROM song_in_nowplaylist WHERE song_id = ', s_id, ' AND nowPlayList_id = ', now_ply_id, '; ',
'END'
);
PREPARE stmt FROM @event_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
현재 재생 목록에 노래 추가
DELIMITER $$
CREATE OR REPLACE PROCEDURE add_cur_song_ply(
IN uid BIGINT (20),
IN s_id BIGINT (20)
)
BEGIN
DECLARE now_ply_id BIGINT(20);
DECLARE song_length INT;
-- 유저가 현재 재생 목록을 가지고 있지 않은 경우
IF NOT EXISTS(
SELECT *
FROM nowplaylist
WHERE member_id = uid
)
THEN
-- 해당 유저의 현재 재생 목록을 새롭게 생성해줌
INSERT INTO nowplaylist(member_id) VALUES (uid);
END IF;
-- 해당 유저가 생성한 현재 재생 목록의 아이디를 now_ply_id에 받음
SELECT nowPlayList_id INTO now_ply_id
FROM nowplaylist
WHERE member_id = uid;
-- 현재 재생 목록에 해당 노래가 없는 경우 노래를 추가
IF NOT EXISTS(
SELECT *
FROM song_in_nowplaylist
WHERE song_id = s_id AND nowplayList_id = now_ply_id
) THEN
INSERT INTO song_in_nowplaylist(song_id, nowplayList_id) VALUES (s_id, now_ply_id);
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '이미 현재 재생 목록에 존재하는 노래입니다.';
END IF;
END $$
DELIMITER ;
현재 재생 목록에서 노래 삭제
DELIMITER $$
CREATE OR REPLACE PROCEDURE del_cur_song_ply(
IN uid BIGINT (20),
IN s_id BIGINT (20)
)
BEGIN
DECLARE now_ply_id BIGINT(20);
DECLARE song_length INT;
SELECT nowPlayList_id INTO now_ply_id
FROM nowplaylist
WHERE member_id = uid;
-- 유저가 현재 재생 목록을 가지고 있지 않은 경우
IF ISNULL(now_ply_id)THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '현재 재생 목록이 존재하지 않습니다.';
ELSE
-- 만약 현재 재생 목록에 해당 노래가 존재하지 않는 경우
IF NOT EXISTS(
SELECT *
FROM song_in_nowplaylist
WHERE nowPlayList_id = now_ply_id AND song_id = s_id
) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '현재 재생 목록에 해당 노래가 존재하지 않습니다.';
ELSE
DELETE FROM song_in_nowplaylist WHERE song_id = s_id AND nowPlayList_id = now_ply_id;
END IF;
END IF;
END $$
DELIMITER ;
재생 중인 노래 재생 횟수 증가
다음 재생 노래
DELIMITER $$
CREATE TRIGGER after_song_del_from_listening_song
AFTER DELETE ON Listening_song
FOR EACH ROW
BEGIN
DECLARE n_ply_id BIGINT(20);
DECLARE c_reg_date DATETIME;
DECLARE next_song_id BIGINT(20);
-- 삭제된 노래에 대한 reg_date 조회
SELECT reg_date INTO c_reg_date
FROM song_in_nowplaylist
WHERE nowPlayList_id = OLD.nowPlaylist_id AND song_id = OLD.Listening_song_id;
-- 삭제된 노래 이후의 노래들 중에서 가장 먼저 등록된 노래를 찾음
SELECT song_id INTO next_song_id
FROM Song_in_nowplaylist
WHERE nowPlayList_id = n_ply_id AND reg_date > c_reg_date
ORDER BY reg_date
LIMIT 1;
-- 찾은 다음 노래를 Listening_song 테이블에 추가
INSERT INTO Listening_song (song_id, nowPlayList_id) VALUES (next_song_id, n_ply_id);
END $$
DELIMITER ;
노래 제목 검색
DELIMITER $$
CREATE OR REPLACE PROCEDURE search_song_title(
IN song_title VARCHAR(30)
)
BEGIN
SELECT s.NAME AS `노래 제목`,
s.genre AS `장르`,
s.Streaming_cnt AS `재생횟수`,
a.`name` AS `앨범명`,
m.`name` AS `가수명`
FROM song AS s
JOIN album AS a ON s.album_id = a.album_id
JOIN member AS m ON a.member_id = m.member_id
WHERE s.name LIKE CONCAT('%',song_title, '%')
ORDER BY s.Streaming_cnt DESC;
END$$
DELIMITER ;
노래 가수 검색
DELIMITER $$
CREATE OR REPLACE PROCEDURE search_singer_name(
IN singer_name VARCHAR(20)
)
BEGIN
SELECT s.NAME AS `노래 제목`,
s.genre AS `장르`,
s.Streaming_cnt AS `재생횟수`,
a.`name` AS `앨범명`,
m.`nickname` AS '가수명'
FROM song AS s
JOIN album AS a ON s.album_id = a.album_id
JOIN member AS m ON a.member_id = m.member_id
WHERE m.nickname = singer_name
ORDER BY s.Streaming_cnt DESC;
END$$
DELIMITER ;
노래 장르 검색
DELIMITER $$
CREATE OR REPLACE PROCEDURE search_genre(
IN genre_name VARCHAR(10)
)
BEGIN
SELECT s.NAME AS `노래 제목`,
s.genre AS `장르`,
s.Streaming_cnt AS `재생횟수`,
a.`name` AS `앨범명`,
m.`name` AS '가수명'
FROM song AS s
JOIN album AS a ON s.album_id = a.album_id
JOIN member AS m ON a.member_id = m.member_id
WHERE s.genre LIKE genre_name
ORDER BY s.Streaming_cnt DESC;
END$$
DELIMITER ;
앨범 좋아요 누르기 기능
DELIMITER $$
CREATE OR REPLACE PROCEDURE member_add_album_like(
IN uid BIGINT (20),
IN a_id BIGINT (20)
)
BEGIN
IF NOT EXISTS (
SELECT *
FROM like_cnt
WHERE member_id = uid AND album_id = a_id
)
THEN
INSERT INTO like_cnt(member_id, album_id) VALUES (uid, a_id);
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '이미 좋아요를 누른 곡입니다.';
END IF;
END $$
DELIMITER ;
앨범 좋아요 취소 기능
DELIMITER $$
CREATE OR REPLACE PROCEDURE member_minus_album_like(
IN uid BIGINT (20),
IN a_id BIGINT (20)
)
BEGIN
IF EXISTS (
SELECT *
FROM like_cnt
WHERE member_id = uid AND album_id = a_id
)
THEN
DELETE FROM like_cnt WHERE member_id = uid;
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '좋아요를 누른 적 없습니다.';
END IF;
END $$
DELIMITER ;
좋아요 10만개 이상일 경우 명반 등록
DELIMITER $$
CREATE EVENT IF NOT EXISTS enroll_masterpiece
ON SCHEDULE EVERY 1 YEAR STARTS '2024-12-31 10:00:00' DO
BEGIN
UPDATE album
SET FIELD = 1
WHERE album_id IN (
SELECT album_id
FROM like_cnt
GROUP BY album_id
HAVING COUNT(*) >= 100000);
UPDATE album
SET FIELD = 0
WHERE album_id IN (
SELECT album_id
FROM like_cnt
GROUP BY album_id
HAVING COUNT(*) < 100000);
END $$
DELIMITER ;
앨범 전체 노래 플리 등극 가능
Song_In_Chart 테이블 데이터 삭제 스케쥴러
DELIMITER $$
CREATE EVENT delete_Song_In_Chart_data_at_midnight
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_DATE
DO
BEGIN
TRUNCATE TABLE Song_In_Chart;
END $$
DELIMITER ;
TOP100 차트 스케쥴러
DELIMITER $$
CREATE or replace EVENT updateTop100chart
ON SCHEDULE EVERY 1 DAY -- 이벤트가 매일 반복되도록 설정
STARTS CURRENT_DATE
DO
BEGIN
DECLARE top100_chart_id BIGINT;
-- top100 차트 아이디 조회
SELECT chart_id INTO top100_chart_id
FROM Chart
WHERE Chart.name = 'top100';
-- 중복되지 않은 song_id 삽입
INSERT INTO Song_In_Chart (chart_id, song_id)
SELECT top100_chart_id, song_id
FROM (
SELECT song_id, ROW_NUMBER() OVER (PARTITION BY song_id ORDER BY song_id) AS rn
FROM Streaming_count_by_member
) AS deduplicated
WHERE rn = 1 -- song_id 기준 첫 번째만 삽입
AND song_id NOT IN (
SELECT song_id
FROM Song_In_Chart
WHERE chart_id = top100_chart_id
);
END$$
DELIMITER ;
TOP100 차트 조회
SELECT RANK() over(order by ifnull(tbl1.streaming_cnt,0) DESC ) AS '순위',
s.name,
m.nickname AS '가수명',
ifnull(tbl1.streaming_cnt,0) AS 재생횟수
FROM (
SELECT song_id, IFNULL(COUNT(*),0) AS `streaming_cnt`
FROM Streaming_count_by_member
GROUP BY song_id
) AS `tbl1`
join Song_In_Chart AS sic ON sic.song_id = tbl1.song_id
JOIN Chart AS c ON c.chart_id = sic.chart_id
JOIN Song AS s ON s.song_id = sic.song_id
JOIN Album AS a ON a.album_id = s.album_id
JOIN Member AS m ON m.member_id = a.member_id;
연대별 TOP100 차트 조회
-- 연대 별 모든 차트를 Song_In_Chart 테이블에 추가
DELIMITER $$
CREATE OR REPLACE PROCEDURE Insert_All_In_Chart(
IN p_2000s_Chart_Id BIGINT,
IN p_2010s_Chart_Id BIGINT,
IN p_2020s_Chart_Id BIGINT
)
BEGIN
-- song_in_chart에 데이터 삽입
INSERT INTO Song_In_Chart (chart_id, song_id)
SELECT
CASE
WHEN a.rel_date >= '2020-01-01' THEN p_2020s_Chart_Id
WHEN a.rel_date >= '2010-01-01' THEN p_2010s_Chart_Id
WHEN a.rel_date >= '2000-01-01' THEN p_2000s_Chart_Id
ELSE NULL
END AS chart_id,
s.song_id
FROM
Song s
INNER JOIN Album a ON s.album_id = a.album_id
ORDER BY s.Streaming_cnt DESC
LIMIT 100;
-- 필요하면 결과 출력
SELECT chart_id FROM Chart;
END $$
DELIMITER ;
장르별 TOP100 차트 조회
-- 장르 별 노래를 차트에 삽입
DELIMITER $$
CREATE OR REPLACE PROCEDURE Insert_genre_in_chart(
IN input_chart_name VARCHAR(10)
)
BEGIN
DECLARE output_chart_id BIGINT(20);
-- chart_name으로 chart_id 조회
SELECT `chart_id` INTO output_chart_id
FROM Chart
WHERE `name` = input_chart_name;
-- 동일한 chart_id를 가진 기존 데이터 삭제
DELETE FROM Song_In_Chart
WHERE chart_id = output_chart_id;
-- song_in_chart에 데이터 삽입
INSERT INTO Song_In_Chart (chart_id, song_id)
SELECT
output_chart_id,
s.song_id
FROM
Song s
WHERE s.genre = input_chart_name
ORDER BY s.Streaming_cnt DESC -- 스트리밍 횟수 내림차순 정렬
LIMIT 100;
END $$
DELIMITER ;
신곡 차트 조회
DELIMITER $$
CREATE OR REPLACE PROCEDURE Insert_release_in_chart()
BEGIN
DECLARE output_chart_id BIGINT(20);
-- 신곡의 chart_id가 변경될 수 있으므로 chart_name으로 chart_id 조회
SELECT `chart_id` INTO output_chart_id
FROM Chart
WHERE `name` = '신곡';
SELECT output_chart_id; -- chart_id가 맞게 선정 되었는 지 확인
-- song_in_chart에 데이터 삽입
INSERT INTO Song_In_Chart (chart_id, song_id)
SELECT
output_chart_id,
s.song_id
FROM
Song s
INNER JOIN Album a ON s.album_id = a.album_id
WHERE YEAR(a.rel_date) = YEAR(CURDATE())
AND MONTH(a.rel_date) = MONTH(CURDATE())
AND NOT EXISTS (
SELECT 1
FROM Song_In_Chart sic
WHERE sic.chart_id = output_chart_id
AND sic.song_id = s.song_id
) -- 중복 song_id 방지 조건
ORDER BY a.rel_date DESC -- 스트리밍 횟수 내림차순 정렬
LIMIT 100;
END $$
DELIMITER ;
이름 | 내용 |
---|---|
유재우 | 처음 데이터베이스 개발에 도전했을 때는 생소함과 복잡성으로 인해 어려움을 겪었습니다. 하지만 팀원들과의 협업을 통해 테이블 간의 관계(1:N, M:N)를 이해하고, 이를 실제 쿼리문으로 구현하는 과정에서 많은 성장을 이루었습니다. 이러한 경험은 앞으로의 데이터베이스 개발에 있어 귀중한 밑거름이 될 것입니다. |
차경태 | 서비스에 구성 및 기능에 따라 테이블을 구성하고 테이블 간에 관계를 어떻게 설정해야 하는지 알 수 있었고, Git을 통해 팀원들간에 원활한 형상 관리하는 방법을 배우게 되었습니다. |
이승용 | 음악 플랫폼에서 사용하는 DB에 대해 이해하고, 다양한 방식으로 쿼리와 프로시저를 짜보면서 우리가 만든 테이블 간의 관계에 대해 더 고민하고 어떻게 발전시킬 지에 대해 고민해보면서 데이터 베이스에 대해 많이 배우는 기회가 됐습니다. |
안상현 | 플레이리스트라는 재미있는 주제로 데이터베이스 설계를 경험할 수 있었습니다.특히 서로 간의 아이디어를 잘 정리해서 올바른 설계 방향으로 나아가고, 멋진 발표까지 잘 마무리하였다는 점에서 뜻 깊은 시간이었습니다. |
이희진 | 프로젝트를 통해 데이터베이스 설계와 Git을 활용한 형상 관리를 처음 경험해볼 수 있었습니다. SQL 프로시저를 작성하는 데 어려움이 많았지만 팀원들의 도움 덕분에 많이 배우고 이해할 수 있었습니다. 어려운 과정을 극복하며 성취감을 느낄 수 있었고 더욱 성장할 수 있는 기회가 되었습니다. |