create table person ( pid int NOT NULL, name varchar(16), age int, sex char, primary key (pid) );

alter table person drop primary key;

alter table person add primary key(pid);
create table orders ( order_id int not null, order_no varchar(16), pid int, primary key (order_id), constraint FK_person foreign key(pid) references person(pid) );
위에서 만들었던 person 테이블의 pid 컬럼을 기본키로 참조하는 외래키(pid)를 만들었다.

create table job ( job_id int not null, name varchar(16), pid int, primary key (job_id), foreign key (pid) references person(pid) );

alter table orders drop foreign key FK_person;
alter table orders add foreign key(pid) references person(pid);
기존테이블에서 기본키나 외래키를 다시 지정하는 방법에는 add가 쓰인다는것에 유념하자
외래키가 제대로 지정되었는지를 확인하려면 아래 코드를 실행하여 내용을 확인해보자
show create table orders;
문장의 중간을 보면 'PRIMARY KEY'부분에 외래키로 person 테이블에서 pid기본키를 참조하고 있다는 내용을 확인 할 수 있다.
'orders', 'CREATE TABLE `orders` (\n `order_id` int NOT NULL,\n `order_no` varchar(16) DEFAULT NULL,\n `pid` int DEFAULT NULL,\n PRIMARY KEY (`order_id`),\n KEY `pid` (`pid`),\n CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `person` (`pid`),\n CONSTRAINT `orders_ibfk_2` FOREIGN KEY (`pid`) REFERENCES `person` (`pid`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci'
1) 터미널에서 서버 접속
%mysql -h 엔드포인트입력 -P 포트입력 -u 사용자입력 -p
2) 테이블 상태 확인

police_station 테이블에서 name컬럼을 중복을 제거했을때 총 31개가 있다는것을 알수 있다.

crime_status 테이블의 police_station 컬럼의 중복제거 후 갯수도 31개로 동일한 것을 알 수 있다.


where절에서 concat 을 이용하여 각 테이블의 매칭되는 부분을 확인한 모습이다.
3) police_station 테이블에 기본키 설정
alter table police_station add primary key(name);

4) crime_status 에 외래키 설정
crime_status 테이블에 reference 컬럼을 추가하여 외래키를 설정
alter table crime_status add column reference varchar(16); alter table crime_status add foreign key (reference) references police_station(name);
5) 외래키 설정을 마무리하고 police_station의 name의 내용을 crime_status에 업데이트
update crime_status c, police_station p set c.reference = p.name where p.name like concat('서울',c.police_station,'경찰서');


select count(name) from police_station; select count(distinct name) from police_station;

select police_station from crime_status group by police_station order by police_station limit 5;



select police_station, sum(case_number) as count from crime_status where status_type like '발생' group by police_station having count > 4000;
