메모내용
Nav

SQL (Structed Query Language)

- Structed : 구조화된 (Exel 처럼 필드 값으로 같은 형식으로 구조화된 데이터) - Query : 질의, 검색, 저장되어 있는 정보를 필드값 으로 필터링 할 수 있는 - Language : 언어

SQL .bat 파일로 DB 접근하기

DB 접근하여 Data 추가하기

                        
        mysql --login-path=아이디
        
        use 데이터베이스명
        
        insert into Id_List(name,url,id,pw,email,description) VALUES(
            "MEW",
            "https://www.myetherwallet.com/",
            "TymHEfDtHkERkCUhjxc7FDYO5Zt5tyUBxAJWDvChgGklQAFBXNU4EXLemwBjoXL4T5e1O/NqOlj2iA678XyhSkhsLLne223WJXwnwBB8Vr8=",
            "RsKOhogAZSGx0524Ef7MsMAuj2kiLtpQ25t9F6YeRsz6crrag4ci9A2zCtUt0vu3/hF42erzYbkQa08kozJGtGHaXIUGK64TKbxqnEcd70xLnOkYIBEeXCtaIhmqRnPqaD+QHU0VWh19s20X7Lrm7l/UY1osqPzY3XJ0KoAX3F8dWitXiiKCMGGdN3sqkrEwq8zzS894RQUAePN9GmFwNLW7Ahaz3b5UsiXagIAbH4M/YsUgZKUx2wYKC1HN5C9sARusF5D9nWeAS/xZzZi4LiP7xBtLcDWHhUZzowX22sgYPuKTWuFXq3CHn3ms2eFDh2H++i1lGZ4eyKl+7jCajo45AMN8/mTjAKljpjCWnILvnJzriOtddkQqHKlh5JmJuFVqebueclq0L6DTg7XjRMXKKd1pgevV2kboG5TJoH1XGsjG9olD/LQTTSaX2oBWZdi8vQCP15AZc7jWKldPTK7D+TKcLECGQ4yFmlX3OXKn4co1JyTRqcgF8+T3e1ZZNcOO3LS+ssyfAG69eRJeS+d367GCIJGCCvBJe1wpeU5J4rK6YargwuVto+mV0Jyax1BGkbHuScJTZQrkhZJcmu/aeh7Xb2/WAIE91NCgWACHTuzX3YcQigXN+Xc/fLNRcXdUS4lCIaXXW/4UWV2VMQ==",
            "none",
            "{filename:id,content:pw,pw:__CodeNick__,'use encript AES(__CodeNick__,id || pw)'}"
            );
        
        select * from Id_List;
        
        pause
                        
                    

DataBase 사용하기

                        
        // Database 조회하기
        SHOW DATABASES;
        
        // 현재 사용중인 DATABASE 확인하기
        SELECT DATABASE();
        
        // 현재 사용중인 DATABASE 변경하기
        USE {데이터베이스명};
        
        // 데이터베이스 생성
        CREATE DATABASE {데이터베이스명}
        
        // 데이터베이스 삭제
        DROP DATABASE {데이터베이스명}
        
        // 테이블
        
        SELECT {칼럼명}
        
        SELECT {칼럼명} AS {임시로 바꾸어 보여줄 칼럼명}
        
        FROM {테이블명}
            
        WHERE {조건}
        
        // 테이블 목록 확인
        SHOW TABLES
        
        // 테이블 구조 확인
        DESCRIBE {테이블명}
        
        // 테이블 제거
        DROP TABLE {테이블명}
        
        // 테이블 추가
        CREATE TABLE {테이블명}(
        {변수명} {변수타입} {옵션},
        {변수명} {변수타입} {옵션},
        {변수명} {변수타입} {옵션},
        PRIMARY KEY(변수명));
        
        // 테이블 추가 예시
        CREATE TABLE TABLE1(
        id INT(11) unsigned NOT NULL AUTO_INCREMENT, --양수, NULL 불가, 자동증가--
        name VARCHAR(20) NULL,
        created DATE NOT NULL,
        createdTime DATETIME NOT NULL,
        description VARCHAR(100), --NULL 가능--
        code INT(11) NOT NULL DEFAULT '0',--기본값 0--
        PRIMARY KEY(id));
        
        // 테이블 칼럼 추가 (맨뒤)
        ALTER TABLE {테이블명} ADD {칼럼명} {자료형}
        
        // 테이블 칼럼 추가 (맨앞)
        ALTER TABLE {테이블명} ADD {칼럼명} {자료형} FIRST
        
        // 테이블 칼럼 추가 (지정)
        ALTER TABLE {테이블명} ADD {칼럼명} {자료형} AFTER {앞칼럼명}
        
        // 테이블 칼럼 제거
        ALTER TABLE {테이블명} DROP {칼럼명}
        
        // 테이블 칼럼 이동 (맨앞)
        ALTER TABLE {테이블명} MODIFY COLUMN {칼럼명} {자료형} FIRST
        
        // 테이블 칼럼 이동
        ALTER TABLE {테이블명} MODIFY COLUMN {칼럼명} {자료형} AFTER {앞컬럼}
        
        // 테이블 칼럼명&자료형 변경
        ALTER TABLE {테이블명} CHANGE {기존 칼럼명} {칼럼명} {자료형}
        
        // 테이블 행 생성
        INSERT INTO {테이블명}({필드명},{필드명},...) VALUES({값},{값},...)
        
        // 테이블 행 다수 생성 (node JS)
        INSERT INTO ....
        
        // 테이블 행 수정
        UPDATE {테이블명} SET {칼럼명}={값} WHERE {조건}
        
        // 테이블 행 삭제
        DELETE FROM {테이블명} WHERE {조건}
        
        // 계정확인
        SELECT User,Host,plugin FROM mysql.user;
        
        // 계정생성
        CREATE USER '{계정명}'@'%' IDENTIFIED BY '{비밀번호}';
        
        // 계정권한 설정
        GRANT ALL PRIVILEGES ON {접근가능DB명}.{접근가능테이블} TO '{계정명}'@'%';
        
        // 계정 비밀번호 변경
        UPDATE USER SET password=PASSWORD('{비밀번호}') WHERE user='{계정명}'; 
        
        // 권한 적용
        FLUSH PRIVILEGES
        
        // 원격 접속하기
        mysql -h 도메인 -P 포트번호 -u 아이디 -p
        
        
        
                        
                    

Bat 파일로 mysql 접속

참조

예시

                        
        mysql_config_editor set --login-path={접속설정명} --host={호스트주소} --user={유저명} --password --port={포트번호}
        
        ## 비밀번호 입력하라고 뜬다
        Enter password : {비밀번호}
        
        ## 제대로 설정되었는지 확인
        mysql_config_editor print --all
        
        ## 사용 아래와 같이 .bat 에다가 적어주면돼
        mysql --login-path={접속설정명}
                        
                    

Database 백업하기

                        
        mysqldump -h {호스트} -P {포트} -u {계정명} -p {db 명} > {생성할 백업파일명}.sql

        // 모든 DB백업. --all-databases 옵션을 사용한다.
        mysqldump -u아이디 -p --all-databases > 저장할파일명.sql 
        ex) mysqldump -uroot -p --all-databases > all.sql
        
        // 모든 DB복구
        mysqldump -u아이디 -p < 불러올파일명.sql 
        ex) mysqldump -uroot -p < all.sql
        
        // DB백업. 백업시 DB명을 입력해 백업한다.
        mysqldump -u아이디 -p DB명 > 저장할파일명.sql 
        ex) mysqldump -uroot -p text > test.sql
        
        // DB복원. 복원시 데이터가 들어갈 DB명을 입력한다.
        mysql -u아이디 -p DB명 < 불러올파일명.sql 
        ex) mysql -uroot -p test < test.sql
        
        // Table백업. DB 백업과 비슷하며 Table명을 추가로 적어준다.
        mysqldump -u아이디 -p DB명 Table명> 저장할파일명.sql 
        ex) mysqldump -uroot -p test member > member.sql
        
        Table복원. DB복원과 같다. 즉, 아래와 같은 명령어는 없다.
        mysql -u아이디 -p DB명 Table명 < 불러올파일명.sql
        
        // Table Schema. Table의 구조를 백업한다. 데이터는 백업하지 않기때문에 유의한다. Table명을 생략하면 DB내의 모든 Table의 Schema를 백업한다.
        mysqldump -u아이디 -p DB명 Table명 > 저장할파일명.sql
                        
                    

백업 에러

                        
                            mysqldump -u[user] -p  -h[호스트] [데이터베이스] [테이블명] > [저장할 이름].sql
        
                            mysqldump: Couldn’t execute ‘SELECT COLUMN_NAME,
                            JSON_EXTRACT(HISTOGRAM, ‘$.“number-of-buckets-specified”’)
                            FROM information_schema.COLUMN_STATISTICS
                            WHERE SCHEMA_NAME = ‘DB 이름’ AND TABLE_NAME = ‘테이블 이름‘;’: Unknown table ‘COLUMN_STATISTICS’ in information_schema (1109)
                        
                    

MySQL 공식 문서를 찾아보니, 8.0부터 새로 추가된 옵션 때문에 나는 에러이더라고요. 해당 옵션이 활성화되어있으면 덤프 할 때 ANALYZE TABLE에 히스토리를 생성(?) 하는 것 같아요. 근데, 옵션은 1(on)로 되어있는 데 사용해야 할 테이블이 없어서 나는 오류입니다. 해결하는 방법은 두 가지가 있는데,

                        
                            //  column-statistics=0으로 주고 mysqldump 실행
        
                            mysqldump --column-statistics=0 -u[user] -p  -h[호스트] [데이터베이스] [테이블명] > [저장할 이름].sql
        
                            // config 파일에 default 값 세팅 (/etc/my.cnf 또는 ~ / .my.cnf 같은 파일에 위 설정을 추가하는 것입니다.)
                            [mysqldump]
                            column-statistics=0
                        
                    

참조