MySQL 커서 간단 튜토리얼
MySQL V5.5부터 InnoDB를 기본 스토리지 엔진으로 사용하는 큰 변화가 생겼다. InnoDB는 트랜잭션을 지원하며 ACID 트랜잭션 지원, 데이터 무결성(외래 키 지원), 재해 복구 기능 등 관련 RDBMS 기능을 갖추고 있습니다.
이제 커서에 대한 지식을 간략하게 정리합니다.
(1) 커서 이해
커서는 단순히 쿼리된 데이터 인덱스를 커서의 조작을 통해(첫 번째 위치, 마지막 위치, 이전 위치, 다음 위치) 이동할 수 있습니다. 데이터에서.
커서를 사용하는 주요 이유 중 하나는 수집 작업을 단일 레코드 처리로 변환하는 것입니다. SQL 언어를 사용하여 데이터베이스에서 데이터를 검색한 후 결과는 메모리 영역에 배치되며 결과는 여러 레코드를 포함하는 모음인 경우가 많습니다. 커서 메커니즘을 통해 사용자는 SQL Server에서 이러한 레코드에 행별로 액세스하고 사용자 자신의 희망에 따라 이러한 레코드를 표시하고 처리할 수 있습니다.
데이터베이스에서 커서는 매우 중요한 개념입니다. 커서는 테이블에서 검색된 데이터에 대해 유연한 작업 수단을 제공합니다. 본질적으로 커서는 여러 데이터 레코드가 포함된 결과 집합에서 한 번에 하나의 레코드를 추출할 수 있는 메커니즘입니다. 커서는 결과 세트(관련 select 문에 의해 검색된 0개, 1개 또는 여러 개의 레코드일 수 있음)와 특정 레코드를 가리키는 결과 세트의 커서 위치로 구성되므로 커서는 항상 SQL select 문과 연결됩니다. . 결과 집합을 처리하기로 결정한 경우 결과 집합을 가리키는 커서를 선언해야 합니다. C 언어로 파일을 처리하는 프로그램을 작성한 적이 있다면 커서는 파일을 열 때 얻는 파일 핸들과 같습니다. 파일이 성공적으로 열리면 파일 핸들이 파일을 나타낼 수 있습니다. 커서의 경우 논리는 동일합니다. 커서는 플랫 파일을 읽는 기존 프로그램과 유사한 방식으로 기본 테이블의 결과 집합을 처리하여 테이블의 데이터를 플랫 파일 형식으로 프로그램에 제공할 수 있음을 알 수 있습니다.
우리는 관계형 데이터베이스 관리 시스템이 본질적으로 집합 지향적이라는 것을 알고 있습니다. MS SQL SERVER에서는 where 절을 사용하여 레코드를 하나만 제한하지 않는 한 테이블의 단일 레코드를 설명하는 표현식이 없습니다. 선택된. 따라서 단일 레코드에 대한 데이터 처리를 수행하려면 커서를 사용해야 합니다. 커서를 사용하면 응용 프로그램이 전체 결과 집합에 대해 동일한 작업을 한 번에 수행하는 대신 쿼리 문 select에서 반환된 행 결과 집합의 각 행에 대해 동일하거나 다른 작업을 수행할 수 있다는 것을 알 수 있습니다. 커서 위치를 기준으로 테이블의 데이터에 대해 동일한 작업을 수행하는 기능 또한 컬렉션 지향 데이터베이스 관리 시스템과 행 지향 프로그래밍을 연결하는 커서입니다. 의사소통 처리 방법.
데이터베이스 개발 과정에서 검색하는 데이터가 단 하나의 레코드인 경우 작성하는 트랜잭션 문 코드에서 SELECT INSERT 문을 사용하는 경우가 많습니다. 하지만 우리는 특정 결과 집합에서 레코드를 하나씩 읽는 상황에 자주 직면합니다. 그렇다면 이 문제를 해결하는 방법은 무엇입니까? 커서는 매우 뛰어난 솔루션을 제공합니다. 즉, 커서
를 사용하는 것은 데이터가 검색된 위치를 식별하는 읽기 가능한 식별자입니다.
(2) 커서 특성
1, 읽기 전용
2, 스크롤 불가
3, 둔감
(3 ) 커서 사용하기
핸들러를 정의하기 전에 커서를 정의해야 하지만, 커서를 정의하기 전에 변수를 정의해야 한다는 점을 강조해야 합니다. 순서는 변수 정의 - 커서 정의 - 핸들러입니다.
1. 커서 정의
DECLARE cursor_name CURSOR FOR select_statement
이 문은 커서를 선언합니다. 서브루틴에서 여러 커서를 정의할 수도 있습니다. 블록의 각 커서 이름은 고유해야 합니다. 커서를 선언한 후에는 이 작업도 단일 작업입니다.
2. Cursor OPEN
OPEN cursor_name
이 문은 이전에 선언한 커서를 엽니다.
3. Cursor FETCH
FETCH cursor_name INTO var_name [, var_name] ...
지정된 오픈 커서로 다음 라인(다음 라인이 있는 경우)을 읽어 커서를 앞으로 이동시키는 명령문입니다. 괜찮습니다.
4. 游标CLOSE
CLOSE cursor_name
这个语句关闭先前打开的游标,注意,用完后必须关闭。
(四)示例
下面是一个存储过程,里面用到游标,逐条更新数据(批量更新数据)
BEGIN DECLARE no_more_record INT DEFAULT 0; DECLARE pID BIGINT(20); DECLARE pValue DECIMAL(15,5); DECLARE cur_record CURSOR FOR SELECT colA, colB from tableABC; /*首先这里对游标进行定义*/ DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_record = 1; /*这个是个条件处理,针对NOT FOUND的条件,当没有记录时赋值为1*/ OPEN cur_record; /*接着使用OPEN打开游标*/ FETCH cur_record INTO pID, pValue; /*把第一行数据写入变量中,游标也随之指向了记录的第一行*/ WHILE no_more_record != 1 DO INSERT INTO testTable(ID, Value) VALUES (pID, pValue); FETCH cur_record INTO pID, pValue; END WHILE; CLOSE cur_record; /*用完后记得用CLOSE把资源释放掉*/ END
以上就是 mysql进阶(三)游标简易教程的内容,更多相关内容请关注PHP中文网(www.php.cn)!