DELETE, UPDATE를 할 때 id를 참조하여 바꾸지 않으면 1175 에러가 난다. 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 safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 언제나 키 컬럼을 참조해서 row를 변경, 삭제할 수 있다면 좋을 것이지만, 간단한 테스트나 연습의 경우에는 그러기가 좀 곤란하다 그럴때는 safe mode를 해제해주면 된다. set sql_safe_updates=0;
다이어그램 회원가입시 customers 페이지에 개인정보가 저장된다. (id가 고유하게 존재한다.) orders는 회원이 물건을 구매할 시 row가 생성되는 테이블이다. (id가 고유하게 존재한다.) orders의 개별 id는 고유하지만, 회원 정보가 있어야만 물건을 구매할 수 있으므로, orders의 customer_id는 customers의 id를 외래키로 참조한다. 하나의 회원이 여러개의 orders row를 가질 수 있으므로, 이는 일대 다 관계에 해당한다. SQL문 // customers 테이블 생성 CREATE TABLE customers ( id INT AUTO_INCREMENT, first_name VARCHAR(50) NOT NULL, last_name VARCHAR(50) NOT NUL..
문제 DELETE나 UPDATE 사용할 때, 메인 쿼리에서 만들어낸 서브쿼리를 직접적으로 참조하면 에러가 발생한다. DELETE FROM people WHERE name = (SELECT name FROM people WHERE name = 'PJY' LIMIT 1); 위의 SQL에서 에러가 발생했다. 해결 1. DELETE나 UPDATE 사용 시 서브쿼리를 사용하지 않는 방법 DELETE FROM people WHERE name = 'PJY' LIMIT 1; 서브쿼리를 사용하지 않는 편이 성능상으로나 쿼리 가독성으로나 더 좋은 방법이다. (+ LIMIT 거는 이유) 한번에 너무 많은 ROW를 삭제하면 데이터베이스에 부하가 가해지므로, 다른 트랜잭션이 처리되지 않아 데드락이 걸릴 수 있다. 이를 방지하기..
테이블 설정하기 전에 스키마(데이터베이스)가 설정되었다고 가정하고 진행한다. 명령프롬프트로 테이블 설정 스키마에 접근한다. 여기에서 스키마명은 nodejs 이다. TABLE을 만든다. CREATE TABLE 테이블명 으로 TABLE 생성을 선언한다. CREATE TABLE 테이블명 ( ) 에서 괄호 내부에 있는 내용들은 데이터베이스의 각 컬럼에 대한 정보를 설정하는 것이다. 괄호 바깥에 있는 내용들은 테이블에 대한 설정에 관한 것이다. 테이블의 소개, 기본 캐릭터셋, 데이터베이스 엔진등을 설정할 수 있다. 위의 프롬프트에서 볼 수 있듯이, id부터 created_at까지는 컬럼에 대한 설정이다. 해당 테이블에 대한 설정도 존재하는데, 일단 컬럼에 대한 설정부터 알아보자. 컬럼에 대한 설정 INT는 정수를..