今日是MySQL的第四篇,难度会稍微加大,加油!

开始吧!

1、外键(foreign  key)

  1.定义:让当前表字段的值在另一个表的范围内选择

  2.语法:

    foreign key(参考字段名)

    references 主表(被参考字段名)

    on   delete  级联动作

    on   update  级联动作 

  以上的语法连在一起看

  3.使用规则

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

    主表被参考字段:主键

  4.示例

    表1、缴费信息表(财务)

      id  姓名  班级  缴费金额

      1  唐伯虎  AD06  300

      2  点秋香  AD06  200

      3  祝枝山  AD06  100

    表2、学生信息表(班主任)

      id 姓名 缴费金额

      1 唐伯虎 300

      2 点秋香 260

      3   xxx    xxx

      ....................

    创建表

    表1(主表)

      create table jftab(
      id int primary key,
      name varchar(15),
      class char(5),
      money int
      );

    插入数据

      insert into jftab values
      (1,"唐伯虎","AD06",300),
      (2,"点秋香","AD06",260),
      (3,"祝枝山","AD06",250);

    表2(从表)     

      create table bjtab(
      stu_id int,
      name varchar(15),
      money int,
      foreign key(stu_id) references jftab(id)
      on delete cascade
      on update cascade
      );

    插入数据

      insert into bjtab values

      (1,"唐伯虎",300),(2,"点秋香",260);

  5、删除外键

    alter  table  表名  drop  frreign  key  外键名;

    查看外键:show  create  table  表名;

  6、级联动作

    cascade

    数据级联删除、更新(参考字段)

    restrict(默认)

    从表有相关联记录,不允许主表操作

    set  null

    主表删除、更新,从表相关联记录字段值为NULL

  7、已有表添加外键

  alter  table  表名  add  for  foreeign  key(参考字段)  references  主表(被参考字段)

  on delete ...

  on  update ...

2、表的复制

  1.复制MOSHOU.sanguo的全部记录和字段到sanguo2

  create table sanguo2 select * from MOSHOU.sanguo;

  2.复制MOSHOU.sanguo表的前3条记录,sanguo3

  create table sanguo3

  select * from MOSHOU.sanguo limit 3;

  3.复制MOSHOU.sanguo表的id,name,country三个字段的前5条记录,sanguo4

  create table sanguo4

  select id,name,country from MOSHOU.sanguo limit 5;

   复制表结构

   create table 表名 select * from 表名 where false;

  注意:

   复制表的时候不会把原表的键(key)属性复制过来

3、嵌套查询

  定义 :把内层的查询结果作为外层的查询条件

  语法格式

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

  示例

    把攻击值小于平均攻击值的英雄名字和攻击值显示出来   

      1、先计算平均值

      select avg(gongji) from MOSHOU.sanguo;

      2、找到 < 平均值

      select name,gongji from MOSHOU.sanguo

      where gongji<平均值;

    子查询:

      select name,gongji from MOSHOU.sanguo

      where

      gongji<(select avg(gongji) from  MOSHOU.sanguo);

  2、找出每个国家攻击力最高的英雄的名字和攻击值

    select name,gongji from sanguo where

    gongji in(select max(gongji) from sanguo  group by country);

4、多表查询

  select 字段名列表 from 表名列表; (笛卡尔积)

  1、显示省和市的详细信息

  河北省 石家庄市
  河北省 廊坊市
  湖北省 武汉市

  select sheng.s_name,city.c_name from sheng,city

  where
  sheng.s_id=city.cfather_id;

  2、显示省市县详细信息

  select sheng.s_name as sheng,city.c_name as city,xian.x_name as xian from sheng,city,xian
  where
  sheng.s_id=city.cfather_id and
  city.c_id=xian.xfather_id;

5、连接查询 

  内连接 

  1.语法格式

    select 字段名 from
    表1 inner join 表2 on 条件
    inner join 表3 on 条件;

  2、显示省市详细信息

    select sheng.s_name,city.c_name from sheng
    inner join city on sheng.s_id=city.cfather_id;

  3、显示省市县详细信息  

    select sheng.s_name,city.c_name,xian.x_name from
    sheng inner join city
    on sheng.s_id=city.cfather_id
    inner join xian
    on city.c_id=xian.xfather_id;

  2、外连接

    以 左表 为主显示查询结果

    select 字段名 from 表1 left join 表2 on 条件

    left join 表3 on 条件;

    显示省市详细信息

    select sheng.s_name,city.c_name from sheng

    left join city

    on sheng.s_id=city.cfather_id;

    右连接

    用法同左连接,以右表为主显示查询结果

6、数据备份(mysqldump,在Linux终端中操作)

  命令格式

    mysqldump  -u用户名  -p  源库名  > ~>***.sql

  源库名的表示方式

  --all-databases  备份所有库

  -B 库1 库2 库3   备份多个库

  库名 表1 表2 表3 备份指定库的多张表

  示例:

    备份所有库,放到 mydata 目录下:all.sql

    mysqldump -uroot -p --all-databases > all.sql

    备份 db4 库中的 sheng city xian 三张表,scx.sql

    mysqldump -uroot -p db4 sheng city xian > scx.sql

    备份 MOSHOU 和 db4 库, md.sql

    mysqldump -uroot -p -B MOSHOU db4 > md.sql

    备份 db4 库, db4.sql

    mysqldump -uroot -p db4 > db4.sql

7、数据恢复

  1、命令格式(Linux终端)

  mysql -uroot -p 目标库名 < ***.sql

  2、从所有库备份中恢复某一个库(--one-database)

  mysql -uroot -p --one-database 目标库名 < all.sql

  mysql -uroot -p --one-database db4 < all.sql

8、mysql的用户账户管理

  1、开启MySQL远程连接  

    1、sudo -i
    2、cd /etc/mysql/mysql.conf.d/
    3、subl mysqld.cnf
      #bind-address = 127.0.0.1 ctrl + s保存  ----此行为注释
    4、/etc/init.d/mysql restart

  2、添加授权用户

    用root用户登录mysql

    mysql -uroot -p123456

    授权:   

      grant 权限列表 on 库.表 to "用户名"@"%"
      identified by "密码" with grant option;   

    权限列表:all privileges 、select 、insert
    库.表 : *.* 所有库的所有表

  3、示例
    1、添加授权用户tiger,密码123,对所有库的所有表有所有权限
    grant all privileges on *.* to "tiger"@"%" identified by "123" with grant option;
    2、添加用户rabbit,对db4库有所有权限
    grant all privileges on db4.* to "rabbit"@"%" identified by "123" with grant option;

本小结完!

认识mysql(4)的更多相关文章

  1. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  2. mysql每秒最多能插入多少条数据 ? 死磕性能压测

    前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...

  3. LINUX篇,设置MYSQL远程访问实用版

    每次设置root和远程访问都容易出现问题, 总结了个通用方法, 关键在于实用 step1: # mysql -u root mysql mysql> Grant all privileges o ...

  4. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  5. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  6. 闰秒导致MySQL服务器的CPU sys过高

    今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图. 注意:他的生产环境是物理机,单个CPU,4个Core. 于是,他抓取了CP ...

  7. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  8. Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

    将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...

  9. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  10. 当忘记mysql数据库密码时如何进行修改

    因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...

随机推荐

  1. noi省选 [九省联考2018]一双木棋题解(状压dp)

    比浙江简单多了........ 题目转送:https://www.luogu.org/problemnew/show/P4363 分析: 我们注意到n和m都很小,考虑一下状压dp. 显然,棋子摆成的形 ...

  2. Python 简单的方法爬取b站dnf视频封面

    import urllib.request cnt=0 def instr(keystr): st=keystr.find('(')+1 strhtml=keystr[st:len(keystr)-1 ...

  3. 装饰器(Decorator)模式

    public interface IDoThings { public void doSomeThing(); } public class DoThings implements IDoThings ...

  4. myeclipse 上安装 Maven

    myeclipse 上安装 Maven3   环境准备: JDK 1.6 Maven 3.0.4 myeclipse 8.6.1 安装 Maven 之前要求先确定你的 JDK 已经安装配置完成.Mav ...

  5. Scrapy(爬虫应用框架)安装配置

    运行平台:Windows Python版本:Python3.x 一.Scarpy 简介 Scrapy是一个为了爬取网站数据提取结构性数据而编写的应用框架,可以应用于数据挖掘,信息处理或存储历史数据等一 ...

  6. Zipkin — 微服务链路跟踪.

    一.Zipkin 介绍 Zipkin 是什么?  Zipkin的官方介绍:https://zipkin.apache.org/  Zipkin是一款开源的分布式实时数据追踪系统(Distributed ...

  7. 【Java密码学】用Java数字签名提供XML安全

    简介 众所周知,XML在产品和项目开发中起着非常重要的作用.通过XML文档可以获取很多信息,还可以使用XML文件进行CRUD(增加.查询.更新和删除)操作.然而值得注意的是,我们如何确保XML中的数据 ...

  8. setInterval 函数

    间隔指定的毫秒数不停地执行指定的代码 setInterval函数参数 codes -- 代码段的字符串表示(与eval函数的参数相同),或者是匿名函数.函数名 interval -- 间隔的毫秒数 s ...

  9. 面向对象设计与构造:oo课程总结

    面向对象设计与构造:OO课程总结 第一部分:UML单元架构设计 第一次作业 UML图 MyUmlInteraction类实现接口方法,ClassUnit和InterfaceUnit管理UML图中的类和 ...

  10. html的语法 3

    <html> <head> <title>这是第一节课网页标题</title> <!--meta charset="UTF-8" ...