#Author: Kearney
#Contents: DataBase System Theory
#Time: 2020
전체 텍스트는 3704 단어로 인내없이 배우는 방법입니다. Aoli가 줘!
소개
데이터베이스의 설치 및 연결은이 문서의 범위를 벗어납니다. 데이터베이스의 설치 및 연결 방법을 검색하고 마스터하십시오.
이 기사에서는 MyQSL을 예로 사용합니다. 이해를 돕기 위해 SQL 문 예의 일부 관련 문도 나열되어 있습니다. 주 함수 문이 아닙니다.
MySQL의 SQL 문은 키워드의 대소 문자에 민감하지 않지만 많은 개발자가 키워드를 대문자로 사용하고 테이블 이름과 필드 이름에 소문자를 사용하는 것을 선호합니다. 이러한 습관을 개발하면 나중에 작성된 스크립트를 읽고 유지 관리하기가 더 쉽습니다. .
데이터베이스 생성
SQL 문은 세미콜론을 끝 기호로 사용하며 대소 문자를 구분하지 않습니다.
mysql -u root -p #以root账户登录数据库,井号“#”后面的内容为注释
create database TestDb; #创建数据库,数据库名为 TestDb
show databases; #查看MySQL中已存在的数据库,参考语句
테이블 만들기
use TestDb; #选中数据库 TestDb,表示接下来的操作在 TestDb中进行
#若不提前选中数据库而直接建表,则会报错ERROR 1046
create table user( #在 TestDb中创建表,表名为 user
id INT, #每个字段之间用英文逗号隔开
username VARCHAR(32),
password VARCHAR(32),
phone VARCHAR(11) #!!!这里是没有逗号的哟
);
#下面的内容仅供学习,不是建表必备操作
show tables; #查看当前数据库中存在的表
DESCRIBE user; #查看表user的结构,可以简写为 DESC user;
drop table user; #删除表,仅供参考,不得已不使用的命令
생성 된 테이블의 구조는 다음과 같습니다 (Excel 테이블과 유사).
분야 명 | 데이터 유형 | 비고 |
---|---|---|
신분증 | INT | 사용자 ID |
사용자 이름 | VARCHAR (32) | 사용자 이름 |
암호 | VARCHAR (32) | 암호 |
전화 | VARCHAR (11) | 핸드폰 번호 |
INT 유형은 숫자를 저장하고 VARCHAR ()은 문자 유형이며 괄호 안의 최대 문자 길이입니다.
기본 키 제약 추가
기본 키 제약 조건 (Primary Key Constraint)
에서는 기본 키 열의 데이터가 고유해야하며 비워 둘 수 없습니다. 기본 키는 ID와 마찬가지로 테이블의 각 레코드를 고유하게 식별 할 수 있습니다.
테이블의 기본 키는 다중 또는 단일 일 수 있습니다.
테이블을 작성할 때 기본 키를 지정하십시오.
열을 정의하는 동안 기본 키 지정
create table user(
id INT primary key, #指定id为主键
username VARCHAR(32),
password VARCHAR(32),
phone VARCHAR(11)
);
모든 열을 정의한 후 기본 키 지정
create table user(
id INT ,
username VARCHAR(32),
password VARCHAR(32),
phone VARCHAR(11),
primary key(id)#指定id为主键
# primary key(id,username)#指定id和username为主键,不同字段之间用逗号隔开
);
기본 키를 지정하도록 테이블 구조 수정
alter table user add primary key (id); #此时id在表里面必须是第一列
외래 키 제약
외래 키 (외래 키)는 다른 테이블의 기본 키입니다 . 데이터 일관성과 무결성을 유지하는 데 사용됩니다.
외래 키 유형은 해당 기본 키 유형으로 설정해야합니다.
삭제할 필드에 외래 키가 포함되어 있으면 삭제가 실패하고 오류가보고되며 외래 키 제약 조건을 먼저 삭제해야합니다.
CONSTRAINT 外键名 FOREIGN KEY 字段名 REFERENCES 主表名(主键名)
CREATE table t_class(
id INT PRIMARY KEY, #主键,班级id
NAME VARCHAR(22)
);
CREATE table t_student(
id INT PRIMARY KEY,
NAME VARCHAR(22),
classId INT, #为班级id添加外键
CONSTRAINT fk_stu_class1 FOREIGN KEY (classId) REFERENCES t_class(id)
); #外键名是任意的,外键在另一个表中必须是主键!!!
일반적인 제약
create table t_user(
id int primary key auto_increment,
username varchar(32) not null unique,
sex varchar(4) DEFAULT '男'
);
필드에 두 개 이상의 제약 조건을 추가하려면 제약 조건을 공백으로 구분하십시오.
고유 한 제약
고유 제약 조건 (Unique Constraint)
에서는 열의 데이터가 고유해야하며 비어있을 수 있지만 null 값은 하나만있을 수 있습니다. 고유 한 제약 조건이있는 열에 데이터를 입력하면 오류가보고됩니다.
이 제약 조건을 추가 할 때 필드 이름 뒤에 키워드 만 추가하면됩니다. UNIQUE
기본 키에는 고유 한 제약 조건 후광이 있으며 이메일 및 휴대폰 번호와 같은 다른 기본 키가 아닌 키에 자주 사용됩니다 (일부 등록 페이지는 자명함).
비어 있지 않은 제약
필드에 Null이 아닌 제약 조건을 추가 한 후 데이터베이스는 테이블에 데이터를 삽입 할 때 필드 입력이 비어 있는지 확인합니다. 비어 있으면 데이터 삽입에 실패하고 오류가보고됩니다. 실명 인증시 휴대 전화 번호 등 일부 필수 입력란에 일반적으로 사용
이 제약 조건을 추가 할 때 필드 이름 뒤에 키워드 만 추가하면됩니다.NOT NULL
기본 제약
때로는 일부 데이터가 기본값이되기를 원합니다. 예를 들어, 학생 점수 시트의 2 단계 점수는 기본적으로 P (수동 개 머리)이므로 과정을 놓친 소수의 학생 만 수정할 수 있습니다.
이 제약 조건을 추가 할 때 필드 이름 뒤에 키워드 만 추가하면됩니다. DEFAULT
- 문자열 유형 기본값을 추가하는 경우 영어 작은 따옴표를 사용하십시오.
- 중국어 기본값을 추가하려면 다음을 추가해야합니다.
DEFAULT CHARSET=utf8;
자동 증가
학생 번호 및 직장 번호와 같은 연속 데이터와 같이 이해하기 쉽습니다.
이 제약 조건을 추가 할 때 필드 이름 뒤에 키워드 만 추가하면됩니다 AUTO_INCREMENT
. 기본적으로 초기 값과 증분은 모두1
테이블 구조보기
DESCRIBE
필드 이름, 필드 데이터 유형, 기본 키인지 여부, 기본값이 있는지 여부 등을 포함한 테이블의 필드 정보를 볼 수 있습니다.
NULL
:이 열은 저장된NULL
값 인지 여부를 나타냅니다 .Key
: 열이 인덱싱되었는지 여부를 나타냅니다.PRI
: 열이이 테이블의 기본 키의 일부임을 나타냅니다.UNI
: 열이UNIQUE
인덱스의 일부 임을 나타냅니다 .MUL
: 주어진 값이 열에 여러 번 나타날 수 있음을 나타냅니다.Default
: 열에 기본값이 있는지 여부와 기본값이있는 경우 값을 나타냅니다.Extra
: 얻을 수있는 주어진 열과 관련된 추가 정보를 나타냅니다.
데이터 테이블의 세부 구조보기 : 테이블을 작성할 때 작성된 세부 설명을 반환하는 것 외에도 스토리지 엔진 및 문자 인코딩을 볼 수 있습니다.
SHOW CREATE TABLE 表名;
반환 된 결과의 레이아웃이 약간 지저분하다고 생각합니다. 추가 \G
하면 효과가 향상됩니다.SHOW CREATE TABLE 表名 \G;
테이블 구조 수정
테이블 이름 수정
ALTER TABLE 旧表名 RENAME 新表名;
필드 이름 수정
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
새 데이터 유형은 비워 둘 수 없습니다! ! ! 이전과 동일하거나 다를 수 있습니다.
필드 데이터 유형 수정
ALTER TABLE 表名 MODIFY 字段名 数据类型;
필드 추가
ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件] [FIRST|AFTER] 已存在字段名;
[FIRST|AFTER]
위치를 지정 하지 않으면 MySQL
필드를 추가 할 때 기본적으로 테이블의 마지막 열에 새 필드가 추가됩니다.
첫 번째 열에 새 필드를 추가하려면 FIRST
위치 설명 만 작성 하면됩니다. 특정 열 뒤에 새 필드를 추가하도록 지정하려면 AFTER
위치 설명 만 작성하면됩니다 . 특정 열 앞에 지정하면 오류가보고됩니다! ! !
필드 삭제
ALTER TABLE 表名 DROP 字段名;
필드 배치 위치 수정
ALTER TABLE 表名 MODIFY 字段1 数据类型 FIRST|AFTER 字段2;
FIRST
위치 설명 만 작성하면 필드 1이 첫 번째 열로 전송됩니다.
테이블의 외래 키 제약 조건 삭제
ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;
데이터 삽입
테이블의 모든 필드에 대한 데이터 삽입
INSERT INTO 表名 (字段名) VALUES (内容);
여러 필드와 내용은 쉼표로 구분하고 문자 내용은 한 쌍의 작은 따옴표로 묶습니다. 내용은 지정된 필드 순서와 일치해야합니다. 필드 이름을 입력하지 않은 경우 테이블의 필드 순서대로 해당 데이터를 삽입하십시오.
테이블에 동시에 여러 레코드 삽입
INSERT INTO 表名 (字段名) VALUES (内容1),(内容2),(内容3);
표에 지정된 내용 업데이트
UPDATE 表名 SET 字段名1 = 内容1, 字段名2 = 内容2, 字段名3 = 内容3 WHERE 过滤条件;
필드 수는 업데이트 요구 사항에 따라 다르며 하나의 업데이트가 필요합니다.
테이블에서 지정된 행 삭제
DELETE FROM 表名 WHERE 条件语句;
조건문은 삭제할 항목을 지정합니다. 생략 where 条件语句;
하면 모든 행이 삭제됩니다.
TRUNCATE TABLE 表名;
테이블의 모든 레코드를 삭제하는데도 사용할 수 있습니다. 그러나 DELETE와 달리 TRUNCATE TABLE 문은 테이블의 내용이 아닌 테이블을 직접 삭제하며 삭제 후 테이블을 다시 생성합니다. 따라서 실행 속도는 DELETE 문보다 빠릅니다.
조회
SELECT 字段名1,字段名2 FROM 表名;
SELECT 字段名1,字段名2 FROM 表名 WHERE 条件语句;
여러 필드 이름은 쉼표로 구분됩니다. 모든 필드를 쿼리하려면 *
모든 필드 이름을 바꾸 세요 . 쿼리해야하는 콘텐츠를 필터링하는 데 사용됩니다.
비교 연산자
운영자 | 기술 |
---|---|
> | 보다 |
> = | 보다 크거나 같음 |
= | 같은 |
! = 또는 <> | 같지 않음 |
< | 이하 |
<= | 보다 작거나 같음 |
에
SELECT 字段名 FROM 表名 WHERE 字段名 IN (n1,n2,n3,...);
SELECT 字段名 FROM 表名 WHERE 字段名 NOT IN (n1,n2,n3,...);
IN은 쿼리해야하는 콘텐츠를 필터링하는 데 사용되며, 괄호 안의 숫자 인 경우 INT
형식 이어야 합니다. 사실, IN의 내용이 적을 때는 대신에 field name = n1 또는 field name = n1을 사용할 수 있습니다.
와 ~ 사이에있는
SELECT 字段名 FROM 表名 WHERE 字段名 BETWEEN n1 AND n2;
SELECT 字段名 FROM 表名 WHERE 字段名 NOT BETWEEN n1 AND n2;
폐쇄 간격 : 필터링 범위에는 n1 및 n2가 포함됩니다.
처럼
와일드 카드 %
또는 _
유사 일치 데이터 콘텐츠 사용
퍼센트 기호 와일드 카드 %
는 0 개 문자를 포함하여 모든 길이의 문자와 일치 할 수 있습니다. 밑줄 와일드 카드 _
는 퍼지 1个
(공백도 하나의 문자로 계산 됨) 문자와 만 일치 할 수 있으며 두 개는 서로 일치 할 수 있으며 위치는 유연합니다.
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符%';·
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符_';
NULL입니다.
결과의 특정 필드가 null 값이 아니거나 아닌 결과를 필터링합니다 NULL
.
SELECT 字段名 FROM 表名 WHERE 字段名 IS [NOT] NULL;
뚜렷한
선택한 결과에서 중복 행 제거
SELECT DISTINCT 字段名 FROM 表名;
그리고 또는
SELECT 字段名 FROM 表名 WHERE 表达式1 AND 表达式2 [AND/OR] 表达式3 ;
논리적 관계를 사용하여 여러 필드에 대해 여러 필터 조건으로 결과를 필터링합니다 (예 : 170 세 이상이고 체중이 140 세 미만인 나를 찾기). 동일한 필드에 여러 조건이있는 경우 또는 사용하는 것이 좋습니다.
한도
쿼리 결과 수를 제한하는 데 사용됩니다.
SELECT 字段名 FROM 表名 LIMIT [OFFSET,] 记录数;
매개 변수 설명 :
- 첫 번째 매개 변수
OFFSET
인 선택적 매개 변수는 오프셋을 나타냅니다. 기본값이 지정되지 않은 경우0
쿼리 결과의 첫 번째 레코드에서 시작하고 오프셋이1
인 경우 쿼리 결과 의 두 번째 레코드에서 시작 함을 의미합니다. , 등등. - 두 번째 매개 변수 인 레코드 수는 반환 된 쿼리 결과 수를 나타냅니다.
ORDER BY 정렬
SELECT 字段名 FROM 表名 ORDER BY 字段名1 [ASC[DESC]];
필드 이름 1에 따라 오름차순 (ASE) 또는 내림차순 (DESC)으로 표시 ORDER BY 字段名1
합니다. 순서를 지정하지 않은 경우에만 기본적으로 오름차순이 사용됩니다.
그룹 쿼리 GROUP BY
쿼리는 레코드가 처음 나타나는 각 그룹 입니다.
SELECT 字段名 FROM 表名 GROUP BY 字段名;
같이
쿼리 결과에서 테이블 또는 열의 별칭을 지정하는 데 사용됩니다.
내부 조인 쿼리
- 두 테이블의 조인 조건을 충족하는 행만 결과 집합으로 결합되며이를 내부 조인이라고합니다.
- 키워드 :
[inner] join ... on
表1 [inner] join 表2 on 表1.字段=表2.字段
표 1에서 각 레코드를 꺼내서 표 2로 이동하여 모든 레코드를 일치시킵니다. 일치는 표 1과 표 2에서 특정 조건이 동일해야하며 결과는 최종적으로 유지되어야하며 그렇지 않으면 유지되지 않습니다. 내부 키워드는 생략하고 쓸 수 없습니다. on은 연결 조건을 나타냅니다. 조건 필드는 동일한 비즈니스 의미를 나타내며 대부분의 경우 두 테이블에서 기본 및 외래 키 관계입니다.
예 : 학생의 해당 수업 이름을 쿼리하면 수업이 없으면 찾을 수 없습니다.
외부 조인 쿼리
- 특정 테이블을 기본 테이블로 취하고 그 안의 모든 레코드를 꺼낸 다음 조건과 일치 할 수 있는지 여부에 관계없이 각각을 다른 테이블과 연결하면 결국 유지됩니다. 정확하게 일치하고 예약 할 수 있습니다. 일치 할 수없는 경우 다른 테이블의 필드는 공백 (
null
)이되며이를 외부 조인이라고합니다. - 외부 조인 쿼리는 왼쪽 외부 조인 쿼리와 오른쪽 외부 조인 쿼리로 나뉩니다.
表1 left/right [outer] join 表2 on 表1.字段=表2.字段
- 왼쪽 외부 조인 : 내부 조인을 기준으로 표 1의 조건을 충족하지 않는 모든 데이터 행을 포함하고 표 2의 열을 NULL로 채 웁니다. 오른쪽 외부 조인 : 내부 조인을 기준으로 표 2도 포함합니다. 조건을 충족하지 않는 모든 데이터 행은 표 1의 열 1에서 NULL로 채워집니다.
예 : 대학생에 해당하는 과정의 이름을 쿼리하면 선택한 과정이없는 과정의 결과가 NULL이거나 과정을 선택하지 않은 학생의 결과가 NULL입니다.
복합 쿼리
위를 결합하십시오. . . 함께 작전은 호랑이만큼이나 치열합니다.
하위 쿼리
SELECT에서 선택한 결과를 다른 SELECT의 데이터 소스로 사용
SELECT * FROM t1 WHERE col1=(SELECT col2 FROM t2);
하위 쿼리는 쿼리 내에 중첩되며 항상 괄호 안에 표시되어야합니다. 하위 쿼리는 다음 네 가지 범주로 나눌 수 있습니다.
- 스칼라 하위 쿼리 : 가장 단순한 형식 인 단일 값을 가진 스칼라를 반환합니다.
- Liezi 쿼리 : 결과 집합이 첫
N
번째 줄을 반환합니다 . - 행 하위 쿼리 : 반환 결과 집합은
N
열 행입니다 . - 테이블 하위 쿼리 : 반환 된 결과 집합은
N
OKN
열입니다.
키워드 하위 쿼리 ALL ANY SOME IN
모두
ALL은 비교 연산자의 뒷면에 연결되어야하며, 하위 쿼리가 모든 값을 반환 함을 나타냅니다 . 비교가 TRUE
반환 TRUE
됩니다. 일반적으로 가장 큰 것보다 크게, 가장 작은 것보다 작게 보는 데 사용됩니다.
어떤 일부
ANY
비교 연산자와 함께 사용하면 하위 쿼리에서 반환 된 값 과 비교할 TRUE
때 반환 된다는 의미 입니다 TRUE
. SOME
예 ANY
, 별칭은 일반적으로 덜 사용됩니다. 종종 가장 작은 것보다 큰 것을 찾는 데 사용
에
IN
지정된 값이이 세트에 있는지 여부를 의미합니다.있는 경우 반환TRUE
되고 그렇지 않은 경우 (item , item , ...)FALSE
과 동일 하게 반환됩니다 .IN
1
2
IN
가= ANY
별명은 모두 동일하지만,NOT IN
별명은하지 않습니다<> ANY
만<> SOME
.
함수
평균 평균
SELECT AVG(列名) FROM 表明;
오류 수집
오류 1046 (3D000) : 선택된 데이터베이스가 없습니다.
선택된 데이타베이스가 없습니다, use 数据库名称