본문으로 바로가기

프로그램/SQL 검색 결과

해당 글 17
MySQL] mysql error 1364 Field  'name' doesn't have a default values  


MySQL 5.6 이전에는 필드 생성시 default 값을 따로 지정을 안 해도 insert 시에 '' 처럼 자동으로 디폴트 값이 반영이 되었습니다.
5.6 이후부터는 STRICT 모드라고 해서 테이블 생성시에 default 값을 지정하지 않을 경우 insert 시에 아래와 같이 에러가 발생합니다.

정확하게 필드마다 값을 지정해주는것도 좋지만 외부프로그램을 사용할때 특별히 지정 안해줘도 되는 부분에 '' 이걸 다 셋팅해주긴 귀찮은 편입니다.

mysql.cnf 파일에서 "sql_mode"부분을 찾아서 다음 부분을 제외 하고 재시작을 해주시면 됩니다.


#sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 'STRICT_TRANS_TABLES' 항목을 제외하고 mysql 재시작 

sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[MySQL] 정규식 사용해서 숫자 데이터 찾기

/* 숫자로된 내용만 찾는다.*/

WHERE 컬럼명 REGEXP '^[0-9]+$'
WHERE 컬럼명 REGEXP '^[[:digit:]]+$'
WHERE 컬럼명 NOT REGEXP '[^0-9]'

크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[MySql] GROUP BY 시 MAX ROW 에 해당하는 값 가져오기

SELECT 
    tt.*
FROM topten tt
INNER JOIN
    (
    SELECT home, MAX(datetime) AS MaxDateTime
    FROM topten
    GROUP BY home
    ) groupedtt 
ON tt.home = groupedtt.home 
AND tt.datetime = groupedtt.MaxDateTime
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[MySQL] 특정 ID별 최신 시간 데이터 추출

DB에 사용자 ID 별로 시간 단위로 기록을 하고 있습니다.
해당 항목에 대해서 목록을 뽑을때 사용한 쿼리 입니다.


SELECT * FROM
                      (
                             SELECT uid, id, balance, datetime
                             FROM table
                             ORDER BY datetime DESC

                      ) AS subQuery
GROUP BY DATE_FORMAT(datetime,'%Y-%m-%d'), id
ORDER BY id DESC, datetime DESC
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

  1. 따봉 2018/03/20 16:20

    헐대박;; 제가 엄청 필요했던건데 감사합니다 ㅠ_ㅠ

  2. websterking 2018/06/08 13:21

    안녕하세요. 쿼리만봤을떄는 최신데이터만 가져오는건 아닌것같은데 최신데이터만 가져오려면 어떤식으로 해야할까요

    • Trudy 2018/07/31 10:05

      서브쿼리에서 필요하신 부분 처리하시면 될것 같습니다.

      저도 오래전일이라서 지금은 사용하지 않는 부분이 있어서 정확하지는 않습니다.

    • 굿잡 2019/05/03 15:57

      위에 코드에서 "SELECT * FROM ()을 한번 더 감싼다음
      GROUP BY 체크내용"을 하면 하나만 더 뽑아낼 수 있어요

  3. 굿잡 2019/05/03 15:56

    최고입니다! 감사해요!

[MySQL] 가상 일련번호 부여 하기

category 프로그램/SQL 2016/10/08 11:06
[MySQL] 가상 일련번호 부여 하기

SET @cnt := 0;
SELECT @cnt := @cnt + 1 AS No, COL1 from TABLE;

/* 아래는 IF문 사용*/
SELECT @cnt := if( @cnt > 10,  0, 1) AS No, COL1 from TABLE;
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[MYSQL] 날짜로 group by

category 프로그램/SQL 2016/10/06 11:01
[MYSQL] 날짜로 group by

/* '%Y%m%d' 혹은 '%Y-%m-%d' */
select 
    date_format(articleregdt, '%Y%m%d') as date, 
    count(*) 
from article 
group by date_format(articleregdt, '%Y%m%d') 
order by date asc
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[MySQL] limit , offset

category 프로그램/SQL 2016/09/28 10:16
[MySQL] limit , offset

게시판을 만들거나 혹은 전체 목록에서 페이지를 나누다 보면은 항상 사용하게 되어 있습니다.
조금은 형태를 바꾼 방식이라고 보시면 됩니다.

/* 1번 query */
SELECT * FROM Orders LIMIT 10 OFFSET 15

/* 2번 query */
SELECT * FROM Orders LIMIT 15, 10


위에 쿼리에 보이듯이 1번, 2번은 동일한 결과물이 나오도록 합니다.
정확하게 설명은 못하겠지만은 쿼리의 성능을 올리기 위해라고 저는 이해 하고 있습니다.

좀 더 설명을 잘하지 못해서 제가 검색한 사이트인 "http://crystalcube.co.kr/163" 의 링크를 걸어 놓겠습니다.

참조 
http://www.w3schools.com/php/php_mysql_select_limit.asp
http://ralf79.tistory.com/722
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

MySQL 최대 접속수 설정하기



ERROR 1040 (08004): Too many connections 에러발생시 해결법


mysql을 재시작 하지 않고 바로 설정 방법

#mysql 을 재시작 안해도 max_connections 값이 바로 적용된다.
mysql> set global max_connections=300;




mysql 설정파일(my.ini 또는 my.cnf ) 방법


#mysql을 재시작 해 주어야 한다.
[mysqld]
  max_connections = 300




MySQL 접속수 관련 상태를 확인하는 방법


mysql> show variables like '%max_connect%';    
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 10000 |
| max_connections    | 100   |
+--------------------+-------+

 mysql> show status like '%CONNECT%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| Aborted_connects         | 200   |
| Connections              | 300   |
| Max_used_connections     | 101   |   ==> 현재 연결된 접속수
| Ssl_client_connects      | 0     |
| Ssl_connect_renegotiates | 0     |
| Ssl_finished_connects    | 0     |
| Threads_connected        | 101   |   ==> 연결되었던 최대 접속수
+--------------------------+-------+
7 rows in set (0.00 sec)








※ max_connections에 대한 설명
MySQL은 [ 최대 접속수 + 1 ]의 접속을 허용한다. "1"은 관리자 권한 접속을 나타낸다.
문제가 발생했을 경우 관리자가 접속할 수 있게 하기 위해서이다.


출처 : http://wansdream.net/429
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[MySQL] 문자열 치환

category 프로그램/SQL 2016/01/30 08:12
[MySQL] 문자열 치환

문자열 치환을 하기 전에 select로 먼저 데이터가 정상적으로 변경되는지 확인을 해보시는것이 좋습니다.
UPDATE가 아니기 때문에 실제 DB에서는 변경이 이뤄지지 않으니 검정을 하기에 좋습니다.

SELECT REPLACE(컬럼, '변경전문자열', '변경후문자열') AS 가상컬럼명 FROM 테이블 WHERE 컬럼 = '변경전문자열';



위에서 모든 데이터를 확인을 하였다면은 실질적으로 이제 UPDATE를 하여서 DB에서 값을 변경을 하면 됩니다.


UPDATE wp_posts SET 테이블 = REPLACE(컬럼, '변경전문자열', '변경할문자열') WHERE 컬럼 = '값';

또는

UPDATE wp_posts SET 테이블 = REPLACE(컬럼, '변경전문자열', '변경할문자열');




참초 : http://chongmoa.com/4555
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[MySQL] my.conf 중 Bin log 와 slow-query 설정

mysql bin log란 ?
=> mysql 쿼리를 수행 하면서 쌓는 로그, 추후 트렉젝션하여 시점 복구 등을 수행하는 등의 역할


# 바이너리 로그 관련
[mysqld]
log-bin=/home/mysql_log/bin_log/bin # 빈로그 저장 설정 및 저장할 디렉토리 지정
binlog_cache_size = 2M # binlog cache 사이즈 
max_binlog_size = 50M # bin로그 최대 파일 사이즈 
expire_logs_days = 10 # 보관기간


# 5초 이상 슬로우쿼리 로그 남기기
[mysqld] 
log-slow-queries = /var/log/mysql/mysql-slow.log
long_query_time = 5 # 시간 초단위


크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

Trudy
Trudy 님의 블로그
MENU
VISITOR 오늘493 / 전체418630