2013-07-04 2 views
2

MEDIMTEXT 형식의 열이 포함 된 testing이라는 테이블이 있습니다.
TEXT 데이터 형식 mysql에서 문자열 연결

mysql> desc testing; 
+-------+------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+-------+------------+------+-----+---------+-------+ 
| id | tinyint(4) | YES |  | NULL |  | 
| data | mediumtext | YES |  | NULL |  | 
+-------+------------+------+-----+---------+-------+ 
2 rows in set (0.00 sec) 

그리고 테이블 내용이 ID = 1 data라는 칼럼에서

mysql> select * from testing; 
+------+--------------------------------+ 
| id | data       | 
+------+--------------------------------+ 
| 1 | This is the first data entered.| 
+------+--------------------------------+ 
1 row in set (0.00 sec) 

이렇게 ...이다, 나는 "나를 CONCAT"이 그것을 만들 EX- 다른 문자열을 연결하려면 "이것은 첫 번째 데이터가 입력됩니다. 저를 CONCAT"같이

나는

를 사용하여 그것을 할 수

하지만 전체 필드를 먼저 읽은 다음 연결하고 마지막으로 새로운 만든 String을 이전 필드로 바꾸는 것이 좋을 것이라고 생각합니다.
텍스트가 너무 길면 그렇게하는 데 많은 시간이 걸립니다.
처럼 - 텍스트가 이고 연결될 텍스트가 10 bytes 인 경우 15MB가 읽히고 10 바이트의 데이터가 연결되고 15MB + 10 바이트의 데이터가 다시 쓰여집니다.
나는 연결할 문자열이 완성품을 대체하는 대신 끝에 추가되도록 다른 방법도 존재하는지 묻고 싶습니다.
이렇게 10 바이트 만 데이터베이스에 기록됩니다.
내가 잘못하고 mysql이 효율적으로 작동하도록 명령을 관리합니다.

답변

0

update 문구는 완벽합니다. data 열에 인덱스가있는 경우 업데이트가 느려질 수 있습니다.이 경우 업데이트를 수행하기 전에 인덱스를 비활성화하거나 제거한 다음 업데이트가 완료된 후 다시 추가 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 나는 그 칼럼에 어떤 색인도 가지고 있지 않습니다. 질문에 한 줄을 추가했습니다. "연결된 15MB의 텍스트와 10 바이트의 텍스트가있는 경우 15MB를 읽은 다음 10 바이트의 데이터를 연결 한 다음 15MB + 10 바이트의 데이터를 다시 쓰게됩니다." . 이 문제가 발생하거나 10 바이트 만 데이터베이스에 기록됩니까? –

+0

나는'concat' 함수 내에'data'의 룩업이있을 것이라고 믿습니다. 그런 다음'concat' 함수가 업데이트 된 문자열로 반환되고'data' 열에 설정됩니다. 나는 당신이 당신이 원하는 것처럼 'Concat me'를 추가 할 수있는 기능이 있다고 생각하지 않습니다. 'replace' 함수 (http://dev.mysql.com/doc/refman/5.0/en/replace.html)를보십시오. 그것은 당신이 원하는 것과 비슷한 것일 수 있습니다. 그러나 문자열의 끝 부분에 여분의 데이터를 추가하고 있기 때문에 어떻게 작동시킬 수 있는지 궁금합니다. – vee

관련 문제