데이터베이스 원칙 및 응용-MySQL 데이터 정의 및 운영 실제 전투 연구 노트

#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행입니다 .
  • 테이블 하위 쿼리 : 반환 된 결과 집합은 NOK N열입니다.

키워드 하위 쿼리 ALL ANY SOME IN

모두

ALL은 비교 연산자의 뒷면에 연결되어야하며, 하위 쿼리가 모든 값을 반환 함을 나타냅니다 . 비교가 TRUE반환 TRUE됩니다. 일반적으로 가장 큰 것보다 크게, 가장 작은 것보다 작게 보는 데 사용됩니다.

어떤 일부

ANY비교 연산자와 함께 사용하면 하위 쿼리에서 반환 된 과 비교할 TRUE때 반환 된다는 의미 입니다 TRUE. SOMEANY, 별칭은 일반적으로 덜 사용됩니다. 종종 가장 작은 것보다 큰 것을 찾는 데 사용

  • IN지정된 값이이 세트에 있는지 여부를 의미합니다.있는 경우 반환 TRUE되고 그렇지 않은 경우 (item , item , ...) FALSE과 동일 하게 반환됩니다 .IN12
  • IN= ANY별명은 모두 동일하지만, NOT IN별명은하지 않습니다 <> ANY<> SOME.

함수

평균 평균

SELECT AVG(列名) FROM 表明;

오류 수집

오류 1046 (3D000) : 선택된 데이터베이스가 없습니다.

선택된 데이타베이스가 없습니다, use 数据库名称

추천

출처blog.csdn.net/weixin_43031092/article/details/106032052