목록database (41)
yoursyun
22.03.07 ~ 03.13 기간 YYYYMMDD 임시 테이블 만들기 ( Maria 10.2.1 버전이상 ) WITH RECURSIVE CTE AS ( SELECT DATE_FORMAT('20220307', '%Y-%m-%d') AS DT FROM DUAL UNION ALL SELECT DATE_ADD(DT, INTERVAL 1 DAY) FROM CTE WHERE DT
mariadb 10.4 이전 root password 설정 update user set password=password('비밀번호') where user='root'; flush privileges; mariadb 10.4 이후 root password 설정 alter user 'root'@'localhost' identified by '비밀번호'; flush privileges;
CREATE TYPE T_CUST_LIST AS TABLE ( CUST_CODE VARCHAR(50) ); GO CREATE PROCEDURE UP_TVP_TEST @TVP T_CUST_LIST READONLY AS SET NOCOUNT ON SELECT M.CD_COMPANY, M.LN_PARTNER FROM @TVP C INNER JOIN M_TABLE M ON C.CUST_CODE = M.CD_PARTNER GO DECLARE @TVP AS T_CUST_LIST; INSERT INTO @TVP (CUST_CODE) SELECT TOP 100 CUST_CODES FROM M_TABLE GO EXEC UP_TVP_TEST @TVP;
centos7 / mariadb 10.4 기준 # 복제 사용자 생성 MariaDB [(none)]> grant replication slave, replication client on *.* to '아이디'@'%' identified by '비밀번호'; MariaDB [(none)]> grant all privileges on visnag.* TO '아이디'@'%'; MariaDB [(none)]> flush privileges; # 서버 아이디 점검 MariaDB [(none)]> show variables like 'server_id'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | ..
centos7 / mariadb 10.4 기준 1. [root@pororicom ~]# vi /etc/my.cnf.d/server.cnf ############################################# [mysqld] #slow-query-setting slow_query_log=1 #slow_query_log_file=/var/log/slowquerylog/mysql-slow.log log_output='TABLE' #3sec long_query_time=3 ############################################# 2. [root@pororicom ~]# systemctl restart mariadb =================================..
CREATE INDEX 인덱스명 ON 테이블명 ( 컬럼명 ASC, 컬럼명2 ... ) GO
update table1 as a join table2 as b on a.key = b.key set a.col1 = 'hello?' where a.col = 'hello'; table1 과 table2 를 key가 같은것과 조인, table1 col 이 'hello' 인건에 대해 col1 의 내용을 hello? 로 변경한다.
ALTER TABLE TABLE1 ADD CONSTRAINT DF_TABLE1_선언명 DEFAULT '디폴트값' FOR 디폴트컬럼명 GO
UPDATE TABLE1 SET COL1 = A.COL1 FROM TABLE1 AS A INNER JOIN TABLE2 AS B ON A.KEYCOL = B.KEYCOL
centos7 에서 yum install 시, lower_case_table_names = 1 선택시 query 에서의 테이블 및 대소문자 구분하지 않는다. /etc/my.cnf.d/server.cnf 에 # this is only for the mysqld standalone daemon [mysqld] # 0 : 대소문자 구분, 1 : 대소문자 구분하지 안함 (소문자로 저장), 2 : 대소문자 구분하지 안함 (소문자로 비교) lower_case_table_names = 1 을 작성후. # systemctl stop mariadb # systemctl start mariadb 적용 확인 show variables like 'lower_case_table_names';
-- PK 삭제 ALTER TABLE dbo.테이블명 DROP PK_이름 GO -- PK 추가 ALTER TABLE 테이블병 ADD CONSTRAINT PK_이름 PRIMARY KEY ( C_CODE, NODE_CODE, NO_JO, TP_ORD ) GO
# ropository 설정. https://downloads.mariadb.org/mariadb/repositories 을통해 설치하고자 하는 버전을 검색할 수 있다. [root@pororicom /]# vi /etc/yum.repos.d/MariaDB.repo [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.4/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 [root@pororicom /]# yum install -y MariaDB [root@pororicom /]# rpm -qa | grep MariaDB -- ======================..
1. 조인절 작성시, 조회 정보량이 적은 쪽을 부모 ( A JOIN B 에서 A 가 적은 정보를 포함 할것 ) 로 놓는것이 성능상 이롭다. 2. Sub Query 작성후 index seek 가 잘 안될경우, 임시 Table 을 만들어 inex 를 태우면 성능상 이롭다. index scan 은 index seek 보다 성능이 떨어지므로, 가능한 index seek 를 태워야 한다. 3. where 절을 작성시 PK or 인덱스 순서로 작성한다. 4. Join 시에 가능한 상호간 데이터 타입이 같을수 있도록 테이블을 구성해야 한다. ( 내부적으로 CAST 발생함 )
2018 년 1월 1일 부터 매일 03시 마다 1을 조회 한다. create event if not exists 이벤트명on schedule every 1 day starts '2018-01-01 03:00:00' enable do select 1;
1. 유일값 컬럼이 없는경우는 강제 생성해줘야한다. ( 남겨놓을 것의 기준점 생성 ) 2. mssql, oracle 과 같이 row number 함수를 mysql 에서는 아래와 같이 구현 - 방법은 그룹핑 값과 같은 것들에 대해 각 레코드(행) 마다 비교하여 넘버링 - 이를 통해 그룹의 시퀀스 번호를 작성 - 최종적으로 1을 제외한 나머지 값들의 유일값을 가져오는 쿼리 이다. select * from 테이블명 where 유일값 in ( select 유일값 from ( select row_no, 유일값, 그룹핑값 from ( select a.유일값, a.그룹핑값 , (case @v_그룹핑값 when a.그룹핑값 then @rownum := @rownum + 1 else @rownum := 1 and @v_..
테이블 조회 실행 등의 권한만 부여하는 방법 GRANT EXECUTE ON [디비명].[프로시져명] TO [부여된계정명] -- 실행권한부여 GRANT SELECT ON [NEOE].[뷰명] TO [부여된계정명] -- 조회권한부여
DATEADD(MONTH, 1, '2015-01-15') - (DAY('2015-01-15')) 위의 데이터를 DATETIME 으로 받은 후 ( 위처리로 마지막 날자는 구함 ) CONVERT(VARCHAR, @DATETYPE_DT_TO, 112) 를 통해 YYYYMMDD TYPE 으로 변환하여 사용.
DECLARE @A VARCHAR(300) = 'hello.world.member' , @SCH_CHAR CHAR(1) = '.' SELECT SUBSTRING(@A, 0, LEN(@A) - CHARINDEX(@SCH_CHAR, REVERSE(@A)) + 1) hello.world
SELECT SORT , A , 저장일FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY A ORDER BY 저장일 DESC ) AS SORT , A , 저장일 FROM 테이블 ) AS 별칭WHERE SORT = '1' ROW_NUMBER 함수를 이용하여, 1 인것만을 출력.
SELECT FLOOR(123.45), FLOOR(-123.45) RESULT =============================123, -124 지정된 숫자 식보다 작거나 같은 최대 정수를 반환합니다.
ALTER TABLE 테이블명 CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
DROP PROCEDURE IF EXISTS [프로시져명]$$CREATE PROCEDURE [프로시져명] ALTER 구문으로 처리를 안하고 삭제후 재 등록 한다. ======================================================SHOW CREATE DATABASE [데이터베이스명]SHOW CREATE TABLE [테이블명] ALTER DATABASE [데이터베이스명] DEFAULT CHARACTER SET = UTF8;ALTER DATABASE [데이터베이스명] DEFAULT COLLATE utf8_general_ci;신규 테이블 생성시 적용됨 ALTER TABLE [테이블명] DEFAULT CHARACTER SET = UTF8;ALTER TABLE [테이블명] DEFAU..
1. 테이블 생성 CREATE TABLE `TranTest` ( `num` int(11) NOT NULL auto_increment, `col01` varchar(32) default NULL, PRIMARY KEY (`num`) ) CREATE TABLE `TranTest2` ( `num` int(11) NOT NULL auto_increment, `col01` varchar(32) default NULL, PRIMARY KEY (`num`) ) 2. 입력 용 프로시저 생성 Delimiter $ CREATE PROCEDURE `Prc_TranTest_Input` ( in in_col01 varchar(32) ) BEGIN INSERT INTO TranTest SET col01 = in_col01; EN..
SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE }[ ; ] 격리수준을 설정 하지 않고 조회 시 READ COMMITTED 이며, 커밋되지 못한 행 조회시 LOCK 상태가 된다. READ UNCOMMITTED커밋되지 않은 데이터를 읽을수 있다. 만일 데이터가 1 -> 2로 업데이트 되고, 트랜잭션이 아직 커밋되지 않았다면,2를 읽을 수 있다. ( ROLL BACK 의 위험성을 인지 해야 함 ) REPEATABLE READ커밋되지 않은 데이터를 읽을수 없다. LOCK 상태가 된다.READ UNCOMMITTED 차이점. 다른 트랜젝션이 해당 행을 수정할 수 ..
EXEC msdb.dbo.sp_send_dbmail@Profile_name ='DBA',@recipients='수신자메일' ,@subject = '제목',@body = '내용'@body_format = 'HTML'
OPEN MASTER KEY DECRYPTION BY PASSWORD = '암호'OPEN SYMMETRIC KEY PasswordFieldSymmetricKey DECRYPTION BY CERTIFICATE TiwazPasswordFieldCertificate WITH PASSWORD = '암호'DECLARE @ENC VARBINARY(256) = EncryptByKey(Key_GUID('PasswordFieldSymmetricKey'), 'AAAAA')SELECT @ENCSELECT CONVERT(varchar, DecryptByKey(@ENC))
테이블 트리거 조회 구문 select 'sp_helptext ' + t.name+ ' go' from sys.sysobjects t join sys.sysobjects o on t.parent_obj = o.id where t.xtype ='TR' and o.name like '테이블명%'
SELECT o.name FROM sys.sysobjects o JOIN sys.syscomments c ON o.id = c.id WHERE c.text like '%프로시져명%' AND o.xtype IN ('P', 'TR') GROUP BY o.name
replace(convert(varchar(15),convert(money, 돈), 1), '.00', '')
NOT IN 처럼 1개의 키값 비교를 하지 않고 여러 키값을 비교하여 특정 결과 집합을 제외 시에 EXCEPT(오라클의 MINUS) 구문을 사용 하면 명확한 코딩이 가능 하다. SELECT A, B, C FROM TABLE1 EXCEPT SELECT A, B, C FROM TABLE2 * TABLE2 집합을 TABLE1 에서 A, B, C 값을 비교 A, B, C 가 같지 않은 데이터만을 출력 컬럼 A B C 1 2 3 2 2 3 3 3 3 컬럼 A B C 1 2 3 2 2 3 3 2 3 3 3 3 A, B, C 를 비교하여 TABLE1 기준으로 TABLE2와 다른 정보만을 리턴