다음은 MySQL을 사용하여 몇 가지 일반적인 문제를 해결하는 방법에 대한 몇 가지 예입니다.
일부 예에서는 데이터베이스 테이블 "shop"이 특정 판매자(딜러)의 각 품목(품목 번호) 가격을 저장하는 데 사용됩니다. 각 판매자가 각 항목에 대해 고정 가격을 갖고 있다고 가정하면 (항목, 판매자)가 레코드의 기본 키입니다.
명령줄 도구 mysql을 시작하고 데이터베이스
shell> mysql your-database-name
를 선택합니다(대부분의 MySQL에서는 테스트 데이터베이스를 사용할 수 있습니다).
다음 문을 사용하여 샘플 테이블을 생성할 수 있습니다.
mysql> CREATE TABLE shop ( -> article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL, -> dealer CHAR(20) DEFAULT '' NOT NULL, -> price DOUBLE(16,2) DEFAULT '0.00' NOT NULL, -> PRIMARY KEY(article, dealer)); mysql> INSERT INTO shop VALUES -> (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45), -> (3,'C',1.69),(3,'D',1.25),(4,'D',19.95);
문을 실행한 후 테이블에는 다음이 포함되어야 합니다.
mysql> SELECT * FROM shop; +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 0001 | A | 3.45 | | 0001 | B | 3.99 | | 0002 | A | 10.99 | | 0003 | B | 1.45 | | 0003 | C | 1.69 | | 0003 | D | 1.25 | | 0004 | D | 19.95 | +---------+--------+-------+
열의 최대값
"가장 큰 품목 번호는 무엇입니까?"
SELECT MAX(article) AS article FROM shop; +---------+ | article | +---------+ | 4 | +---------+
2. 열의 최대값이 있는 행
과제: 품목 번호, 판매자 및 가격 찾기 . 하위 쿼리를 사용하면 쉽게 수행할 수 있습니다.
SELECT article, dealer, price FROM shop WHERE price=(SELECT MAX(price) FROM shop);
또 다른 해결책은 모든 행을 가격별로 내림차순으로 정렬하고 MySQL특정 LIMIT 절이 있는 첫 번째 행만 가져오는 것입니다.
SELECT article, dealer, price FROM shop ORDER BY price DESC LIMIT 1;
참고: 가장 비싼 품목이 여러 개 있는 경우(예: 가격이 개당 19.95인 경우) LIMIT 솔루션은 그 중 하나만 표시합니다!
3. 열의 최대값: 그룹별
작업: 각 항목의 최대 가격은 얼마입니까?
SELECT article, MAX(price) AS price FROM shop GROUP BY article +---------+-------+ | article | price | +---------+-------+ | 0001 | 3.99 | | 0002 | 10.99 | | 0003 | 1.69 | | 0004 | 19.95 | +---------+-------+
4. 그룹 간 특정 필드의 최대값이 있는 행
과제: 각 품목에 대해 가장 비싼 품목의 딜러를 찾습니다.
다음과 같은 하위 쿼리로 이 문제를 해결할 수 있습니다:
SELECT article, dealer, price FROM shop s1 WHERE price=(SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article);
5. 사용자 변수 사용
MySQL 사용자 변수를 지워서 별도의 작업 없이 결과를 기록할 수 있습니다. 이를 대체하려면 클라이언트 측의 임시 변수에 저장하세요.
예를 들어 가격이 가장 높거나 낮은 항목을 찾는 방법은 다음과 같습니다.
mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop; mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price; +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 0003 | D | 1.25 | | 0004 | D | 19.95 | +---------+--------+-------+
6. 외래 키 사용
MySQL에서는 InnoDB 테이블을 지원합니다. 외부 키워드 제약 조건 확인.
두 테이블을 조인할 때는 외부 키워드가 필요하지 않습니다. InnoDB 유형이 아닌 테이블의 경우 REFERENCES tbl_name(col_name) 절을 사용하여 열을 정의할 때 외부 키워드를 사용할 수 있습니다. 이 절은 실제 효과가 없으며 만 사용됩니다. 현재 정의하고 있는 열이 다른 테이블의 열을 가리킨다는 점을 상기시키기 위한 메모 또는 설명으로 사용됩니다. 이 명령문을 실행할 때 다음을 구현하는 것이 중요합니다.
· MySQL은 tbl_name 테이블에서 작업을 수행하지 않습니다. 즉, 이 구문은 ON DELETE 또는 ON UPDATE 동작을 발생시키지 않습니다(REFERENCES 절에 ON DELETE 또는 ON UPDATE 절을 작성하면 무시됩니다).
· 이 구문은 열을 생성하지만 색인이나 키워드는 생성하지 않습니다.
· 이 구문을 사용하여 InnoDB 테이블을 정의하면 오류가 발생합니다.
다음과 같이 조인 열로 생성된 열을 사용할 수 있습니다.
CREATE TABLE person ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, name CHAR(60) NOT NULL, PRIMARY KEY (id) ); CREATE TABLE shirt ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, style ENUM('t-shirt', 'polo', 'dress') NOT NULL, color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL, owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id), PRIMARY KEY (id) ); INSERT INTO person VALUES (NULL, 'Antonio Paz'); SELECT @last := LAST_INSERT_ID(); INSERT INTO shirt VALUES (NULL, 'polo', 'blue', @last), (NULL, 'dress', 'white', @last), (NULL, 't-shirt', 'blue', @last); INSERT INTO person VALUES (NULL, 'Lilliana Angelovska'); SELECT @last := LAST_INSERT_ID(); INSERT INTO shirt VALUES (NULL, 'dress', 'orange', @last), (NULL, 'polo', 'red', @last), (NULL, 'dress', 'blue', @last), (NULL, 't-shirt', 'white', @last); SELECT * FROM person; +----+---------------------+ | id | name | +----+---------------------+ | 1 | Antonio Paz | | 2 | Lilliana Angelovska | +----+---------------------+ SELECT * FROM shirt;rrree
이 방법을 사용하면 REFERENCES 절은 SHOW CREATE TABLE 또는 DESCRIBE:
+----+---------+--------+-------+| id | style | color | owner |+----+---------+--------+-------+| 1 | polo | blue | 1 || 2 | dress | white | 1 || 3 | t-shirt | blue | 1 || 4 | dress | orange | 2 || 5 | polo | red | 2 || 6 | dress | blue | 2 || 7 | t-shirt | white | 2 |+----+---------+--------+-------+ SELECT s.* FROM person p, shirt sWHERE p.name LIKE 'Lilliana%'AND s.owner = p.idAND s.color <> 'white'; +----+-------+--------+-------+| id | style | color | owner |+----+-------+--------+-------+| 4 | dress | orange | 2 || 5 | polo | red | 2 || 6 | dress | blue | 2 |+----+-------+--------+-------+의 출력에 표시되지 않습니다. 🎜>이러한 방식으로 열 정의에서 REFERENCES를 주석 또는 "힌트"로 사용하는 것은 MyISAM 및 BerkeleyDB 테이블에 적용됩니다. 7. 두 개의 키를 기준으로 검색하는 은 AND와 마찬가지로 단일 키워드를 사용하여 OR 절을 최대한 활용할 수 있습니다. 더 유연한 예는 OR로 결합된 두 개의 키워드를 찾는 것입니다:
SHOW CREATE TABLE shirt\G *************************** 1. row *************************** Table: shirt Create Table: CREATE TABLE `shirt` ( `id` smallint(5) unsigned NOT NULL auto_increment, `style` enum('t-shirt','polo','dress') NOT NULL, `color` enum('red','blue','orange','white','black') NOT NULL, `owner` smallint(5) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1이 상황은 최적화되었습니다. UNION을 사용하여 두 개의 개별 SELECT 문의 출력을 결합하여 이 문제를 보다 효과적으로 해결할 수도 있습니다. 각 SELECT는 최적화할 수 있는 하나의 키워드만 검색합니다:
SELECT field1_index, field2_index FROM test_table WHERE field1_index = '1' OR field2_index = '1'8. 일수를 기준으로 방문수를 계산합니다. 다음 예는 비트 배열 기능을 사용하는 방법을 보여줍니다. 매월 사용자가 웹페이지를 방문하는 일수를 계산합니다.
SELECT field1_index, field2_index FROM test_table WHERE field1_index = '1' UNION SELECT field1_index, field2_index FROM test_table WHERE field2_index = '1';샘플 테이블에는 사용자가 방문한 웹페이지를 나타내는 연월일 값이 포함되어 있습니다. 다음 쿼리를 사용하여 월별 방문 일수를 확인할 수 있습니다.
CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL, day INT(2) UNSIGNED ZEROFILL); INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2), (2000,2,23),(2000,2,23);는 다음을 반환합니다.
SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1 GROUP BY year,month;이 쿼리는 테이블에서 연/월별로 결합된 고유 일 수를 계산하고 중복 문의를 자동으로 제거할 수 있습니다. 9. AUTO_INCREMENT를 사용하여 AUTO_INCREMENT 속성을 통해 새 행에 대한 고유 식별자를 생성합니다.
+------+-------+------+ | year | month | days | +------+-------+------+ | 2000 | 01 | 3 | | 2000 | 02 | 2 | +------+-------+------+는 다음을 반환합니다.
CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO animals (name) VALUES ('dog'),('cat'),('penguin'), ('lax'),('whale'),('ostrich'); SELECT * FROM animals;LAST_INSERT_ID ()SQL 함수 또는 mysql_insert_id() C API 함수를 사용하여 최신 AUTO_INCREMENT 값을 쿼리합니다. 이러한 함수는 연결별로 다르므로 해당 반환 값은 삽입 기능을 수행하는 다른 연결의 영향을 받지 않습니다.
참고: 다중 행 삽입의 경우 LAST_INSERT_ID() 및 mysql_insert_id()는 실제로 삽입된 첫 번째 행에서 AUTO_INCREMENT 키워드를 반환합니다. 복제 설정에서 이 기능을 사용하면 다중 행 삽입이 다른 서버에서 올바르게 복제될 수 있습니다.
MyISAM 및 BDB 테이블의 경우 두 번째 열에 AUTO_INCREMENT 및 다중 열 인덱스를 지정할 수 있습니다. 이때 AUTO_INCREMENT 컬럼에 의해 생성된 값의 계산 방법은 MAX(auto_increment_column) + 1 WHERE prefix=given-prefix입니다. 데이터를 정렬된 그룹에 넣으려면 이 방법을 사용하십시오.
+----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | lax | | 5 | whale | | 6 | ostrich | +----+---------+는 다음을 반환합니다:
+--------+----+---------+ | grp | id | name | +--------+----+---------+ | fish | 1 | lax | | mammal | 1 | dog | | mammal | 2 | cat | | mammal | 3 | whale | | bird | 1 | penguin | | bird | 2 | ostrich | +--------+----+---------+
请注意在这种情况下(AUTO_INCREMENT列是多列索引的一部分),如果你在任何组中删除有最大AUTO_INCREMENT值的行,将会重新用到AUTO_INCREMENT值。对于MyISAM表也如此,对于该表一般不重复使用AUTO_INCREMENT值。
如果AUTO_INCREMENT列是多索引的一部分,MySQL将使用该索引生成以AUTO_INCREMENT列开始的序列值。。例如,如果animals表含有索引PRIMARY KEY (grp, id)和INDEX(id),MySQL生成序列值时将忽略PRIMARY KEY。结果是,该表包含一个单个的序列,而不是符合grp值的序列。
要想以AUTO_INCREMENT值开始而不是1,你可以通过CREATE TABLE或ALTER TABLE来设置该值,如下所示:
mysql> ALTER TABLE tbl AUTO_INCREMENT = 100;
以上就是MySQL入门教程7 —— 常用数据库查询的示例的内容,更多相关内容请关注PHP中文网(www.php.cn)!

mysqlStringTypESmpactStorageAndperformanceAsfollows : 1) charisfixed, adlaysamestoragespace.

mysqlstringtypesincludevarchar, text, char, enum, and set.1) varcharisversatileforvariable-lengthstringsupciedlimit.2) textisidealforlargetextStorage whithoudfinedlength.3) charisfixed, witableforconsistentDatalikecodes.4)

mysqloffersvariousstringdatatatypes : 1) charfixed-lengthstrings, 2) varcharforvariable-lengthtext, 3) binaryandvarbinaryforbinarydata, 4) blobandtextforlargedata 및 5) enumandsetforcontrolledInput.achtolledinput.CheachorciCificusessandperististicatististicatististics

ToadDuserSinMySqleFeffectially, 다음에 따르면, 다음 사항을 따르십시오

toaddanewuser와 함께 complexpermissionsinmysql, followthesesteps : 1) createShereuser'NewUser '@'localhost'Identifiedby'pa ssword ';. 2) grantreadaccesstoalltablesin'mydatabase'withgrantselectonmydatabase.to'newuser'@'localhost';. 3) GrantWriteAccessto '

MySQL의 문자열 데이터 유형에는 char, varchar, binary, varbinary, blob 및 텍스트가 포함됩니다. 콜라이트는 문자열의 비교와 분류를 결정합니다. 1. 차량은 고정 길이 스트링에 적합하고 Varchar는 가변 길이 스트링에 적합합니다. 2. 이진 및 바이너리는 이진 데이터에 사용되며 Blob 및 텍스트는 큰 객체 데이터에 사용됩니다. 3. UTF8MB4_UNICODE_CI와 같은 정렬 규칙은 상류 및 소문자를 무시하며 사용자 이름에 적합합니다. UTF8MB4_BIN은 사례에 민감하며 정확한 비교가 필요한 필드에 적합합니다.

가장 좋은 mysqlvarchar 열 길이 선택은 데이터 분석을 기반으로하고, 향후 성장을 고려하고, 성능 영향을 평가하고, 문자 세트 요구 사항을 기반으로해야합니다. 1) 일반적인 길이를 결정하기 위해 데이터를 분석합니다. 2) 미래 확장 공간을 예약하십시오. 3) 성능에 대한 큰 길이의 영향에주의를 기울이십시오. 4) 문자 세트가 스토리지에 미치는 영향을 고려하십시오. 이러한 단계를 통해 데이터베이스의 효율성과 확장 성을 최적화 할 수 있습니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

WebStorm Mac 버전
유용한 JavaScript 개발 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.