집 >데이터 베이스 >MySQL 튜토리얼 >MySQL을 배울 때 숙지해야 할 6가지 팁
MySQL은 작은 크기와 효율적인 운영으로 인해 데이터베이스 애플리케이션에서 점점 더 많이 사용되고 있습니다. LAMP(또는 WAMP) 개발의 중요한 부분인 MySQL은 PHP 개발자의 관심과 신중한 연구를 받을 가치가 있습니다.
MySQL의 경우 가장 먼저 기억해야 할 것은 각 줄의 해당 명령은 세미콜론(;)으로 끝나지만 MySQL의 줄이 PHP 코드에 삽입될 때는 다음 세미콜론을 생략하는 것이 가장 좋습니다. 예:
mysql_query ("INSERT INTO tablename (first_name, last_name) VALUES ('$first_name', $last_name')");
이것은 PHP도 줄을 끝내기 때문입니다. 세미콜론을 사용하면 추가 세미콜론이 PHP 파서를 혼동하는 경우가 있으므로 생략하는 것이 좋습니다. 이 경우 세미콜론이 생략되었더라도 MySQL 명령을 실행할 때 PHP가 자동으로 이를 추가합니다.
다음 예를 살펴보세요.
$connection = mysql_connect("localhost", "albert", "shhh"); mysql_select_db("winestore", $connection); $result = mysql_query("SELECT cust_id, surname, firstname FROM customer", $connection); while ($row = mysql_fetch_array($result)) { echo "ID:t{$row["cust_id"]}n"; echo "Surnamet{$row["surname"]}n"; echo "First name:t{$row["firstname"]}nn"; }
mysql_fetch_array() 함수는 쿼리 결과 행을 배열에 넣습니다. 두 개를 동시에 사용할 수 있습니다. 예를 들어 cust_id는 $row["cust_id"] 또는 $row[0]라는 두 가지 방법으로 동시에 참조될 수 있습니다. 분명히 전자가 후자보다 훨씬 더 읽기 쉽습니다.
다중 테이블 쿼리에서 두 개의 열 이름이 동일한 경우 별칭으로 구분하는 것이 가장 좋습니다.
SELECT winery.name AS wname, region.name AS rname, FROM winery, region WHERE winery.region_id = region.region_id; 列名的引用为:$row["wname"] 和 $row["rname"]
테이블 이름을 지정할 때 열 이름 아래에서는 열 이름만 인용하세요:
SELECT winery.region_id FROM winery 列名的引用为: $row["region_id"]
집계 함수의 참조는 참조 이름입니다:
SELECT count(*) FROM customer; 列名的引用为: $row["count(*)"]
MySQL 데이터 테이블의 필드에는 데이터 유형이 정의되어 있어야 합니다. 약 25개의 옵션이 있으며 대부분은 간단하며 추가 설명이 필요하지 않습니다. 그러나 언급해야 할 몇 가지 사항이 있습니다.
TEXT는 데이터 유형이 아니지만 일부 책에서는 그렇게 말할 수 있습니다. 실제로는 "LONG VARCHAR" 또는 "MEDIUMTEXT"여야 합니다.
DATE 데이터 유형의 형식은 YYYY-MM-DD입니다(예: 1999-12-08). 날짜 함수를 사용하면 다음 형식으로 현재 시스템 시간을 쉽게 얻을 수 있습니다. date("Y-m-d") 또한 DATA 데이터 유형 간을 빼서 일 단위의 시간 차이를 구할 수 있습니다.
$age = ($current_date - $birthdate);
set SET SET은 여러 값을 저장할 수 있고 ENUM은 하나의 값만 저장할 수 있다는 점을 제외하면 열거형 ENUM과 다소 유사한 유용한 데이터 유형입니다. 또한 SET 유형은 최대 64개의 미리 정의된 값만 가질 수 있는 반면 ENUM 유형은 최대 65,535개의 미리 정의된 값을 처리할 수 있습니다. 64개가 넘는 값을 가진 컬렉션이 필요한 경우 어떻게 해야 할까요? 이때 이 문제를 함께 해결하려면 여러 컬렉션을 정의해야 합니다.
이 함수는 mysql_query() 함수를 대체하는 데 사용할 수 있습니다. 주요 차이점은 mysql_unbuffered_query()가 쿼리 실행 후 즉시 반환된다는 것입니다. 기다리지 않고 데이터베이스를 잠급니다. 그러나 출력 결과 세트의 크기를 알 수 없으므로 mysql_num_rows() 함수를 사용하여 반환된 행 수를 확인할 수 없습니다.
SQL에는 "*"와 "%"라는 두 가지 종류의 와일드카드 문자가 있습니다. 다양한 상황에서 사용됩니다. 예: 데이터베이스의 모든 내용을 보려면 다음과 같이 쿼리할 수 있습니다.
SELECT * FROM dbname WHERE USER_ID LIKE '%';
여기에서는 두 와일드카드가 모두 사용됩니다. 둘 다 어떤 문자열과도 일치한다는 점에서 같은 의미이지만 서로 다른 상황에서 사용됩니다. " * "는 필드 이름을 일치시키는 데 사용되고 " % "는 필드 값을 일치시키는 데 사용됩니다. 또 한 가지 알아차리기 쉽지 않은 점은 "%" 와일드카드 문자를 LIKE 키워드와 함께 사용해야 한다는 점입니다. 밑줄 "_"인 와일드카드 문자도 있는데, 이는 위와 의미가 다르며 단일 문자와 일치하는 데 사용됩니다.
사용자가 아무것도 작성하지 않고 제출 버튼을 누르면 어떻게 되나요? 값이 정말로 필요한 경우 데이터 유효성 검사를 위해 클라이언트 측 스크립팅 또는 서버 측 스크립팅을 사용할 수 있습니다. 그러나 데이터베이스에서 일부 필드는 공백으로 남겨두고 아무것도 채울 수 있습니다. 그러한 레코드에 대해 MySQL은 이를 위해 뭔가를 할 것입니다: 기본 작업인 NULL 값을 삽입합니다.
필드 정의에서 NOT NULL을 선언하면(이 필드를 생성하거나 수정할 때) MySQL은 이 필드를 비워 두고 아무것도 채우지 않습니다. ENUM 열거 유형의 필드에 대해 NOT NULL을 선언하면 MySQL은 열거 세트의 첫 번째 값을 필드에 삽입합니다. 즉, MySQL은 열거형 세트의 첫 번째 값을 이 열거형 유형의 기본값으로 사용합니다.
NULL 값을 갖는 레코드와 빈 레코드에는 몇 가지 차이점이 있습니다. % 와일드카드 문자는 빈 레코드와 일치할 수 있지만 NULL 레코드와 일치할 수는 없습니다. 어떤 시점에서는 이러한 구별이 의도하지 않은 결과를 초래할 수 있습니다. 내 경험에 따르면 모든 필드는 NOT NULL 로 선언되어야 합니다. 이러한 방식으로 많은 SELECT 쿼리 문이 정상적으로 실행될 수 있습니다. NULL을 검색할 때는 "IS" 키워드를 사용해야 하며, LIKE는 제대로 작동하지 않는다는 점에 유의하세요. 마지막으로 언급할 점은 새 필드를 추가하거나 수정하기 전에 이미 데이터베이스에 일부 레코드가 있는 경우 원본 레코드에 새로 추가된 필드의 값이 NULL 또는 Null일 수 있다는 것입니다. 이는 MySQL의 버그로 볼 수 있으므로 이 경우 SELECT 쿼리 사용 시 특히 주의가 필요하다.