MySQL의 InnoDB엔진을 사용하는 경우, 외래키를 사용할 수 있습니다. 외래키는 부모 테이블과 자식 테이블 간의 관계를 위해 생성하는 키로, 해당 컬럼에 인덱스 생성이 필요하며 변경 시에는 반드시 부모 테이블이나 자식 테이블에 데이터가 존재하는지 체크하는 작업이 필요합니다. 개발 환경에서는 위와같은 테이블간의 관계가 좋은 가이드 역할을 할 수도 있지만, 테이블간의 체크로 인해 잠금이 여러 테이블로 전파하여 데드락이 발생하는 경우도 있습니다. 또한, 부모와 자식 테이블의 관계를 생각안하고 데이터를 삭제 및 변경 하는 경우에도 작업이 실패하는 경우게 생기게됩니다. ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key const..
MySQL
데이터베이스에서도 함수가 존재합니다. 흔히 알고있는 count, max, min, sum, avg같은 집계함수도 있지만, 그 외에도 굉장히 많은 함수들이 존재합니다. 그 중에서 문자열과 관련된 자주 사용되는 함수에대해서 알아보려고 합니다. 문자열concatsubstringupper / lower문자열관련 함수는 위의 세가지 종류에 대해서 알아보겠습니다.concat문자열을 연결하고 싶은 경우에 사용합니다.SELECT concat("My Name is ", "JONGIN"); 위와같이 "My Name is "라는 문자열과 "JONGIN"이라는 문자열을 합치기 위해 실행해보면,위와같은 결과가 출력되는 것을 확인할 수 있습니다. 결과 컬럼을 보면, 사용한 함수가 그대로 출력되기 때문에 가독성이 굉장히 떨어진다..
집계함수SELECT절에 사용되며, 여러 행으로부터 하나의 결가값을 반환하는 함수이다.종류에는 COUNT, SUM, MIN, MAX, AVG가 존재합니다.COUNT레코드의 수를 반환해준다.SELECT count(*) FROM customers;count(*)를 사용하게 되면, 모든 레코드 수를 반환하게 됩니다. customers 테이블에는 총 120개의 레코드가 존재한다는 것을 알 수 있습니다.⚠️주의count 함수는 값이 NULL인 값은 집계하지 않습니다.SELECT count(first_name) FROM customers;first_name 컬럼에 대해서 카운트 함수를 사용하면,count(*)의 결과에서는 모든 레코드의 수가 반환되었지만, count(first_name)을 사용하게되면 NULL인 값을..
MySQL에서 새로운 컬럼을 추가 및 삭제하는 것부터,기존의 컬럼의 제약조건/컬럼명/데이터 타입을 수정하는 SQL을 정리해봤습니다.컬럼 추가 & 삭제추가ALTER TABLE ADD COLUMN ;위의 sql은 기본적 데이터 타입만 추가한 컬럼이지만, 그 외에도 제약조건이나 컬럼의 위치를 변경하는것도 가능하다.ALTER TABLE usersADD COLUMN email VARCHAR(50) UNIQUE AFTER name;위와같이, users 테이블에 email 컬럼을 추가하는데 데이터타입은 VARCHAR(50)이고, UNIQUE 제약조건을 가지며 name 컬럼 뒤에 위치시킨다.삭제ALTER TABLE DROP COLUMN ;제약조건 수정기본키 추가ALTER TABLE ADD PRIMARY KEY ();..
Linux는 centos기반의 환경에서 설치해볼려고 합니다. RPM을 이용한 설치를 하기위해서 centos 이미지를 통한, 컨테이너를 만들고 MySQL8.0를 설치할려 합니다. ※RPM : Red Hat 기반의 패키지 매니저 Docker 환경 CentOS7 버전을 이용한 컨테이너 실행 docker run -d --privileged --name mysql8.0 centos:centos7 /sbin/init 위의 옵션들을 짧게 설명하자면 -d : 백그라운드로 실행 --privaileged : systemctl을 사용하기 위한 추가 옵션 --name : 컨테이너 이름 centos:centos7 : centos 이미지를 사용하는데 버전을 7버전을 사용 /sbin/init : 사용할 명령어 컨테이너에 추가 프로..
저번에 만든 wordpress 환경에 network 적용과, MySQL에는 볼륨옵션을 추가해볼려고 합니다. 기존의 컨테이너 정지 / 삭제 docker stop mysql docker rm mysql docker stop wordpress docker rm wordpress 우선 컨테이너를 삭제하기 위해서는 정지된 상태여야 하기 때문에, 컨테이너를 중지 시킨 뒤 삭제해줍니다. network 생성 network를 생성하게 되면, 컨테이너를 그룹처럼 관리할 수 있게됩니다. 그러면, wordpress 컨테이너를 생성할 경우에 -e WORDPRESS_DB_HOST=host.docker.internal로 설정해주었던 것도 -e WORDPRESS_DB_HOST=mysql 이런식으로 설정이 가능해집니다. docker ..