今日是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. P4135 作诗

    传送门 分块 设sum[ i ] [ j ] 存从左边到第 i 块时,数字 j 的出现次数 f [ i ] [ j ] 存从第 i 块,到第 j 块的一整段的答案 那么最后答案就是一段区间中几块整段的 ...

  2. 【手撸一个ORM】第十步、数据操作工具类 MyDb

    说明 其实就是数据库操作的一些封装,很久不用SqlCommand操作数据库了,看了点园子里的文章就直接上手写了,功能上没问题,但写法上是否完美高效无法保证,建议有需要的朋友自己重写,当然如果能把最佳实 ...

  3. linux目录权限

    linux中,有三种不同类型的用户可以对文件或目录进行访问:文件所有者,同组用户,其他用户.所有者一般是文件的创建者,文件所有者自动拥有对该文件的读.写和可执行权限.所有者能允许同组用户有权访问文件, ...

  4. C#在VS2005开发环境中利用异步模式来对一个方法的执行时间进行超时控制

    using System.Threading; using System; namespace ConsoleApplication4 { public class Program { static ...

  5. 图片单独上传 (word)

    Word.ApplicationClass wordApp=new ApplicationClass(); object file=path; object nullobj=System.Reflec ...

  6. myBatis执行测试批量删除,出现测试类正常显示,但数据库数据没变

    一般在测试myBatis运行正常,但数据库数据不变时,有可能是SQL语句有问题,检查SQL语句没问题,但数据库依然没变,就说明myBatis方法执行后并未提交到数据库,可尝试在测试类添加   sess ...

  7. WAS 查看服务状态

    进入目录下/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin 查看服务状态命令# ./serverStatus.sh 服务名 例如: [root@lo ...

  8. JS实现2048

    2048这个游戏是通过对二维数组的操作来实现的,其算法核心如下: (以一行左移为例) c从0开始,遍历当前行中的元素,到<CN-1(CN是一个常量,表示的是游戏格子的列数)结束,每次+1 找到当 ...

  9. 从零开始的全栈工程师——js篇2.10(对象与构造函数)

    对象与构造函数 一.js数据类型 基本数据类型:string   undefined   null  boolean  number 引用数据类型  Object  array  function 二 ...

  10. [转]Linux中如何读写硬盘上指定物理扇区

    读指定物理扇区: dd  if=<源设备>  of=<输出设备或文件>   skip=<指定扇区值>  bs=512 count=1 写指定物理扇区: dd   i ...