《MySQL必知必会》读书笔记_3_MySQL
PS:这次的信息量有点大。
聚集不同值
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM products
WHERE vend_id = 1003
#相同的值不会被计算
组合聚集函数
SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg
FROM products
创建分组
#不创建分组的样子
SELECT vend_id FROM products
#创建分组的样子
SELECT vend_id,COUNT(*) AS num_prods
FROM products
GROUP BY vend_id
P84~P96
主键:唯一标识
外键:某个表的主键值,包含在另一个表中的一列,定义了两个表之间的关系。
PS:外键约束,会导致如果删除表A中的一行数据,如果表A的主键为表B的外键的话,并且表B中有数据引用外键为删除数据,那么会删除失败。需要先接触约束,删除表B中的数据,才能删除表A中的数据。
PS:需要学习数据库范式的概念,才能更加了解书中所说的设计方式。
联结是一种机制,用来在一条SELECT语句中关联表,因此称之为联结。
联结不是物理实体,它在实际的数据库表中不存在。
SELECT vend_name, prod_name, prod_price
FROM vendors, products
WHERE vendors.vend_id = products.vend_id
ORDER BY vend_name, prod_name
笛卡尔积:由于没有联结条件的表关系返回的结果为笛卡尔积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。(PS:(R*S))
SELECT vend_name, prod_name, prod_price
FROM vendors, products
#WHERE vendors.vend_id = products.vend_id
ORDER BY vend_name, prod_name
数据量很大时,应该保证所有的联结都有WHERE子句,这样可以减少返回数据量,同理也要保证子句的正确性。
内部联结,与上面的联结语句结果相同,不过按照规范首选下面的语句。
SELECT vend_name, prod_name, prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id
多做实验:为执行任一给定的SQL操作,一般存在不止一种方法。很少有绝对正确或绝对错误的方法。性能会受很多因素影响,因此有必要对不同的选择机制进行实验,以找出最适合具体情况的方法。
外连接
SELECT customers.cust_id, orders.order_num
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id = orders.cust_id
MySQL下没有*=操作符,其它DBMS中很流行。
外部链接类型有两种形式:左外连接和右外连接。唯一的差别是所关联的表的顺序不同。具体使用哪一种纯粹根据方便而定。
带聚集函数的联结
SELECT customers.cust_name,
customers.cust_id,
COUNT(orders.order_num) AS num_ord
FROM customers INNER JOIN orders
ON customers.cust_id = orders.cust_id
GROUP BY customers.cust_id
SELECT customers.cust_name,
customers.cust_id,
COUNT(orders.order_num) AS num_ord
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id = orders.cust_id
GROUP BY customers.cust_id
UNION组合查询:将两个SELECT语句的结果和到一起
SELECT vend_id, prod_id, prod_price
FROM products
WHERE prod_price
UNION
SELECT vend_id, prod_id, prod_price
FROM products
WHERE vend_id IN (1001,1002)
UNION从查询结果中自动去除重复行,是默认行为。要想返回所有行需要使用UNION ALL。
对组合查询结果排序:在语句的最后ORDER BY 用来排序所有SELECT语句返回的结果。
使用全文本搜索:一般在表创建的时候启用,CREATE TABLE语句接受FULLTEXT子句,它给出被索引列的一个逗号分隔的列表。
不要在导入数据时使用FULLTEXT,更新索引需要耗费时间。
在索引后使用两个函数:MATCH()指定被搜索的列;AGAINST()指定要使用的搜索表达式。
SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('rabbit')
传递给Match()的值必须与FULLTEXT()定义中的相同。
除非使用BINARY,否则全文本搜索不区分大小写。
使用查询扩展
SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('anvils' WITH QUERY EXPANSION)
布尔文本搜索
SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('anvils' IN BOOLEAN MODE)
插入检索出的数据
INSERT INTO tablename1(filed1,filed2) SELECT filed1,filed2 FROM tablename2
更新多个字段中的数据
UPDATE tablename1
SET filed1 = value1,
filed2 = value2
WHERE filed3 = value3
更快的删除表中所有行,使用TRUNCATE TABLE语句。
#创建表
CREATE TABLE vendors
{
vend_id INT NOT NULL AUTO_INCREMENT, #自增属性
vend_name CHAR(50) NOT NULL, #不为空属性
vend_city CHAR(50) NULL, #允许为空属性
vend_age int NOT NULL DEFAULT 1, #默认值为1,不允许使用函数,只能用常亮
PRIMARY KEY (vend_id, vend_name) #联合主键,可以单个字段做主键
} ENGINE = INNODB #选择引擎,如果没有默认为MyISAM
外键不能跨引擎。
常用数据库引擎
InnoDB是一个可靠地事务处理引擎,它不支持全文本搜索。
MEMORY在功能上等同于MyISAM,但由于数据存储在内存中,速度很快
MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。
更新表
ALTER TABLE tablename1
ADD filed1 CHAR(20)
ALTER TABLE tbalename2
DROP COLUMN filed1
删除表
DROP TABLE tablename1
重命名表
RENAME TBALE oldtablename TO newtablename
删除存储过程
DROP PROCEDURE procedurename
使用参数的存储过程
CREATE PROCEDURE procedurename( #创建存储过程
IN prfiled1 int, #接收来自外部参数
OUT prfiled2 DECIMAL(8,2) #输出结果到外部
)
BEGIN
SELECT Min(filed1) #内部查询语句
INTO prfiled2 #内部查询结果输出到变量
FROM table1;
WHERE filed2 = prfiled1 #使用接收外部参数作为查询条件
END;
执行存储过程
CALL procedurename(@prfiled1,@prfiled2)
SELECT @prfiled2

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

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

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











전체 테이블 스캔은 MySQL에서 인덱스를 사용하는 것보다 빠를 수 있습니다. 특정 사례는 다음과 같습니다. 1) 데이터 볼륨은 작습니다. 2) 쿼리가 많은 양의 데이터를 반환 할 때; 3) 인덱스 열이 매우 선택적이지 않은 경우; 4) 복잡한 쿼리시. 쿼리 계획을 분석하고 인덱스 최적화, 과도한 인덱스를 피하고 정기적으로 테이블을 유지 관리하면 실제 응용 프로그램에서 최상의 선택을 할 수 있습니다.

InnoDB의 전체 텍스트 검색 기능은 매우 강력하여 데이터베이스 쿼리 효율성과 대량의 텍스트 데이터를 처리 할 수있는 능력을 크게 향상시킬 수 있습니다. 1) InnoDB는 기본 및 고급 검색 쿼리를 지원하는 역 색인화를 통해 전체 텍스트 검색을 구현합니다. 2) 매치 및 키워드를 사용하여 검색, 부울 모드 및 문구 검색을 지원합니다. 3) 최적화 방법에는 워드 세분화 기술 사용, 인덱스의 주기적 재건 및 캐시 크기 조정, 성능과 정확도를 향상시키는 것이 포함됩니다.

예, MySQL은 Windows 7에 설치 될 수 있으며 Microsoft는 Windows 7 지원을 중단했지만 MySQL은 여전히 호환됩니다. 그러나 설치 프로세스 중에 다음 지점이 표시되어야합니다. Windows 용 MySQL 설치 프로그램을 다운로드하십시오. MySQL의 적절한 버전 (커뮤니티 또는 기업)을 선택하십시오. 설치 프로세스 중에 적절한 설치 디렉토리 및 문자를 선택하십시오. 루트 사용자 비밀번호를 설정하고 올바르게 유지하십시오. 테스트를 위해 데이터베이스에 연결하십시오. Windows 7의 호환성 및 보안 문제에 주목하고 지원되는 운영 체제로 업그레이드하는 것이 좋습니다.

클러스터 인덱스와 비 클러스터 인덱스의 차이점은 1. 클러스터 된 인덱스는 인덱스 구조에 데이터 행을 저장하며, 이는 기본 키 및 범위별로 쿼리에 적합합니다. 2. 클러스터되지 않은 인덱스는 인덱스 키 값과 포인터를 데이터 행으로 저장하며 비 예산 키 열 쿼리에 적합합니다.

기사는 MySQL Workbench 및 Phpmyadmin과 같은 인기있는 MySQL GUI 도구에 대해 논의하여 초보자 및 고급 사용자를위한 기능과 적합성을 비교합니다. [159 자].

기사는 MySQL에서 파티셔닝, 샤딩, 인덱싱 및 쿼리 최적화를 포함하여 대규모 데이터 세트를 처리하기위한 전략에 대해 설명합니다.

MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) 데이터베이스 및 테이블 작성 : CreateAbase 및 CreateTable 명령을 사용하십시오. 2) 기본 작업 : 삽입, 업데이트, 삭제 및 선택. 3) 고급 운영 : 가입, 하위 쿼리 및 거래 처리. 4) 디버깅 기술 : 확인, 데이터 유형 및 권한을 확인하십시오. 5) 최적화 제안 : 인덱스 사용, 선택을 피하고 거래를 사용하십시오.

MySQL 데이터베이스에서 사용자와 데이터베이스 간의 관계는 권한과 테이블로 정의됩니다. 사용자는 데이터베이스에 액세스 할 수있는 사용자 이름과 비밀번호가 있습니다. 권한은 보조금 명령을 통해 부여되며 테이블은 Create Table 명령에 의해 생성됩니다. 사용자와 데이터베이스 간의 관계를 설정하려면 데이터베이스를 작성하고 사용자를 생성 한 다음 권한을 부여해야합니다.
