MySQL의 멀티 테이블 쿼리 및 데이터 가져 오기

수석 MySQL을

외래 키 (외래 키)

  • 정의

    현재 테이블 필드의 값이 다른 테이블의 범위에서 선택하자

  • 문법

    foreign key(参考字段名)
    references 主表(被参考字段名)
    on delete 级联动作
    on update 级联动作
  • 사용 규칙

1 메인 테이블, 데이터 타입이 일치 필드로
2 주 참조 필드 테이블은 : 기본 키 일반적 KEY 1 종

표 1, 지불 정보 테이블 (금융)

id   姓名     班级     缴费金额
1   唐伯虎   AID19     300
2   点秋香   AID19     300
3   祝枝山   AID19     300
create table master(
    -> id int primary key,
    -> name varchar(20),
    -> class char(5),
    -> money decimal(6,2)
    -> )charset=utf8;

표 2 학생 정보 테이블 (교사) - 외래 키을

stu_id   姓名   缴费金额
  1     唐伯虎    300
  2     点秋香    300
create table slave(
    -> stu_id int,
    -> name varchar(20),
    -> money decimal(6,2),
    -> foreign key(stu_id) references master(id) on delete cascade on update cascade)
    -> charset=utf8;
  • ** 외부 키를 제거
alter table 表名 drop foreign key 外键名;
​外键名 :show create table 表名;
  • 캐스케이드 액션
cascade
​数据级联删除、更新(参考字段)
create table slave(
    -> stu_id int,
    -> name varchar(20),
    -> money decimal(6,2),
    -> foreign key(stu_id) references master(id) on delete cascade on update cascade)
    -> charset=utf8;

restrict(默认)
​从表有相关联记录,不允许主表操作
create table slave_2 (stu_id int,
    -> name varchar(20),
    -> money decimal(6,2),
    -> foreign key(stu_id) references master(id) on delete restrict on update restrict)
    -> charset = utf8;

set null
​主表删除、更新,从表相关联记录字段值为NULL
create table slave_3(stu_id int,
    name varchar(20),
    money decimal(6,2),
    foreign key (stu_id) references master(id) on delete set null on update set null)
    charset=utf8;
  • 기존 테이블을 외부 키를 추가
alter table 表名 add foreign key(参考字段) references 主表(被参考字段) on delete 级联动作 on update 级联动作

중첩 된 쿼리 (서브 쿼리)

정의

내부 쿼리 외층 조회 결과

구문

select ... from 表名 where 条件(select ....);

1、把攻击值小于平均攻击值的英雄名字和攻击值显示出来
        select name,attack from sanguo where attack <(select avg(attack)from country);
2、找出每个国家攻击力最高的英雄的名字和攻击值(子查询)
        select name,attack from sanguo where (attack,country) in (select country ,max(attack)from sanguo group by country);
 

다중 테이블 쿼리

SQL 스크립트 정보 : join_query.sql, 또는 아래의 코드를 복사

mysql -uroot -p123456
mysql>source /home/tarena/join_query.sql
create database if not exists db1 character set utf8;
use db1;

create table if not exists province(
id int primary key auto_increment,
pid int,
pname varchar(15)
)default charset=utf8;

insert into province values
(1, 130000, '河北省'),
(2, 140000, '陕西省'),
(3, 150000, '四川省'),
(4, 160000, '广东省'),
(5, 170000, '山东省'),
(6, 180000, '湖北省'),
(7, 190000, '河南省'),
(8, 200000, '海南省'),
(9, 200001, '云南省'),
(10,200002,'山西省');

create table if not exists city(
id int primary key auto_increment,
cid int,
cname varchar(15),
cp_id int
)default charset=utf8;

insert into city values
(1, 131100, '石家庄市', 130000),
(2, 131101, '沧州市', 130000),
(3, 131102, '廊坊市', 130000),
(4, 131103, '西安市', 140000),
(5, 131104, '成都市', 150000),
(6, 131105, '重庆市', 150000),
(7, 131106, '广州市', 160000),
(8, 131107, '济南市', 170000),
(9, 131108, '武汉市', 180000),
(10,131109, '郑州市', 190000),
(11,131110, '北京市', 320000),
(12,131111, '天津市', 320000),
(13,131112, '上海市', 320000),
(14,131113, '哈尔滨', 320001),
(15,131114, '雄安新区', 320002);

create table if not exists county(
id int primary key auto_increment,
coid int,
coname varchar(15),
copid int
)default charset=utf8;

insert into county values
(1, 132100, '正定县', 131100),
(2, 132102, '浦东新区', 131112),
(3, 132103, '武昌区', 131108),
(4, 132104, '哈哈', 131115),
(5, 132105, '安新县', 131114),
(6, 132106, '容城县', 131114),
(7, 132107, '雄县', 131114),
(8, 132108, '嘎嘎', 131115);
  • 데카르트 제품 (교차 연결)
select 字段名列表 from 表名列表; 
  • 다중 테이블 쿼리
select 字段名列表 from 表名列表 where 条件;
1、显示省和市的详细信息
   河北省  石家庄市
   河北省  廊坊市
   湖北省  武汉市
    select province.pname,city.cname from province,city where province.pid=city.cp_id;
2、显示 省 市 县 详细信息
        select province.pname,city.cname,county.coname from province,city,county 
        where province.pid=city.cp_id and city.cp_id=county.copid;

쿼리를 가입

  • 커넥터 (다중 테이블 쿼리의 결과, 일치하는 레코드를 표시)
select 字段名 from  表1 inner join 表2 on 条件 inner join 表3 on 条件;
eg1 : 显示省市详细信息
            select province.pname,city.cname from province inner join city on province.pid=city.cp_id;

eg2 : 显示 省 市 县 详细信息
            select province.pname,city.cname,county.coname from 
            province inner join city on province.pid=city.cp_id inner join county on city.cp_id=county.copid;
  • 외부 조인 왼쪽

메인 디스플레이 쿼리 결과의 왼쪽에 표

select 字段名 from 表1 left join 表2 on 条件 left join 表3 on 条件;
eg1 : 显示 省 市 详细信息(要求省全部显示)
            select province.pname,city.cname from province left join city on province.pid=city.cp_id;
  • 오른쪽 외부 조인

왼쪽과 연결 사용법, 주요 쿼리 결과는 오른쪽 테이블에 표시됩니다

select 字段名 from 表1 right join 表2 on 条件 right join 表3 on 条件;
        select province.pname,city.cname from province right join city on province.pid=city.cp_id;

데이터 가져 오기

== == 일반적인 단계를 파악

.SQL == == 소스 파일 이름

효과

데이터베이스로 가져온 파일 시스템의 내용
구문 (모드 1)

부하 데이터 INFILE "파일 이름"
테이블 이름 테이블 INTO
"구분"에 의해 종료 필드
"\ N-"종료 라인
대표적인
데이터베이스 DB2의 테이블에 scoretable.csv 파일

1、将scoretable.csv放到数据库搜索路径中
   mysql>show variables like 'secure_file_priv';
         /var/lib/mysql-files/
   Linux: sudo cp /home/tarena/scoreTable.csv /var/lib/mysql-files/
2、在数据库中创建对应的表
  create table scoretab(
  rank int,
  name varchar(20),
  score float(5,2),
  phone char(11),
  class char(7)
  )charset=utf8;
3、执行数据导入语句
load data infile '/var/lib/mysql-files/scoreTable.csv'
into table scoretab
fields terminated by ','
lines terminated by '\n'
4、练习
  添加id字段,要求主键自增长,显示宽度为3,位数不够用0填充
  alter table scoretab add id int(3) zerofill primary key auto_increment first;

구문 (두번째 방법)

소스 파일 이름 .SQL

데이터 내보내기

효과

데이터베이스 파일 시스템 테이블에 기록을 저장

구문

선택 ... 테이블 명으로부터
"파일 이름"OUTFILE으로
"분리"종료 필드
"분리"종료 라인;

연습

1、把sanguo表中英雄的姓名、攻击值和国家三个字段导出来,放到 sanguo.csv中
        select name,attack,country from sanguo 
        into outfile '/var/lib/mysql-files/sanguo.csv' 
        fields terminated by ',' 
        lines terminated by '\n';
2、将mysql库下的user表中的 user、host两个字段的值导出到 user2.txt,将其存放在数据库目录下
        select user,host from country 
        into outfile '/var/lib/mysql-files/user2.txt' 
        fields terminated by ',' 
        lines terminated by '\n';
 

주의

1、导出的内容由SQL查询语句决定
2、执行导出命令时路径必须指定在对应的数据库目录下

테이블 복사

==도 1은, 테이블은 == 실제 요구에 따라 데이터를 복사 할

== 2, 이상 복사하지 않습니다 == KEY 속성 복사 테이블

문법

create table 表名 select 查询命令;

연습

1、复制sanguo表的全部记录和字段,sanguo2
        create table sanguo2 select * from country.sanguo
        
2、复制sanguo表的 id,name,country 三个字段的前3条记录,sanguo4
        create table sanguo4 select id,name,country from country.sanguo limit 3;
        

주의

확장 공유

기존의 서브 테이블 루틴 :

사용자 ID : INT %의 표 번호

이름 : ASCII %에 나타난 수량

클래식의 경우 : 사용자 테이블 포인트 테이블

이 건물은 원래 테이블 키를 복사하지 않는 경우 테이블을 복사

복사 테이블 구조
false 여기서 선택 쿼리를 테이블 테이블 이름을 만들;

잠금 장치 (자동 잠금 및 잠금 해제)

== 전체 초점 잠금 이론과 분류 및 특성 ==

목적

충돌 클라이언트에게 동시 액세스를 해결

잠금 유형 분류

读锁(共享锁):select 加读锁之后别人不能更改表记录,但可以进行查询
写锁(互斥锁、排他锁):加写锁之后别人不能查、不能改

잠금 단위 분류

테이블 수준 잠금 :의 MyISAM
행 수준 잠금 : 이노

추천

출처www.cnblogs.com/-xiaolong/p/11477864.html