728x90

https://stepby-yun.tistory.com/192?category=554522 

 

mysql while 여러시도..

https://stepby-yun.tistory.com/191 mysql procedure 프로시저 생성 및 실행 (구본문자 DELIMITER ) while문 해보려는데.. 나와같은 의문을 가지신 분 프로시저 꼭 만들어서 써야돼? https://stackoverflow.com/q..

stepby-yun.tistory.com

프리비어슬리~

 

새로 생긴 행이랑 이전 행 시간을 빼서 1분 이상일때마다

값을 넣어줄까? 했는데 무한insert되고 난리남

 

(이 글의 결론)

1분이 흐를때마다 ->이자증액값을 넣어준다

에서

값넣는다. 1분마다시간증가, 이자증액, 

이렇게

insert할때 한꺼번에 넣는 걸로 식만듦..(저번에 한달씩 증가랑 똑같이 함.)

------

 

 

 

기준 잡기의 중요성..

한 시간씩 증가하고

넣고 먼저 해보자

최대증가한 시간

몇번째 행의 시간이 얼만지 생각! 

 


 

use test;
truncate sequence;


set @setTime = (select subtime(now(),'00:02:00'));

insert into sequence (name,deposit_date,deposit_amount,interest_amount) values ('이소윤',@setTime,'10000000','0');

drop procedure if exists pro;
delimiter //
create procedure pro()
begin
while (select id from sequence order by id desc limit 1) < 10 do


INSERT INTO sequence (name,deposit_date,deposit_amount,interest_amount) 
select 
(select name from sequence order by id desc limit 1),
date_add((select deposit_date from sequence where  deposit_date order by id desc limit 1),INTERVAL 1 hour),
((select deposit_amount from sequence where  deposit_amount order by id desc limit 1) + (select interest_amount from sequence where  interest_amount order by id desc limit 1)),
(select deposit_amount from sequence where id='1')* 0.04 /12;

end while;
end //
delimiter ;

call pro();

select * from sequence;
 


아 다음행에 insert 추가 되는게

마지막 id가 9이니까

 

10까지 뜨는거구나~!!

 

그래도 deposit_amount의 마지막행 10000000을 구해서 이자액 33333을 구했으면 

 

2번째 행에 deposit_amount도 들어갈 수 있는거 아닌가 왜 

 

null값이지? 

 

 

+

 

지금은 한번에 들어가는거니까 

날짜를 추가하고 추가될때마다 이자액이 찍히게 하면 되려나...

 

 

update써서 해보자

 

update 안되는이유 여기서 세팅 설정바꿔줘야함

https://lightblog.tistory.com/193

 

[MYSQL] 에러 번호 1175 Safe Update 해결방법

MySQL에서 쿼리를 실행하다보면 다음과 같은 에러를 마주할 때가 있다. Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable..

lightblog.tistory.com

오마갓 숫자를 ''

여기 넣어서 문자열로 만들어서 쓰고있었네

 

 

 

 

하지만 잘 안됨

use test;
truncate sequence;
set @setTime = (select subtime(now(),'00:02:00'));
insert into sequence (name,deposit_date,deposit_amount,interest_amount) values ('이소윤',@setTime,10000000,0);





drop procedure if exists pro;
delimiter //
create procedure pro()
begin
DECLARE n varchar(45) default "이소윤" ;

while (select id from sequence order by id desc limit 1) < 10 do
INSERT INTO sequence (deposit_date) select (date_add((select deposit_date from sequence where  deposit_date order by id desc limit 1),INTERVAL 1 hour));

update sequence 
set 
name = n,
interest_amount =  (select deposit_amount where  deposit_amount order by id desc limit 1)* 0.04 /12;




end while;

end //
delimiter ;
call pro();

select * from test.sequence;


 

---

시간 증가만 insert해주고

나머지는 update로 넣어주려 했으나 잘안됨..

그래서 원래 한번에 다 insert한 걸로 수정함

 

중간에 null인거..

 

 

그냥 id가 2인거 조건으로 넣어줌..

이러면 안될거같지만

use test;
truncate sequence;


set @setTime = (select subtime(now(),'00:02:00'));

insert into sequence (name,deposit_date,deposit_amount,interest_amount) values ('이소윤',@setTime,10000000,0);

drop procedure if exists pro;
delimiter //
create procedure pro()
begin
while (select id from sequence order by id desc limit 1) < 10 do


INSERT INTO sequence (name,deposit_date,deposit_amount,interest_amount) 
select 
(select name from sequence order by id desc limit 1),
date_add((select deposit_date from sequence where  deposit_date order by id desc limit 1),INTERVAL 1 hour),
((select deposit_amount from sequence where  deposit_amount order by id desc limit 1) + (select interest_amount from sequence where  interest_amount order by id desc limit 1)),
(select deposit_amount from sequence where id='1')* 0.04 /12;


end while;
end //
delimiter ;

call pro();

update sequence 
set deposit_amount = 10000000
where id = 2;


select * from sequence;

 

 

 order by limit 1

를 쓰는 것보다 max가 좀더 빠르다는 얘기를 들음

내일 수정해봐야겠다

 

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
728x90

nodejs책 340쪽 필기함

 

공식문서도 좋음

 

 

https://sequelize.org/v4/manual/tutorial/associations.html

 

Tutorial | Sequelize | The node.js ORM for PostgreSQL, MySQL, SQLite and MSSQL

Associations This section describes the various association types in sequelize. When calling a method such as User.hasOne(Project), we say that the User model (the model that the function is being invoked on) is the source and the Project model (the model

sequelize.org

 

728x90
728x90

 

상황: 

우분투 연결안된 비주얼코드창에서 마리아db연결하겠다고 삽질하고 있었던 것을 깨닫

 

마리아db 이미 깔려있고 리눅스창에서 작업해야되는거니까 mysql 워크벤치 연동은 의미없다는 것을 깨닫

 

비주얼코드 우분트연결 창 켜서 

폴더만들어서 안에 로그인되는 코드넣어놓고 작업시작

npm i

디비 생성

 

역시 같은 에러.

이 오류에 경우

 

1. 비번 틀렷을 경우

2. 권한설정이 안됐을 경우.

3. 기타 등등 있대서

 

비번은 바꿔주고 확인해봤으니 아니고

 

 

 

비번바꾸기

use mysql;

사용자와 비밀번호 출력하기

select user, password from user;

abc 사용자의 비밀번호를 1234로 설정

update user set password=password('1234') where user='abc';

변경 사항 적용

flush privileges;

 

 

 

 

 

 

권한설정이 문제인가 해서

 

mariadb 계정 권한설정

MariaDB [mysql]> grant all privileges on *.* to 'test'@'localhost' with grant option; Query OK, 0 rows affected (0.002 sec)

https://94mogi.tistory.com/7

바꿔봤는데도 안됐음 

 

 

우분투 파일 권한 설정

이 문젠가 싶어서 그것도 해봄 

하위폴더까지 다 권한줌

[root@~/]# chmod 755 -R /폴더명

777도 해봄(이거는 보안상 위험할 수 있대서 다시 755로 바꿨다, 물론 에러 원인은 아니었지만)

 

(이거 개념 나중에 참고하삼 https://withcoding.com/103)

연산자 설명 배리 굿https://nachwon.github.io/shell-chmod/

 

[Shell] chmod - 파일 및 폴더의 권한 설정

chmod 셸 명령어는 파일 또는 폴더의 권한을 변경할 때 사용한다.

nachwon.github.io

 

 

여전히 같은 에러 뜸

 

이번에는 계정이 문젠가 싶어서 

기존계정 삭제하고 다시 만들어봄

 

 

 

mariadb 계정 삭제

 

use mysql

DROP USER '계정'@'접속대역';

 

새로 만들고

권한설정도 하고

 

플러그인이 문제인가 싶어서 해봄

MariaDB [mysql]>  update user set plugin='mysql_native_password' where user='mariatest';

확인

MariaDB [mysql]> select user,host,plugin from mysql.user;

 

 

이걸로 해봤는데도 안됨

 

 

 

 

 

혹시나해서 비밀번호 초기화 해봄

(및 보안강화를 위한 설정명령어, 라고 함.)

 

sudo mysql_secure_installation

이후에 우분투 켜서 다시 접속하려는데 안됨

mysql -u root -p

sudo mysql

이거 둘다 안됨

 

 

 

 

mariadb들어갈때 

sudo mysql해서 들어가는데 

에러뜸

 

 

새로운 에러 등장~~

에러 

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

 

 

 

service mysql start 

sudo su-로 들어가서 하니까 시작되고

나와서

sudo mysql하니까 접속됨

 

 

 

들어와서 db생성 실행해보니

 

역시 안되고

 

 

엇 생각해보니까

이 mariadb 포트가 3307인데 

config에 포트 추가로 넣은거 걍 아무거나 넣어본거였거든

 

똑같은 포트번호 3307으로 해봄

 

 

 

 

와우 

생성잘됨

 

 

삽질2 포트번호가 달라서 그랬던거임

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

생각해보니까 이 에러도

 

전에 mariadb깔고 실행할때 떴던 에러인데

기존에 깔려있는 mysql이 3306포트를 써서 mariadb량 겹쳐서 위에 에러가 떴거든

그때 mariadb포트를 3307으로 바꿔줌

(mariadb설치시 위 에러해결 이거 참고하슈 : https://codecoco.tistory.com/58?category=524414

 

 

 

db안에 회원가입한거 잘들어왔나 확인

 

응잘들어옴 로그인도 잘됨

 

 

 

mariadb

로그인하기 db생성하기 

 

끝~~

 

 

(아근데 로그인하는 코드자체 제로초보고 다 따라한거라 나중에 해봐야겠다...

혼자 해보려다가 잘안됐음.. 여기서 시간 많이 먹긴함ㅋ)

 

 

728x90

+ Recent posts