今日是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. hive_hiveserver2 hive-site.xml config and start

    hive-site.xml # vi hive-site.xml <configuration> <property> <name>javax.jdo.option ...

  2. Unity Gizmos绘制指定长宽的网格

    using UnityEngine; using System.Collections; public class GridMap : MonoBehaviour { ; //宽度 ; //长度 vo ...

  3. JS文本框输入限制

    1上面的文本框只能输入数字代码(小数点也不能输入): CODE: <input onkeyup="this.value=this.value.replace(/\D/g,'')&quo ...

  4. Javascript学习笔记-一些关键点

    Javascript学习笔记-一些关键点 Table of Contents 1. 调试 2. == vs === 3. 两种函数声明 4. 技术感悟 1 调试 现在的主流浏览器都提供了开发者模式,可 ...

  5. es6-Iterator与for...of

    Iterator(遍历器)的概念 JavaScript原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6又添加了Map和Set.这样就有了四种数据集合,用户还可以组合 ...

  6. bootstrapValidator 如何重新启用提交按钮

    bootstrapValidator 使用中,由于字段检查等原因,致使提交按钮失效.如何重新启用提交按钮呢? 下面一句代码可以实现启用提交按钮: $('#loginForm').bootstrapVa ...

  7. 【Shell脚本学习24】Shell输入输出重定向:Shell Here Document,/dev/null文件

    Unix 命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示.一般情况下,标准输入设备就是键盘,标准输出设备就是终端,即显示器. 输出重定向 命令的输出不仅可以 ...

  8. CentOS下内核TCP参数优化配置详解

    主动关闭的一方在发送最后一个ACK后就会进入TIME_WAIT状态,并停留2MSL(Max Segment LifeTime)时间,这个是TCP/IP必不可少的. TCP/IP的设计者如此设计,主要原 ...

  9. 域名设置A记录或CNAME记录,但无法被解析,可能是因为状态为:clientHold

    解决方案: 访问https://whois.aliyun.com/查询域名状态是否为“注册商禁止解析”: 若是,联系注册商根据对方要求进行操作以便解除. https://icann.org/epp#c ...

  10. NSAutoreleasePool & thread

    https://developer.apple.com/documentation/foundation/nsautoreleasepool An object that supports Cocoa ...