cur = conn.cursor()
sql = 'show tables'
cur.execute(sql)
result = cur.fetchall()
for i in range(len(result)):
print(result[i])

sql = 'create table cctv(기관명 varchar(16),\
소계 int,\
2013년도이전 int,\
2014년 int,\
2015년 int,\
2016년 int)'
cur.execute(sql, multi = True)
res = cur.fetchall()
print(res)

sql = 'insert into cctv values (%s,%s,%s,%s,%s,%s)'
for idx, row in df.iterrows():
cur.execute(sql, tuple(row), multi=True)
print(tuple(row))
conn.commit()

cur.execute('select * from cctv')
result = cur.fetchall()
for i in result:
print(i)


mysql> CREATE TABLE person(
-> pid INT NOT NULL,
-> name VARCHAR(36),
-> age INT,
-> sex CHAR(1),
-> PRIMARY KEY (pid));
Query OK, 0 rows affected (0.03 sec)
mysql> desc person;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| pid | int | NO | PRI | NULL | |
| name | varchar(36) | YES | | NULL | |
| age | int | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> DESC ANIMAL;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(36) | NO | PRI | NULL | |
| type | varchar(36) | NO | PRI | NULL | |
| age | int | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> ALTER TABLE person
-> DROP PRIMARY KEY;
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC person;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| pid | int | NO | | NULL | |
| name | varchar(36) | YES | | NULL | |
| age | int | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> ALTER TABLE person
-> ADD PRIMARY KEY (pid);
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC PERSON;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| pid | int | NO | PRI | NULL | |
| name | varchar(36) | YES | | NULL | |
| age | int | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> ALTER TABLE ANIMAL
-> ADD CONSTRAINT PK_ANIMAL
-> PRIMARY KEY (name, type);
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC ANIMAL;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(36) | NO | PRI | NULL | |
| type | varchar(36) | NO | PRI | NULL | |
| age | int | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> CREATE TABLE ORDERS(
-> oid INT NOT NULL,
-> order_no VARCHAR(36),
-> pid INT,
-> PRIMARY KEY (oid),
-> CONSTRAINT FK_PERSON FOREIGN KEY (pid) REFERENCES PERSON(pid));
Query OK, 0 rows affected (0.04 sec)
mysql> DESC ORDERS;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| oid | int | NO | PRI | NULL | |
| order_no | varchar(36) | YES | | NULL | |
| pid | int | YES | MUL | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> CREATE TABLE JOB(
-> jid INT NOT NULL,
-> name VARCHAR(36),
-> pid INT,
-> PRIMARY KEY (jid),
-> FOREIGN KEY (pid) REFERENCES PERSON(pid));
Query OK, 0 rows affected (0.04 sec)
mysql> DESC JOB;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| jid | int | NO | PRI | NULL | |
| name | varchar(36) | YES | | NULL | |
| pid | int | YES | MUL | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

CREATE TABLE JOB(
jid INT NOT NULL, -- 첫 번째 컬럼 정의 후에 컴마
name VARCHAR(36), -- 두 번째 컬럼 정의 후에 컴마
pid INT, -- 세 번째 컬럼 정의 후에 컴마
PRIMARY KEY (jid), -- 테이블 수준의 제약조건(기본 키) 후에 컴마
FOREIGN KEY (pid) REFERENCES PERSON(pid));
-- 마지막 테이블 수준의 제약조건(외래 키) 후에는 컴마를 찍지 않음
주의해야 할 점은 마지막 컬럼 정의나 제약조건 뒤에는 컴마를 찍지 않는 것입니다. 컴마는 다음 항목이 있을 때만 필요하며, 마지막 항목 뒤에는 컴마를 사용하지 않습니다. 위의 CREATE TABLE 구문의 마지막 부분인 FOREIGN KEY (pid) REFERENCES PERSON(pid) 뒤에는 컴마가 없음에 주목하세요.
이 기준은 일반적인 SQL 문법에서 통용되며, MySQL을 비롯한 대부분의 관계형 데이터베이스 관리 시스템에서 적용됩니다.
자동 생성된 외래키 제약조건 확인하기
mysql> SHOW CREATE TABLE JOB;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table
|
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| JOB | CREATE TABLE `job` (
`jid` int NOT NULL,
`name` varchar(36) DEFAULT NULL,
`pid` int DEFAULT NULL,
PRIMARY KEY (`jid`),
KEY `pid` (`pid`),
CONSTRAINT `job_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `person` (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> ALTER TABLE JOB
-> DROP FOREIGN KEY job_ibfk_1;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC JOB;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| jid | int | NO | PRI | NULL | |
| name | varchar(36) | YES | | NULL | |
| pid | int | YES | MUL | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> ALTER TABLE JOB
-> DROP INDEX pid;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC JOB;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| jid | int | NO | PRI | NULL | |
| name | varchar(36) | YES | | NULL | |
| pid | int | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> ALTER TABLE JOB
-> ADD FOREIGN KEY (pid) REFERENCES PERSON(pid);
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE JOB;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table
|
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| JOB | CREATE TABLE `job` (
`jid` int NOT NULL,
`name` varchar(36) DEFAULT NULL,
`pid` int DEFAULT NULL,
PRIMARY KEY (`jid`),
KEY `pid` (`pid`),
CONSTRAINT `job_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `person` (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)





mysql> create table study(
-> study_id int not null,
-> study_date date,
-> study_time time,
-> patient_id int,
-> primary key (study_id),
-> foreign key (patient_id) references person(pid));
Query OK, 0 rows affected (0.03 sec)
mysql> desc study;
+------------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------+------+-----+---------+-------+
| study_id | int | NO | PRI | NULL | |
| study_date | date | YES | | NULL | |
| study_time | time | YES | | NULL | |
| patient_id | int | YES | MUL | NULL | |
+------------+------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> alter table study
-> drop primary key;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc study;
+------------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------+------+-----+---------+-------+
| study_id | int | NO | | NULL | |
| study_date | date | YES | | NULL | |
| study_time | time | YES | | NULL | |
| patient_id | int | YES | MUL | NULL | |
+------------+------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> alter table study
-> drop foreign key study_ibfk_1;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table study
-> add foreign key (patient_id) references person(pid);
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc study;
+------------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------+------+-----+---------+-------+
| study_id | int | NO | | NULL | |
| study_date | date | YES | | NULL | |
| study_time | time | YES | | NULL | |
| patient_id | int | YES | MUL | NULL | |
+------------+------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> alter table study
-> add primary key (study_id);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc study;
+------------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------+------+-----+---------+-------+
| study_id | int | NO | PRI | NULL | |
| study_date | date | YES | | NULL | |
| study_time | time | YES | | NULL | |
| patient_id | int | YES | MUL | NULL | |
+------------+------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> select count(distinct police_station) from crime_status;
+--------------------------------+
| count(distinct police_station) |
+--------------------------------+
| 31 |
+--------------------------------+
1 row in set (0.01 sec)

mysql> select sum(case_number)
-> from crime_status
-> where status_type like '발생';
+------------------+
| sum(case_number) |
+------------------+
| 92679 |
+------------------+
1 row in set (0.01 sec)

mysql> select sum(case_number)
-> from crime_status
-> where status_type like '발생' and crime_type like '%살인%';
+------------------+
| sum(case_number) |
+------------------+
| 141 |
+------------------+
1 row in set (0.01 sec)

mysql> select sum(case_number)
-> from crime_status
-> where status_type like '검거' and police_station like '%중부%';
+------------------+
| sum(case_number) |
+------------------+
| 1406 |
+------------------+
1 row in set (0.01 sec)

mysql> select count(distinct name), name from police_station
-> group by name;
+----------------------+------------------+
| count(distinct name) | name |
+----------------------+------------------+
| 1 | 서울강남경찰서 |
| 1 | 서울강동경찰서 |
| 1 | 서울강북경찰서 |
| 1 | 서울강서경찰서 |
| 1 | 서울관악경찰서 |
| 1 | 서울광진경찰서 |
| 1 | 서울구로경찰서 |
| 1 | 서울금천경찰서 |
| 1 | 서울남대문경찰서 |
| 1 | 서울노원경찰서 |
| 1 | 서울도봉경찰서 |
| 1 | 서울동대문경찰서 |
| 1 | 서울동작경찰서 |
| 1 | 서울마포경찰서 |
| 1 | 서울방배경찰서 |
| 1 | 서울서대문경찰서 |
| 1 | 서울서부경찰서 |
| 1 | 서울서초경찰서 |
| 1 | 서울성동경찰서 |
| 1 | 서울성북경찰서 |
| 1 | 서울송파경찰서 |
| 1 | 서울수서경찰서 |
| 1 | 서울양천경찰서 |
| 1 | 서울영등포경찰서 |
| 1 | 서울용산경찰서 |
| 1 | 서울은평경찰서 |
| 1 | 서울종로경찰서 |
| 1 | 서울종암경찰서 |
| 1 | 서울중랑경찰서 |
| 1 | 서울중부경찰서 |
| 1 | 서울혜화경찰서 |
+----------------------+------------------+
31 rows in set (0.01 sec)

mysql> select status_type, count(status_type) from crime_status
-> group by status_type;
+-------------+--------------------+
| status_type | count(status_type) |
+-------------+--------------------+
| 발생 | 155 |
| 검거 | 155 |
+-------------+--------------------+
2 rows in set (0.01 sec)

mysql> select sum(case_number) from crime_status
-> where (police_station in ('종로','남대문')) and status_type = '발생' and crime_type = '강도';
+------------------+
| sum(case_number) |
+------------------+
| 6 |
+------------------+
1 row in set (0.01 sec)

mysql> select sum(case_number) from crime_status
-> where crime_type like '%폭력%' and status_type like '%검거%';
+------------------+
| sum(case_number) |
+------------------+
| 41019 |
+------------------+
1 row in set (0.01 sec)

mysql> select avg(case_number) from crime_status
-> where status_type like '%검거%' and crime_type = '폭력';
+------------------+
| avg(case_number) |
+------------------+
| 1323.1935 |
+------------------+
1 row in set (0.01 sec)

mysql> select avg(case_number) from crime_status
-> where police_station like '%중부%' and status_type like '%발생%'
-> ;
+------------------+
| avg(case_number) |
+------------------+
| 411.4000 |
+------------------+
1 row in set (0.01 sec)

mysql> select police_station, min(case_number) from crime_status
-> where status_type = '발생' and crime_type = '강도'
-> group by police_station
-> having min(case_number) <10;
+----------------+------------------+
| police_station | min(case_number) |
+----------------+------------------+
| 중부 | 3 |
| 종로 | 4 |
| 남대문 | 2 |
| 서대문 | 2 |
| 혜화 | 3 |
| 용산 | 6 |
| 성북 | 2 |
| 동대문 | 6 |
| 마포 | 4 |
| 영등포 | 6 |
| 성동 | 3 |
| 동작 | 1 |
| 광진 | 4 |
| 서부 | 3 |
| 강북 | 5 |
| 금천 | 7 |
| 중랑 | 5 |
| 관악 | 3 |
| 강서 | 6 |
| 종암 | 1 |
| 구로 | 5 |
| 서초 | 5 |
| 양천 | 3 |
| 노원 | 3 |
| 방배 | 1 |
| 은평 | 1 |
| 도봉 | 2 |
| 수서 | 2 |
+----------------+------------------+
28 rows in set (0.01 sec)

mysql> select min(case_number)
-> from crime_status
-> where police_station = '중부' and status_type = '검거';
+------------------+
| min(case_number) |
+------------------+
| 1 |
+------------------+
1 row in set (0.01 sec)

mysql> select max(case_number), crime_type
-> from crime_status
-> where police_station like '%강남%';
+------------------+------------+
| max(case_number) | crime_type |
+------------------+------------+
| 2283 | 살인 |
+------------------+------------+
1 row in set (0.01 sec)
