아래 예제에서는 DSN을 `examples.mdb`라는 MSSQL Server 데이터베이스에 연결하고 테이블 `cars`에서 모든 레코드를 검색하는 방법을 보여 드리겠습니다. mssql_connect()는 MS SQL 서버에 대한 연결을 설정합니다. 동일한 인수로 mssql_connect()를 두 번째 호출하면 새 링크가 설정되지 않지만 이미 열린 링크의 링크 식별자가 반환됩니다. 이 매개 변수는 이 동작을 수정하고 mssql_connect()가 동일한 매개 변수로 이전에 호출된 경우에도 항상 새 링크를 열게 합니다. 이 고전적인 예는 두 개의 서로 다른 거래에 대해 동일한 은행 계좌를 업데이트하려는 두 명의 은행 직원이 보여 주어도 됩니다. 서기 1과 2는 모두 계정의 레코드를 검색(즉, 복사)합니다. 서기 1은 거래를 적용하고 저장합니다. Clerk 2는 저장된 사본에 다른 거래를 적용하고 원래 기록 및 변경 사항에 따라 서기 1이 입력한 트랜잭션을 덮어 쓰는 결과를 저장합니다. 레코드는 더 이상 첫 번째 트랜잭션을 반영하지 않습니다. mssql_close()를 명시적으로 호출하여 이전에 닫히지 않는 한 스크립트 실행이 종료되는 즉시 서버에 대한 링크가 닫힙니다.

SQL 데이터베이스에서 레코드를 일반적으로 „행”이라고 합니다. 쿼리 의 모든 하나에 nolock을 추가하는 것은 실제로 옵션이 아니었습니다. 안전한 것처럼 보이는 모든 것들에 추가했지만 LINQ를 SQL에 사용하면 힌트를 선택적으로 적용하기가 어려웠습니다. 데이터를 수정하는 것을 먹지 않는다면 희귀 한 쓰기에서 사소한 초고속 읽기를 어떻게 차단 할 수 있습니까? 지금까지 SQL Server에서 좋은 결과를 얻었지만 이 동작은 매우 실망스러웠습니다. 이러한 교착 상태는 다소 드물었지만 여전히 하루에 몇 번 발생했으며 완전히 이해하지 못하는 오류에 대해 매우 불편합니다. 이것은 말 그대로 밤에 나를 유지하는 물건의 종류입니다. sqlsrv_connect — 마이크로소프트 SQL Server 데이터베이스에 대한 연결을 엽니다. 조엘 스폴스키도 잘 될 것 같지만, 그는 창립자 중 한 명이기 때문에 분명히 편견을 가지고 있습니다. 그것은 가치가 무엇에 대 한, 로버트 스코블 스택 오버 플로우에 대 한 열광 했다, 비록 그것은 그를 울게 하지 않았다.

그럼에도 불구하고, 나는 로버트가 지역 사회를 통해 열정적으로 이것을 집어 들었다는 것에 겸손해졌다. 나는 그에게 어떤 식으로든 연락하지 않았다. 나 자신은 그의 반응 세 번째 손에 대해 알게되었습니다. SqlSrv를 사용할 수 없는 경우 PDO_ODBC 드라이버를 사용하여 기본 Windows DB-LIB가 고대이고 스레드가 안전하지 않으며 Microsoft에서 더 이상 지원하지 않기 때문에 Microsoft SQL Server 및 Sybase 데이터베이스에 연결할 수 있습니다. 여러 사용자가 동시에 데이터베이스 테이블을 편집하고 무제한 액세스로 생성된 불일치를 방지하려면 편집 또는 업데이트용으로 검색할 때 단일 레코드를 잠글 수 있습니다. 편집을 위해 동일한 레코드를 검색하려고 시도하는 사람은 잠금으로 인해 쓰기 액세스가 거부됩니다(구현에 따라 편집하지 않고 레코드를 볼 수 있음). 레코드가 저장되거나 편집이 취소되면 잠금이 해제됩니다. 다른 변경 내용을 덮어쓰도록 레코드를 저장할 수 없으므로 데이터 무결성을 유지할 수 있습니다. 윈도우에서, 당신은 SqlSrv를 사용해야합니다, MS SQL에 대한 대체 드라이버는 마이크로 소프트에서 사용할 수 있습니다 : » http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx .

이를 방지하는 간단한 방법은 다른 사용자가 데이터를 저장할 수 없도록 모든 사용자가 레코드를 수정할 때마다 파일을 잠그는 것입니다. 이렇게 하면 레코드가 잘못 덮어쓰는 것을 방지할 수 있지만 한 번에 하나의 레코드만 처리하여 동시에 레코드를 편집해야 하는 다른 사용자를 잠글 수 있습니다.

2010 © Copyright Fundacja Projekt Kultura