const MyNumberInput = () => {
const numberInputOnWheelPreventChange = (e) => {
// Prevent the input value change
e.target.blur()
// Prevent the page/container scrolling
e.stopPropagation()
// Refocus immediately, on the next tick (after the current
function is done)
setTimeout(() => {
e.target.focus()
}, 0)
}
return <input type="number" onWheel={numberInputOnWheelPreventChange}/>
}
2024년 2월 29일 목요일
HTML Input Number type disable scroll
mysql 프로시저에서 파라미터로 받은 값을 IN 구문에 사용하여 인덱스 이용하기
프로시저에서 파라미터로 받은 값은 FIND_IN_SET으로만 검색이 가능한데, 이럴 경우 INDEX를 타지 않고 Full Search를 진행한다.
IN 구문을 사용하려면 쿼리 전체를 문자열로 만들어서 수행해야한다.
DROP PROCEDURE IF EXISTS ABC.admin_SelectData;
/*
CALL ABC.admin_SelectData('');
*/
DELIMITER //
CREATE PROCEDURE ABC.admin_SelectData(
IN _ids NVARCHAR(256),
IN _types NVARCHAR(128),
IN _beginDateTime DATETIME(3),
IN _endDateTime DATETIME(3)
)
BEGIN
SET @_sql = 'SELECT * FROM ABC.Data WHERE ';
SET @_sql = CONCAT(@_sql, ' rewardDateTime >= \'', _beginDateTime, '\' AND rewardDateTime < \'', _endDateTime, '\'');
SET @_sql = CONCAT(@_sql, ' AND ID IN (', _ids, ')');
IF _types IS NOT NULL THEN
SET @_sql = CONCAT(@_sql, ' AND type IN (', _types, ')');
END IF;
SET @_sql = CONCAT(@_sql, ' GROUP BY userID ORDER BY reward DESC LIMIT 1;');
PREPARE PSQL FROM @_sql;
EXECUTE PSQL;
DEALLOCATE PREPARE PSQL;
END //
DELIMITER ;위와 같이 CONCAT을 이용해서 쿼리 문자열을 만들고, PREPARE와 EXECUTE를 이용하여 실행시켜주면 된다.
2023년 12월 28일 목요일
mysql varchar size 변경.
mysql 5.6 이상에서 varchar size를 변경할 때 아래 조건일 경우 table lock 없이 변경할 수 있다.
varchar 컬럼의 byte가 0~255 안에서는 lock없이 변경가능.
varchar 컬럼의 byte가 256~65535(max size) 안에서는 lock없이 변경가능.
여기서 단위가 byte라는것이 중요하며, utf8mb4는 4byte이기 때문에 테이블의 케릭터셋을 확인하여 alter로 변경하면 된다.
예를 들어 utf8mb4 테이블의 varchar(32) 컬럼의 길이를 변경하려면 lock 없이 변경할 수 있는 최대 길이는 63이다.(255 / 4)
alter table tbl_name MODIFY col varchar(63);
lock 걸릴지 두렵다면 아래와 같이 algorithm을 inplace로 지정해주자. DDL이 online 상에서 변경되지 못할 경우 에러난다.
alter table tbl_name ALGORITHM=INPLACE MODIFY col varchar(63);
위 내용은 길이 한정 내용이고 NOT NULL을 NULLABLE로 변경할 경우 당연히 lock이 발생함.
피드 구독하기:
글 (Atom)