今日是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. Spark (Python版) 零基础学习笔记(二)—— Spark Transformations总结及举例

    1. map(func) 将func函数作用到数据集的每个元素,生成一个新的分布式的数据集并返回 >>> a = sc.parallelize(('a', 'b', 'c')) &g ...

  2. RandomAccesssFileTest

    package com.yd.wmsc.util; import java.io.IOException; import java.io.RandomAccessFile; public class ...

  3. 自定义ClassLoader加载class文件

    package com.yd.wmsc.util; public class Test { public void say(){ System.out.println("Say Hello& ...

  4. TcxGrid Column动态添加Image

    MyCol := TcxColumn.Create; ... MyCol.PropertiesClass := TcxImageProperties; ImageProps := TcxImagePr ...

  5. Mysql与Sql server,Sum函数跟Count函数

    两者均是统计类函数,都不计算NULL字段!!! 单纯计算行数的话,count的效率比sum的效率高 MySQL SUM()函数介绍 SUM()函数用于计算一组值或表达式的总和,SUM()函数的语法如下 ...

  6. 转 mysql 下载 以及安装

    https://blog.csdn.net/kerafan/article/details/78001849 一.MySQL 各个版本区别 ,(都需要编译的 ) 1.MySQL Community S ...

  7. PHPCMS的自增长标签

    设置幻灯片的时候,需要用到自增长ID. <div class="tt_pic"><img src="images/1.gif" />&l ...

  8. 浅谈堆-Heap(一)

    应用场景和前置知识复习 堆排序 排序我们都很熟悉,如冒泡排序.选择排序.希尔排序.归并排序.快速排序等,其实堆也可以用来排序,严格来说这里所说的堆是一种数据结构,排序只是它的应用场景之一 Top N的 ...

  9. sqlserver2008执行200M以上的大脚本文件,打开脚本总是报“未能完成操作,存储空间不足”

    用sqlcmd命令行工具. 1.win7下快捷键:win+R 2.输入cmd​,确定 3.输入命令:sqlcmd -S <数据库> -i C:\<数据文件>.sql 例:sql ...

  10. springboot集成freemarker 配置application.properties详解

    #配置freemarker详解 #spring.freemarker.allow-request-override=false # Set whether HttpServletRequest att ...