반응형
반응형
개요A테이블의 id컬럼을 참조하는 B테이블이 있다.여기서 A테이블의 id컬럼 값을 변경하려고 할 때,데이터 일관성을 유지해야하기 때문에 참조 무결성의 제약 조건으로 업데이트를 할 수 없다.하지만 가끔 잘못 넣은 값을 다른 값으로 업데이트해주어야 할 때가 있는데,FK 때문에 참조 관계로 엮여있어서 계속 오류가 발생하여 값을 업데이트하지 못한다.발생되는 오류는 다음과 같다.Error Code: 1451.Cannot delete or update a parent row: a foreign key constraint fails (`database`.`FK table`, CONSTRAINT `FK Name` FOREIGN KEY (`id`) REFERENCES `table` (`id`)) ON UPD..
개요데이터베이스의 데이터 모델링 설계 시,설계된 데이터 테이블의 설계도를 시각화해야할 때가 있다. ERD(Entity Relationship Diagram)은데이터베이스에서 모델링된 요소들의 관계를 시각적으로 보여주는 엔터티 관계 다이어그램인데,주로 데이터베이스의 설계된 모델을 시각적으로 표현하고 관계를 설명할 때 사용된다. 이번 포스팅에서는 ERD를 직접 그리는 방법보다는실제로 MySQL 데이터베이스 내에 설계되어 있는 데이터 테이블을 추출하여ERD로 자동으로 그려주는 방법에 대해 설명하고자 한다. 이 글은 MySQL Workbench의 기능을 이용하여 ERD를 그리는 것을 목적으로 한다. 실제 데이터베이스의 테이블을 ERD로 그리기우선, MySQL Workbench를 실행한다. 워크벤치 상단 메뉴에서..
개요 하나의 UPDATE 쿼리에 여러 개의 테이블이 조인되어 있는 상황을 볼 수 있다. 이는 참조되어 있는 다른 테이블의 값을 확인하여 대상이 되는 테이블의 값을 수정하기 위함인데, 가끔 참조하는 테이블까지 같이 수정해야 하는 경우가 있다. 예를 들어, 이름과 주소가 각각 다른 테이블에 되어 있을 때, 공통되는 키를 참조하여 조인을 해서 번거롭게 여러 번의 UPDATE 쿼리문을 작성해야 한다. -- t1 : id, name UPDATE t1 SET name = 'eunbyeol'; -- t2 : id, address UPDATE t2 SET address = 'incheon'; 한 두 번이면 상관없지만... 반복되는 업데이트 쿼리문을 작성하기에는 솔직히 조금 귀찮다. 이 경우, 조인을 해서 한꺼번에 업데..
Error DATETIME 형식인 컬럼에 문자열로 된 날짜를 넣으려고 했는데 다음과 같은 에러가 출력되었다. insert into t1 select '08 31 2017 7:14PM' /* Error Code: 1292. Incorrect datetime value: '08 31 2017 7:14PM' for column 'col_date' at row 1 */ 해결 방법 MySQL이 DATETIME 형식을 인식할 수 있는 형식으로 변환해야 한다. 일반적으로 MySQL에서는 'YYYY-MM-DD HH:MM:SS' 형식을 따른다. DATETIME 형식을 변환하기 위해서는 STR_TO_DATE() 함수를 사용하면 된다. 입력하는 문자열의 형식을 DATETIME으로 변환할 수 있도록 형식을 매치시켜서 기입해주..
Error MS-SQL의 데이터를 MySQL의 데이터베이스에 마이그레이션 해야하는 작업이 있었다. M-SSQL SSMS에서 쿼리 결과를 CSV 파일로 만들었고, MySQL Workbench에서 CSV 파일을 Import 하려는 도중 아래와 같은 에러 문구가 출력되었다. Unhandled exception: 'cp949' codec can't decode byte : illegal multibyte sequence 해결 방법 결론부터 말하면 CSV 파일을 열어 그냥 CSV파일 확장자로 변경하면 된다. 오류가 출력되는 이유는 MySQL 자체에서 지원하지 않는 인코딩 형식이라는 것이다. 대개 한글이 포함된 파일의 경우 'CP949'의 인코딩 형식이 많다고 한다. 하지만 MySQL에서는 CSV 파일의 인코딩 형..
서론 MySQL에서 SELECT의 조회 결과가 1000개가 출력된다. 문제는 결과의 행이 1000개 일리 없는 데이터 결과 셋이 계속 1000개로 고정되어서 결과가 조회된다는 것이다. select count(*) from t1; 심지어 확인해보니 계속 LIMIT 키워드가 적용되어 있다. select * from t1; 나는 제한을 걸어준 적이 없는 LIMIT 1000으로 인해 결과 셋의 행이 천 개로 제한되는 것이다. 이 LIMIT를 없애려면 어떻게 해야할까? 방법1 : 직접 LIMIT 제한 범위를 걸어주기 직접적인 해결 방법은 아니지만, 쿼리 자체가 'LIMIT 1000'으로 고정되기 때문에 쿼리에 LIMIT를 넣어 직접적으로 리미트 제한을 늘려준다. 다만 이런 방식으로도 조회할 수 있다는 방법 중 하..