mysql에서 auto increment 속성을 초기화할 때

Alter table test.member auto_increment=1

 

이 때 auto_increment의 숫자는 현재 테이블에서 가장 높은 수 보다 커야한다.

 

 

-Before

-After


WRITTEN BY
beautifulhill

,

1. 오류

failed to Connect to MySQL at ftp서버 width user root  

Bad handshake

 

 

2. 원인

최신 workbench

버전이 낮은 구 mysql

 

 

3. 해결방안

낮은 버전의 workbench 설치한다.

해당링크에서 연결해야 할 mysql에 맞는 버전으로 설치한다.

 

https://dev.mysql.com/downloads/

 

MySQL :: MySQL Community Downloads

The world's most popular open source database

dev.mysql.com

 

 

3-1. mysql workbench 클릭

 

 

3-2. Select Opreating System 에서 해당하는 OS를 선택한 후 

Looking for previous GA versions를 클릭한다.

 

 

3-3. 버전을 선택한 후 다운로드 받는다.

 

 

 


WRITTEN BY
beautifulhill

,

1. 오류

mysql에서 회원 한명을 삭제 하기 위해 delete문을 실행했더니

 

delete from test.member where name = 'a';

 

다음과 같은 오류가 발생하였다.

 

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.  To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

 

2. 원인

safe모드 기능 때문에 delete나 update가 안되는 상태이다.

 

 

3. 해결방안

다음과 같이 safe모드를 0으로 설정하면 된다.

SET SQL_SAFE_UPDATES = 0;
delete from test.member;

WRITTEN BY
beautifulhill

,

 

1. table : kgroup - 아이돌그룹

 

 

2. table : album - 아이돌 노래명

 

 

1. kgroup 의 아이돌들이 부른 노래들을 보고싶다면 left join을 이용한다.

select a.name, a.agency, b.title
from kgroup a
left join album b
on a.name = b.name

 

album 테이블에 러블리즈가 부른 노래가 없으므로 러블리즈의 title컬럼은 null이다.

 

2. album 의 노래를 부른 가수들의 소속사를 보고싶다면 right join을 이용한다.

select a.agency, b.name, b.title
from kgroup a
right join album b
on a.name = b.name;

 

3. 전체 목록을 출력하고 싶다면 full outer join을 사용할 수 있다.

 

mysql 의 경우 full outer join을 지원하지 않으므로

 

"select * from a left join b on a.no = b.no

union

select * from a right join b on a.no = b.no"

의 형식을 사용하면 된다.

select a.name, a.agency, b.title
from kgroup a
left join album b
on a.name = b.name
union
select b.name, a.agency, b.title
from kgroup a
right join album b
on a.name = b.name;

 

 

 

 

3_2. 비교 : union all 을 사용할 경우 

select a.name, a.agency, b.title
from kgroup a
left join album b
on a.name = b.name
union all
select b.name, a.agency, b.title
from kgroup a
right join album b
on a.name = b.name;

 

이 때 union 과 union all의 차이점을 알아야 한다.

left join과 right join을 합할 경우 가운데 inner join 부분이 중복된다.

union의 경우 중복값을 제거해주고 union all은 중복값을 포함한 결과값들이 출력되므로

중복되는 inner join 결과들을 제거해주는 union을 사용해야 한다.

 


WRITTEN BY
beautifulhill

,

 

1. 문제: workbench에서 mysql 데이터값을 수정, 삭제, 입력 등을 시행하려고 하는데,

readonly여서 못할 때가 있다.

 

 

이는 table에서 pk(primary key)가 지정돼있지 않아서 발생하는 문제이다.

 

해결법

Primary Key를 지정한다.

 

ALTER TABLE `test`.`readonly` 
ADD PRIMARY KEY (`no`);

 


WRITTEN BY
beautifulhill

,

before

SELECT * from(
(
SELECT 
  a.no,
  a.code,
  b.price,
  b.start_date,
  b.end_date
FROM product a
left join sale b
on a.code = b.code
)
Union
(
SELECT 
  a.no,
  a.code,
  b.price,
  b.start_date,
  b.end_date
FROM product a
right join sale b
on a.code = b.code
order by no desc
)
)
where code not in ('9001')
order by code, start_date

 

이 때 Error Code: 1248 Every derived table must have its own alias 오류가 발생한다.

 

파생테이블에 명칭( alias )가 있어야한다.

 

after

SELECT * from(
(
SELECT 
  a.no,
  a.code,
  b.price,
  b.start_date,
  b.end_date
FROM product a
left join sale b
on a.code = b.code
)
Union
(
SELECT 
  a.no,
  a.code,
  b.price,
  b.start_date,
  b.end_date
FROM product a
right join sale b
on a.code = b.code
order by no desc
)
)as c
where code not in ('9001')
order by code, start_date

WRITTEN BY
beautifulhill

,

before

SELECT 
  a.no,
  a.code,
  b.price,
  b.start_date,
  b.end_date
FROM product a
left join sale b
on a.code = b.code
Union
SELECT 
  a.no,
  a.code,
  b.price,
  b.start_date,
  b.end_date
FROM product a
right join sale b
on a.code = b.code
order by no desc

Error Code : 1221 Incorrect usage of UNION and ORDER BY

 

오류 발생

- union과 order by를 같이 사용할 때에는 select 문을 괄호로 감싸줘야 한다.

 

after

(
SELECT 
  a.no,
  a.code,
  b.price,
  b.start_date,
  b.end_date
FROM product a
left join sale b
on a.code = b.code
)
Union
(
SELECT 
  a.no,
  a.code,
  b.price,
  b.start_date,
  b.end_date
FROM product a
right join sale b
on a.code = b.code
)
order by no desc;​

 


WRITTEN BY
beautifulhill

,

BLOB(Binary Large OBject) 타입은 65535 바이트를 넘는 바이너리 데이터 타입이다.

mysql workbench에서 BLOB 이라고 뜨며 데이터가 보이지 않는 경우가 있다.

 

BLOB

 

이를 해결하기 위해 1. 워크벤치의 설정을 변경하거나 2. mysql의 cast() 함수를 사용한다.

 

 

 

1. 워크벤치에서 Edit > Preferences > SQL Editor > SQL Execution > Treat BINARY/VARBINARY as nonbinary character string 을 체크한다.

BLOB이 바이너리 데이터이기 때문에 바이너리 데이터를 논바이너리 문자열로 출력하도록 설정한다.

 

Edit > Preferences
SQL Execution > Treat BINARY/VARBINARY as nonbinary character string

 

이렇게 하면 

 

다음과 같이 BLOB타입의 데이터도 잘 출력된다.

 

 

 

2. CAST 함수를 사용한다.

cast함수 사용법 : cast(value as datatype)

Datatype은 다음과 같이 있는데, 문자열로 출력을 할 것이기 때문에 CHAR 선택

DATE Converts value to DATE. Format: "YYYY-MM-DD"
DATETIME Converts value to DATETIME. Format: "YYYY-MM-DD HH:MM:SS"
TIME Converts value to TIME. Format: "HH:MM:SS"
CHAR Converts value to CHAR (a fixed length string)
SIGNED Converts value to SIGNED (a signed 64-bit integer)
UNSIGNED Converts value to UNSIGNED (an unsigned 64-bit integer)
BINARY Converts value to BINARY (a binary string)


이렇게 SQL문을 작성하면 다음과 같이 문자열로 잘 출력된다.

select cast(PASSWORD('qqq111') as char(10000));

 


WRITTEN BY
beautifulhill

,