본문 바로가기

database4

ubuntu에 mysql 설치하기 설치sudo apt updatesudo apt install mysql-server 실행sudo systemctl start mysql 서버 재부팅 시 mysql 자동 시작 설정sudo systemctl enable mysql 포트 오픈mysql의 기본 포트는 3306보안 그룹에서 3306 포트 오픈aws같은 클라우드 환경에서 보안 그룹은 VPC 수준에서 트래픽을 제어하므로 해당 EC2 인스턴스에 도달하기 전부터 외부 트래픽을 필터링ufw 같은 로컬 방화벽이 설정되어 있지 않아도 외부로부터의 접근은 보안 그룹 설정에 의해 차단 config 설정외부 접속 허용sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]bind-address = 0.0.0.0기본 설정인 127... 2024. 11. 18.
페이지네이션 offset 과 cursor 차이 ( prisma ) 데이터베이스에서 전체가 아닌 특정 범위의 레코드만 조회할 경우가 있다.주로 offset 또는 cursor를 사용한다.  offset 기반 페이지네이션1. offset 만큼 레코드를 건너뛰고 limit 만큼 레코드를 가져온다. 2. 이를 orm인 prisma에서는 skip, take로 표현한다.const results = await prisma.post.findMany({ skip: 3, take: 4,})  3. 한 페이지당 보여주어야 할 게시물이 10개이고 3번 페이지로 이동한다면 20개를 스킵하고 그 다음부터 10개의 레코드를 조회해서 보여주면 된다.const results = await prisma.post.findMany({ skip: 10 * ( 3 - 1 ), take: 10,}) 장점.. 2024. 4. 30.
MySQL Error [1248]: Every derived table must have its own alias 에러 원인 1. MySQL은 파생 테이블이나 서브쿼리로 생성된 각 테이블에 대해 alias(별칭)이 필요하다. 2. 이 별칭은 쿼리 내에서 해당 테이블을 참조할 때 사용된다. 에러 쿼리 SELECT * FROM (SELECT point FROM post WHERE category = 'B' AND today_rank = 1) 해결 alias를 지정해준다. SELECT * FROM (SELECT point FROM post WHERE category = 'B' AND today_rank = 1) AS p 2024. 3. 16.
MySQL Error [1093]: You can't specify target table 테이블명 for update in FROM clause 에러 원인 MySQL은 UPDATE, DELETE의 경우 SELECT와 달리 자기 테이블의 데이터를 바로 사용할 수 없다. 상황 A 카테고리에서 1등 게시글의 포인트 점수와, B 카테고리에서 1등 게시글의 포인트의 차이를 계산해서 gap column을 업데이트 하고 싶다. 테이블 정의 CREATE TABLE post ( id BIGINT AUTO_INCREMENT PRIMARY KEY, category VARCHAR(1) NOT NULL, today_rank BIGINT NOT NULL, point INT NOT NULL, gap INT NULL ); 에러 발생 쿼리 UPDATE post SET gap = point - (SELECT point FROM post WHERE category = 'B' AN.. 2024. 3. 16.