DATABASE

[MariaDB] MariaDB 기본

예나부기 2021. 8. 9.

MariaDB

MariaDB는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)이다.  MySQL과 동일한 소스 코드를 기반으로 한다.

마리아 DB의 주요 개발자는 MySQL과 몬티 프로그램 AB를 설립한 몬티 와이드니어스(Michael Monty Widenius)이다. 그는 이전에 자신의 회사, MySQL AB를 썬 마이크로시스템즈에 10억 달러에 판매를 한 적이 있으며, 마리아 DB는 그의 둘째 딸인 마리아의 이름을 딴 것이다.

 

특징

  • MySQL과의 호환성 (이름만 다르지 명령어나 사용방법 (5.5까지) 모두 MySQL과 동일)
  • MySQL과 비교해 애플리케이션 부분 속도가 약 4~5천배 정도 빠르며, MySQL이 가지고 있는 모든 제품의 기능을 완벽히 구현하면서도 성능 면에서는 최고 70%의 향상

접속방법

1)MariaDB 콘솔로 접속하기 : -mysql -uroot -p 입력 후 비밀번호 입력2)HeidiSQL로 접속하기 : HeidiSQL실행 > 로컬 인스턴스 > 로그인 

 

명령어 모음

[최초 접속]

su -
mysql -u root

[사용자 정보 보기]

USE mysql;
SELECT user, host, password FROM user;

비밀번호 변경

use mysql
SELECT host, user, password from user;
UPDATE user SET password=password("새비밀번호") WHERE user="root";
flush privileges;

MariaDB 재시작


[사용자 추가/삭제]

CREATE USER "사용자명"@"localhost";
CREATE USER "사용자명"@"localhost" IDENTIFIED BY "비밀번호";
DROP user "사용자명";
FLUSH PRIVILEGES;

[권한부여]

GRANT ALL PRIVILEGES ON 데이터베이스명.* TO "사용자명"@"localhost";
GRANT ALL PRIVILEGES ON 데이터베이스명.* TO "사용자명"@'%';
//%는 localhost 를 제외한 모든 호스트를 뜻한다.
GRANT INSERT, UPDATE, SELECT ON 데이터베이스명.* TO "사용자명"@'%';
FLUSH PRIVILEGES;

[권한 확인]

SHOW GRANTS FOR "아이디";

[권한 삭제]

REVOKE ALL ON 데이터베이스이름.테이블이름 FROM "아이디";
FLUSH PRIVILEGES;

[데이터베이스 생성 ]

CREATE DATABASE 데이터베이스명;

데이터베이스 목록 보기

SHOW DATABASES;

데이터베이스 선택

USE 데이터베이스명

데이터베이스 삭제

DROP DATABASE 데이터베이스명;
DROP DATABASE IF EXISTS 데이터베이스명;

데이터베이스 이름 변경

CREATE DATABASE "새데이터베이스명";
RENAME TABLE "기존데이터베이스명"."테이블명" TO "새데이터베이스명"."테이블명";
DROP DATABASE "기존데이터베이스명";

테이블 목록 보기

SHOW TABLES;

테이블 생성

CREATE TABLE 테이블명 (
컬럼명1 INT PRIMARY KEY AUTO_INCREMENT,
컬럼명2 VARCHAR(15) NOT NULL,
컬럼명3 INT
) ENGINE=INNODB;

테이블 구조 보기

DESCRIBE 테이블명;

[테이블 구조 복사]

CREATE TABLE IF NOT EXISTS 복사테이블 LIKE 원본테이블;

[테이블 데이터 전체 복사]

INSERT INTO `복사 테이블` SELECT * FROM `원본 테이블`;

[테이블 데이터 부분 복사]

INSERT INTO 복사테이블 (컬럼1, 컬럼2) SELECT 컬럼1, 컬럼2 FROM 원본테이블;

[컬럼 기본값 설정]

ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 자료형 DEFAULT 기본값;

테이블명 변경

RENAME TABLE 이전테이블명 TO 새테이블명;
RENAME TABLE 이전테이블명1 TO 새테이블명1, 이전테이블명2 TO 새테이블명2;

테이블 삭제

DROP TABLE 테이블명;
DROP TABLE IF EXISTS 테이블명;

[테이블 비우기]

> TRUNCATE 테이블명;

[데이터 입력]

INSERT INTO 테이블명 VALUES (값1, 값2, ...);
INSERT INTO 테이블명 (컬럼명1, 컬럼명2, ...) VALUES (값1, 값2, ...);

[데이터 조회]

SELECT * FROM 테이블;
SELECT 컬럼1, 컬럼2 FROM 테이블;
SELECT * FROM 테이블 WHERE date(테이블)=date(날짜데이터);
SELECT * FROM 테이블 ORDER BY 컬럼; //오름차순. 오름차순이 디폴트
SELECT * FROM 테이블 ORDER BY 컬럼 ASC; //오름차순. 오름차순이 디폴트
SELECT * FROM 테이블 ORDER BY 컬럼 ASC LIMIT 1;
SELECT * FROM 테이블 ORDER BY 컬럼 DESC; //내림차순
SELECT * FROM 테이블 ORDER BY 컬럼1 [, 컬럼2, 컬럼3 ...];
SELECT * FROM 테이블 ORDER BY rand();
SELECT * FROM 테이블 WHERE 조건식 ORDER BY 컬럼1 [, 컬럼2, 컬럼3 ...];
SELECT COUNT(*) AS 컬럼 FROM 테이블;
SELECT phoneNumber.*, member.member_name FROM phoneNumber LEFT JOIN member ON phoneNumber.member_id=member.member_id; //엑셀의 vlooup 과 같음
SELECT phoneNumber.*, member.member_name FROM phoneNumber LEFT JOIN member USING(member_id); //엑셀의 vlooup 과 같음
SELECT tb.number, tb.sales, tb1.name, tb3.city FROM tb JOIN tb1 ON tb.number=tb1.number JOIN tb3 ON tb.number=tb3.number; 
SELECT * FROM 테이블명 WHERE 컬럼명 = date("2020-01-01");
SELECT * FROM 테이블명 ORDER BY rand();

[데이터 그룹화]

SELECT 컬럼 FROM 테이블 [WHERE 조건식] GROUP BY 그룹화할 컬럼 [HAVING 조건식] ORDER BY 컬럼1 [, 컬럼2, 컬럼3 ...];

WHERE는 그룹화 전의 조건, HAVING은 그룹화 후의 조건이다.


[아래 혹은 위 행의 ]

SELECT lag(원본칼럼, 몇칸) over(PARTITION BY 기준칼럼 ORDER BY 정렬칼럼) 복사할칼럼 FROM 테이블; /위의 것 가져옴
SELECT lag(원본칼럼, 몇칸) over(PARTITION BY 기준칼럼 ORDER BY 정렬칼럼) 복사할칼럼 FROM 테이블; /아래 것 가져옴

[컬럼 연산]

SELECT 컬럼명1+컬럼명2 AS plus FROM 테이블명;

[데이터 수정]

UPDATE 테이블 SET 컬럼 = 'z' WHERE 컬럼='a';

[UPSERT]

INSERT INTO 테이블명 (칼럼명1, 칼럼명2, ...) VALUES (레코드1, 레코드2, ...) ON DUPLICATE KEY UPDATE 칼럼명1=레코드1, 칼럼명2=레코드2, ...;
//단, 기준이 되는 칼럼은 UNIQUE 인덱스 설정을 해줘야 한다.
//UNIQUE 인덱스 설정을 안 해주면, 같은 값이 그냥 insert 된다.

[데이터 삽입]

INSERT INTO 테이블명 (칼럼명1, 칼럼명2, 칼럼명3, ...) VALUES (값1, 값2, 값3, ...);

[현재 일시]

>SELECT NOW();

[오늘]

CURDATE()

[요일]

WEEKDAY("2017-01-23")

[반복문]

DELIMITER $$
CREATE PROCEDURE whileProc()
BEGIN
	DECLARE str VARCHAR(100);
    DECLARE i INT;
    DECLARE k INT;
    SET i = 2;
    
    WHILE (i < 10) DO
        SET k = 1;
        WHILE (k < 10) DO
			SET str = '';
            SET str = CONCAT(str, ' ', i, 'x', k, '=', i * k);
            INSERT INTO pbj_db.guguTBL VALUES(str);
            SET k = k + 1;
		END WHILE;
        SET i = i + 1;
	END WHILE;
END $$
DELIMITER ;

데이터 계수, 평균, 합계

SELECT COUNT(column_name) FROM table_name WHERE condition;
SELECT AVG(column_name) FROM table_name WHERE condition;
SELECT SUM(column_name) FROM table_name WHERE condition;

날짜 계산

년 계산

SELECT TIMESTAMPDIFF(YEAR, '2017-03-01', '2018-03-28');
-- SELECT TIMESTAMPDIFF(YEAR, '2017-03-01 00:00:00', '2018-03-28 00:00:00');

한달전, 하루전, 한시간전

WHERE 컬럼명 >= date_add(now(), interval -1 MONTH);
WHERE 컬럼명 >= date_add(now(), interval -1 DAY);
WHERE 컬럼명 >= date_add(now(), interval -1 HOUR);

 

참고 : https://bloghelloworld.tistory.com/238

 

MariaDB MySQL query

[최초 접속] su - mysql -u root [사용자 정보 보기] USE mysql; SELECT user, host, password FROM user; 비밀번호 변경 use mysql SELECT host, user, password from user; UPDATE user SET password=password("..

bloghelloworld.tistory.com

https://ko.wikipedia.org/wiki/MariaDB

 

MariaDB - 위키백과, 우리 모두의 백과사전

MariaDB는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)이다. MySQL과 동일한 소스 코드를 기반으로 하며, GPL v2 라이선스를 따른다. 오라클 소유의 현재 불확실한 MySQL의 라이선스 상태에 반

ko.wikipedia.org

 

댓글