728x90

while문 해보려는데..

나와같은 의문을 가지신 분

프로시저 꼭 만들어서 써야돼?

https://stackoverflow.com/questions/12954095/mysql-declare-while-outside-stored-procedure-how

 

mysql DECLARE WHILE outside stored procedure how?

I fairly new to mysql but have MS SQL experience. Is it possible to declare variables and use while statement outside stored procedure? I only found examples where guys doing like this 1. proced...

stackoverflow.com

안된데 따흑.

https://dev.mysql.com/doc/refman/8.0/en/sql-compound-statements.html

^공식문서...

 

 

방금 스택오버 따라서 코드 처보는데

DELIMITER 

이거 맨앞에 넣어야 빨간줄 안뜨네

너 뭐야..

 

공식문서가 말하길,,

"기본적으로 mysql 자체는 세미콜론을 명령문 구분 기호로 인식하므로 mysql 이 전체 ​​저장 프로그램 정의를 서버에 전달하도록 하려면 구분 기호를 일시적으로 재정의해야 합니다.

mysql 구분 기호 를 재정의하려면 delimiter명령을 사용하십시오. //전체 정의를 단일 명령문으로 서버에 전달한 다음 ;프로시저를 호출하기 전에 로 복원할 수 있도록 구분 기호가 변경됩니다 . 이렇게 하면 프로시저 본문에 사용된 구분 기호가 mysql 자체 ; 에서 해석되지 않고 서버로 전달될 수 있습니다."

 

어 그렇구나..(이해못함)

https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html

 

식 사이를 구분지어주는 거같음

 

아니!! 근데!!! 아무것도 안나와 

-> 계속 생기고 뭐지

세미콜론으로 끝내려는데도 안됨

뭘까..?

 

 

 

 

 

아하!

 

MySQL 콘솔창은 쌍반점(;)이 입력되면 어떤 경우에서건 일단 쌍반점(;) 이전 단계까지 명령문을 실행하게 됩니다.

구분 문자(;) 변경하기

명령분이 완성되지 않은 상태에서 실행되면 곤란합니다. 저장 프로시저에서 END를 입력하고 나서 CREATE PROCEDURE 명령이 실행되도록 환경을 변경해야 합니다.

 

그러려면 저장 프로시저를 작성하기 전에 구분 문자를 쌍반점(;)이 아닌 다른 문자로 변경해 둡니다. 일반적으로는 //을 사용합니다.

 

구분 문자를 //으로 변경할 때에는 DELIMITER 명령을 사용합니다.


맨 마지막의 DELIMITER ;는 구분 문자를 원래대로 되돌려 놓는 명령입니다. 구분 문자를 쌍반점(;)으로 되돌려 놓는 것을 잊지 않도록 합니다.

출처: https://recoveryman.tistory.com/186 [회복맨 블로그]  회복맨, 당신은 최고의 정리맨이자 설명맨입니다. 짱짱~


 

DELIMITER 가 구본문자를 바꾸는 명령어구나

구본문자를 세미콜론에서 //이걸로 바꿔놓고 

안된다고 하고 있었구나....ㅋㅋㅋㅋㅋㅋ

 

 

 

DELIMITER //
create procedure pro()
begin 
select name from sequence;
select deposit_date from sequence;
end
//




DELIMITER ;

call pro;

 

 

삭제하고 다시 만들어봐야지

 drop procedure if exists 프로시저 이름;

 

 

임의로 값 넣어놓음

 

DELIMITER //

구본문자//로 바꾸고

create procedure pro(d int)

프로시저 pro만들고 int형 인수d들어가게끔 사용할거임
begin 

시작
select * from sequence where interest_amount < d;

다가져와 seuquence 테이블에서 interest_amount가 d보다 작은 것중에서
end


//

프로시저 끝


DELIMITER ;

구본문자 다시 ;로 바꿈

call pro(3);

프로시저 실행. 인수에 3넣고 (3보다 작은 interest_amount 가져올거임)

 

 

 

 

이제 다시 while문 해봐야지..

 

https://recoveryman.tistory.com/186

 

[MySQL & PHP] 12장 저장 프로시저 활용하기

정리 1. 저장 프로시저의 의미와 작성 방법 1. 저장 프로시저란? 1.1 이용할 수 있는 버전 저장 프로시저를 학습하기 전에 MySQL의 버전을 확인하도록 합니다. 저장 프로시저는 MySQL 버전 5.0 이상에

recoveryman.tistory.com

 

이글은 보고 또 봐야지.. 뒤에는 다 안해봄!

 

 

 

 

728x90
728x90

https://dukdukz.tistory.com/entry/210604-Sequelize-auto-%EB%A1%9C-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%83%9D%EC%84%B1-%EA%B5%AC%EB%AC%B8-%EB%A7%8C%EB%93%A4%EA%B8%B0

https://www.hanumoka.net/2018/11/23/node-20181123-express-setting-sequelize/

 

Node Express에 sequelize를 이용해 mysql접속하기

들어가기Express 프로젝트에 sequelize(시퀄라이저)를 이용하여 로컬에 있는 mysql에 접속하는 예제를 정리해본다. 미리 로컬에 mysql을 설치하고, 스키마와 계정을 생성 해놨다. 테스트용 Express 프로젝

www.hanumoka.net

MySql에서 워크벤치로 테이블구성을 다 하고 

코드에서 시퀄라이즈 연동을 하려니까 번거로웠다. 뿐만 아니라 타입이 일치한데 해당하는 테이블을 찾을 수 없다고 연결이 안돼서 답답했다. 찾아보니 역시 자동으로 구성된 테이블 코드를 짜주는 방법이 있었다!!

 

나는 EER 에서 다이어그램으로 테이블을 먼저 짰다.

그리고 Forward Enginner를 누르면 

만든 다이어그램이 테이블로 생성이 된다. (Synchronize Model하면 기존에 있는 테이블을 수정하고 업데이트할 수 있다.)

 

 

이제 코드에서 만져보자

 

시퀄라이즈 세팅을 먼저 한다. 

(npm i express

npm i -D nodemon

)

npm i sequelize //시퀄라이즈

npm i mysql2   //mysql과 시퀄라이즈를 이어주는 드라이버이다. 

npm i sequelize-cli   //시퀄라이즈 명령어를 실행하기 위한 패키지다

 

npx sequelize init //하면 기본 폴더가 생성된다.

이제 자동으로 db테이블 코드가져와주는

npm i sequelize-auto

를 깐다. 

 

터미널에 명령어를 입력한다.

npx sequelize-auto -o "./models" -d nodejs -h "localhost" -u "root" -p "3306" -x "비밀번호" -e mysql

 

 

-o "경로"
-d "db 이름"
-h "url"->localhost
-u "root"
-p "port"
-x "password"
-e "mysql"

 

 

그럼 필요한 user, music,artist 코드가 자동으로 생긴다. 

근데 문제는 코드가 좀 다르다 function이다.

 

내가 db구조 짤때 참고한 nodejs책에서는 class로 해서 

안에 내용을 기존에 참고했던 식으로 바꿔줬다. 큰틀만 바꾸면 됨

artist.js

그리고 init-model.js도 생겼는데

나는 index.js로 작업하고 잘모르겠고 구조도 바꿔줘서 

주석처리했다. 

대신 관계정의할 때 필요한 것들은 참고해서 넣었다.

artist.js

수정한다음에 혹시몰라서 

워크벤치에 있는 database를 삭제하고

 

npx sequelize db:create로 다시 db를 만들고

npm start 실행했다. 

 

연결잘된다. 

 

 

(

문제는 내가 원하는건 user랑 artist의 1대1관계인데

분명 user에 hasOne, artist에 belongsTo로 줬는데 

왜 다이어그램을 뽑아보면 1대다로 나오는지 모르겠다....)

 

 

 

 

그리고 일대다에도 종류가 두개있어서 놀람

https://jins-dev.tistory.com/entry/RDBMS%EC%9D%98-%EA%B4%80%EA%B3%84-Identifying-NonIdentifying-Relationship-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

 

RDBMS의 관계 - Identifying & Non-Identifying Relationship 에 대하여

 RDB에서 관계를 맺는데 있어서 식별관계(Identifying Relationship)와 비식별관계(Non-Identifying Reltationship)가 존재한다. 정확히는 RDBMS에서 나누는 관계가 아닌 ER Diagram 상에서 논리상 나누는 개념이..

jins-dev.tistory.com

 

이건그냥 공식문서 필요할때 보라고 넣어둠

https://sequelize.org/master/manual/legacy.html

 

Manual | Sequelize

Working with Legacy Tables While out of the box Sequelize will seem a bit opinionated it's easy to work legacy tables and forward proof your application by defining (otherwise generated) table and field names. Tables class User extends Model {} User.init({

sequelize.org

 

728x90

+ Recent posts