MySQL의 경우 가장 먼저 기억해야 할 점은 명령의 각 줄이 세미콜론(;)으로 끝나지만... 절대적으로 절대적인 것은 없으며 여기에서도 마찬가지입니다. MySQL 줄을 삽입할 때 PHP 코드에서는 다음 세미콜론을 생략하는 것이 가장 좋습니다. 예를 들어
mysql_query ("INSERT INTO tablename (first_name, last_name) VALUES ('$first_name', $last_name')");
이는 PHP에서도 줄을 세미콜론으로 끝내기 때문입니다. 추가 세미콜론은 때때로 PHP의 구문 분석기를 혼란스럽게 만들기 때문에 생략하는 것이 좋습니다. 이 경우 세미콜론이 생략되었더라도 MySQL 명령을 실행할 때 PHP가 자동으로 이를 추가합니다.
세미콜론을 추가하지 않아도 되는 상황도 있습니다. 일반적인 가로 배열 대신 원하는 필드의 세로 배열을 표시하려면 G를 사용하여 SQL 문 줄을 끝내면 됩니다. 예를 들면 다음과 같습니다.
SELECT * FROM PENPALS WHERE USER_ID = 1G
2. TEXT, DATE, SET 데이터 유형
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개가 넘는 값을 가진 컬렉션이 필요하다면 어떻게 될까요? 이때 이 문제를 함께 해결하려면 여러 컬렉션을 정의해야 합니다.
3. 와일드카드 문자
SQL에는 " * "와 " % "라는 두 가지 종류의 와일드카드 문자가 있습니다. 다양한 상황에서 사용됩니다. 예: 데이터베이스의 모든 내용을 보려면 다음과 같이 쿼리할 수 있습니다.
SELECT * FROM dbname WHERE USER_ID LIKE '%';
여기서는 두 와일드카드가 모두 사용됩니다. . 둘 다 어떤 문자열과도 일치한다는 점에서 같은 의미이지만 서로 다른 상황에서 사용됩니다. " * "는 필드 이름을 일치시키는 데 사용되고 " % "는 필드 값을 일치시키는 데 사용됩니다. 알아차리기 쉽지 않은 또 다른 점은 LIKE 키워드와 함께 "%" 와일드카드를 사용해야 한다는 것입니다.
밑줄 "_"인 와일드카드 문자도 있습니다. 위와는 다른 의미를 가지며 단일 문자와 일치하는 데 사용됩니다.
4. NOT NULL 및 빈 레코드
사용자가 아무것도 작성하지 않고 제출 버튼을 누르면 어떻게 되나요? 값이 정말로 필요한 경우 앞서 언급한 대로 데이터 유효성 검사를 위해 클라이언트 측 스크립트나 서버 측 스크립트를 사용할 수 있습니다. 그러나 데이터베이스에서 일부 필드는 공백으로 남겨두고 아무것도 채울 수 있습니다. 그러한 레코드에 대해 MySQL은 이를 위해 뭔가를 할 것입니다: 기본 작업인 NULL 값을 삽입합니다.
필드 정의에서 NOT NULL을 선언하면(이 필드를 생성하거나 수정할 때) MySQL은 이 필드를 비워두고 아무것도 채우지 않습니다. ENUM 열거 유형의 필드에 대해 NOT NULL을 선언하면 MySQL은 열거 세트의 첫 번째 값을 필드에 삽입합니다. 즉, MySQL은 열거형 세트의 첫 번째 값을 이 열거형 유형의 기본값으로 사용합니다.
NULL 값을 갖는 레코드와 빈 레코드에는 약간의 차이가 있습니다. % 와일드카드 문자는 빈 레코드와 일치할 수 있지만 NULL 레코드와 일치할 수는 없습니다. 어떤 시점에서는 이러한 구별이 의도하지 않은 결과를 초래할 수 있습니다. 내 경험에 따르면 모든 필드는 NOT NULL 로 선언되어야 합니다. 이러한 방식으로 다음 SELECT 쿼리 문이 정상적으로 실행될 수 있습니다:
if (!$CITY) {$CITY = "%";}
$selectresult = mysql_query ("SELECT * FROM dbname
WHERE FIRST_NAME = 'Liu'
AND LAST_NAME = 'Rufeng'
AND CITY LIKE '$CITY'
");
첫 번째 줄에서 사용자가 그렇지 않은 경우 CITY 값을 지정하면 와일드카드 문자 %가 CITY 변수를 대체하는 데 사용되므로 CITY 필드가 비어 있는 레코드도 검색 중에 CITY 값이 고려됩니다.
그런데 CITY 필드 값이 NULL인 레코드가 있으면 문제가 발생합니다. 위 쿼리에서는 이러한 필드를 찾을 수 없습니다. 문제에 대한 해결책은 다음과 같습니다:
if (!$CITY) { $CITY = "%" }
$selectresult = mysql_query ("SELECT * FROM dbname
WHERE FIRST_NAME = 'Liu'
AND LAST_NAME = 'Rufeng'
AND (CITY LIKE '$CITY' OR CITY는 NULL)
");
NULL을 검색할 때는 "IS" 키워드를 사용해야 하며, LIKE가 제대로 작동하지 않는다는 점에 유의하세요.
마지막으로 언급할 점은 새 필드를 추가하거나 수정하기 전에 이미 데이터베이스에 일부 레코드가 있는 경우 원본 레코드에 새로 추가된 필드의 값이 NULL이거나 비어 있을 수 있다는 것입니다. . 이는 MySQL의 버그로 볼 수 있으니 이 경우 SELECT 쿼리 사용 시 특히 주의하시기 바랍니다