MySQL高级

外键(foreign key)

定义

让当前表字段的值在另一个表的范围内选择

语法

foreign key(参考字段名)

references 主表(被参考字段名)

on delete 级联动作

on update 级联动作

使用规则

1、主表、从表字段数据类型要一致

2、主表被参考字段 :KEY的一种,一般为主键

示例

表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

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;

数据导入

==掌握大体步骤==

==source 文件名.sql==

作用

把文件系统的内容导入到数据库中

语法(方式一)

load data infile "文件名"

into table 表名

fields terminated by "分隔符"

lines terminated by "\n"

示例

scoretable.csv文件导入到数据库db2的表

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;

语法(方式二)

source 文件名.sql

数据导出

作用

将数据库中表的记录保存到系统文件里

语法格式

select ... from 表名

into outfile "文件名"

fields terminated by "分隔符"

lines terminated by "分隔符";

练习

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 % 表数量

经典案例:用户表分表

复制表的时候不会把原有表的 KEY 属性复制过来

复制表结构

create table 表名 select 查询命令 where false;

锁(自动加锁和释放锁)

==全程重点,理论和锁分类及特点==

目的

解决客户端并发访问的冲突问题

锁类型分类

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

写锁(互斥锁、排他锁):加写锁之后别人不能查、不能改

锁粒度分类

表级锁 :myisam

行级锁 :innodb

mysql 查询导入的数据_MySql多表查询及数据导入相关推荐

  1. mysql查询不同库的数据_MySQL不同表查询,不同数据库查询

    (内容比较弱~欢迎大神们指点~) 在MySQL中~要实现不同表的查询和不同数据库的查询,首先得有地方查吧 1.建立数据库 create databaes test; use test; create ...

  2. mysql 修改某列数据_mysql修改表某列数据问题

    2012-11-02 回答 下面列出: 1.增加一个字段 alter table user add column new1 varchar(20) default null; //增加一个字段,默认为 ...

  3. mysql中数据表如何关联_mysql 如何导入/导出2个关联表中的数据

    mysql 怎么导入/导出2个关联表中的数据 表一 id student 1 S1 2 S2 表二 id sid scord order 1 1 100 1 2 1 60 2 3 1 80 3 4 2 ...

  4. mysql同步三张表如何用事务_MySQL 多表查询与事务的操作

    表连接查询 什么是多表查询 # 数据准备 # 多表查询的作用 * 比如:我们想查询孙悟空的名字和他所在的部门的名字,则需要使用多表查询 # 如果一条 SQL 语句查询多张表,因为查询结果在多张不同的表 ...

  5. MySQL从入门到精通:多表查询的灵活运用_02

    我是 ABin-阿斌:写一生代码,创一世佳话,筑一揽芳华. 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦. 上一篇:MySQL从入门到精通:基本语法介绍与使用_01 下一篇:MySQL从 ...

  6. 数据库应用——DQL查询数据(连表查询 子查询 详细案例)

    DQL查询数据 DQL Select完整的语法 练习用的sql脚本 指定查询字段 where 条件子句 连表查询(重要) 三种join的比较 连表查询练习 自连接 分页和排序 子查询 分组和过滤 DQ ...

  7. Mysql数据库基本操作(七)多表查询-子查询,表自身关联查询

    多表查询还有前面的两块内容--内连接查询,外连接查询,希望看到这篇博客的朋友先去看看我的"Mysql数据库"专栏中Mysql数据库基本操作(六)多表查询-内连接,外连接这一章博客, ...

  8. Mysql数据库基本操作(六)多表查询-内连接查询,外连接查询

    数据准备 use mydb3 ; --创建部门表 create table if not exists dept3 ( deptno varchar (20) primary key , --部门号 ...

  9. JavaWeb学习笔记(数据库、SQL语句、数据查询语法、完整性约束、编码、备份和恢复数据、多表查询)

    数据库.SQL语句.数据查询语法.完整性约束.编码.备份和恢复数据.多表查询 JavaWeb学习笔记 数据库 数据库概念 基本命令 启动和关闭mysql服务器 客户端登录退出mysql SQL语句 S ...

最新文章

  1. java 内存泄露对象排查_记录一次 java内存泄漏的排查
  2. django model filter_Django分表的两个方案
  3. 图的表达与遍历--邻接矩阵和邻接表
  4. MFC开发IM-第二十二篇、C++中 Unicode 与 UTF-8 编码互转
  5. sql limit不接具体数字_SQL汇总函数和分组函数
  6. android studio - 解决Android Studio不停的Indexing的问题
  7. 如何获取ezui tree 所有子节点
  8. threejs 热力图做成材质_脉冲滤筒除尘器滤芯的材质
  9. linux gt240驱动下载,NVIDIA官方发布Linux 256.53正式版驱动
  10. 火狐浏览器复制网页文字_从Firefox中的网页链接的多种“复制”格式中选择
  11. 个人银行账户管理程序(C++)
  12. easyui filebox+ajaxfileupload实现异步上传
  13. DVB-subtitle解析流程浅
  14. 前端之扇形图实现案例
  15. BZOJ 1124 [POI2008]枪战Maf 贪心+乱搞
  16. python爬取表格指定列_Chrome爬取网页上表格某列的数据
  17. HTML骨架和基本语法
  18. vue路由小妙招用法
  19. abb机器人离线编程软件解密_一文看懂最新机器人离线编程软件【详细】
  20. 带平滑功能的斜坡函数(多段曲线控温纯S型曲线SCL源代码+完整算法分析)

热门文章

  1. 力扣报错runtime error: load of null pointer of type ‘int‘解决思路
  2. STM32 HAL库 PWM+DMA 驱动WS2812B彩灯(STM32F030F4P6)
  3. Attention-Aware Compositional Network for Person Re-identification(行人识别组合网络+AACN)阅读笔记
  4. c语言转本买iPad还是笔记本,对于考研党,是买个笔记本还是平板?简单分析一下!...
  5. /deep/和::v-deep和>>>
  6. 胡侃学习(理论)计算机
  7. Stanford CS144: Lab 4
  8. 日企发售首款机器人拖拉机 机器人农机元年开启?【楚才国科】
  9. 域自适应实战coding
  10. sqlserver存储过程加锁后怎么解锁_安全锁和仓库存储绑银、银子功能发布预告