프로그래밍 언어/SQL

데이터베이스 언어 정리 (DDL / DML / DCL) (2) - DML / DCL 편

gamjadori 2024. 2. 4. 10:52
728x90

<데이터베이스 언어>

2. DML (데이터 조작어): 데이터베이스 조작 (삽입, 삭제, 수정, 검색)

SQL 명령어 기능
INSERT 삽입 (릴레이션에 데이터 삽입)
UPDATE 수정 (릴레이션에 저장된 데이터 수정)
DELETE 삭제 (릴레이션에 저장된 데이터 삭제)
SELECT 검색 (릴레이션에 저장된 데이터 검색)

 

3. DCL (데이터 제어어): 데이터베이스 관리 (데이터베이스 보안, 데이터베이스 보호)

SQL 명령어 기능
GRANT 권한 설정
REVOKE 권한 해제

 

<DCL 실습>

show DATABASE;
use mysql;

SELECT * FROM `user`;

<결과>

 

<사용자 생성>

  • % <= 아무데서나 접속 가능하지만, localhost에서는 접속 불가
  • CREATE USER 'user_1'@'%' IDENTIFIED BY 'abcdefg';
  • CREATE USER 'user_1'@'localhost' IDENTIFIED BY 'abcdefg';
  • CREATE USER 'user_1'@'182.31.0.2' IDENTIFIED BY 'abcdefg';

 

<계정 생성>

CREATE USER 'user_1'@'%' IDENTIFIED BY 'abcdefg';
SELECT * FROM `user`;

<결과>

 

<계정 삭제>

DROP USER 'user_1'@'%';

<결과>

 

<권한 설정> 터미널에서 진행

** 터미널로 mysql 접속
[centos@localhost ~]$ mysql -uroot -p --host=localhost --port=3306
mysql>  grant select on w3backup.cust  to 'user_1'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql>  grant update, delete on w3backup.cust  to 'user_1'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql>  grant all privileges on w3backup.* to 'user_1'@'%';
Query OK, 0 rows affected (0.00 sec)

<결과>

mysql> show grants for 'user_1'@'%';
+-------------------------------------------------------------------+
| Grants for user_1@%                                               |
+-------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `user_1`@`%`                                |
| GRANT ALL PRIVILEGES ON `w3backup`.* TO `user_1`@`%`              |
| GRANT SELECT, UPDATE, DELETE ON `w3backup`.`cust` TO `user_1`@`%` |
+-------------------------------------------------------------------+
3 rows in set (0.00 sec)

<파이썬 서버에서 MySQL 서버 접속해서 DB 관리>

# Mysql server IP ADDRESS: 192.168.0.34
# Mysql server user IP / PW: user_1 / abcdefg, root/root
# Mysql server Database: w3backup
# sudo pip3 install pymysql
# sudo pip3 install cryptography
import pymysql
conection = pymysql.connect(host='10.0.2.15', port=3306,
                            user='root', password='root',
                            db='w3backup', charset='utf8mb4') # DB 접속
cursor = conection.cursor() # SQL 실행 준비
sql = 'SELECT * FROM user'
cursor.execute(sql) # SQL 실행 (데이터 준비)
result = cursor.fetchone() # SQL 실행 결과 중 한 건만 리턴
print(type(result), result[1])
result=cursor.fetchall() # SQL 실행 결과 전부 리턴
print(result)
result=cursor.fetchmany(3)
print(result)
for val in cursor.fetchall():
    print(val)

cursor = conection.cursor(pymysql.cursors.DictCursor)
cursor.execute(sql)
result=cursor.fetchall()
for val in result:
    print(val['CustomerName'])
conection.close()