认识mysql(4)
今日是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)的更多相关文章
- Hadoop 中利用 mapreduce 读写 mysql 数据
Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...
- mysql每秒最多能插入多少条数据 ? 死磕性能压测
前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...
- LINUX篇,设置MYSQL远程访问实用版
每次设置root和远程访问都容易出现问题, 总结了个通用方法, 关键在于实用 step1: # mysql -u root mysql mysql> Grant all privileges o ...
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- 闰秒导致MySQL服务器的CPU sys过高
今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图. 注意:他的生产环境是物理机,单个CPU,4个Core. 于是,他抓取了CP ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...
- 当忘记mysql数据库密码时如何进行修改
因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...
随机推荐
- Linux定时清理30天前的Tomcat日志脚本
一.在tomcat的log路径下新建.sh脚本文件clean.sh,内容如下:#!/bin/bashlogs_path="/mnt/tomcat/apache-tomcat-8.5.23/l ...
- 从HTML form submit 到 django response是怎么完成的
HTML form 里的数据是怎么被包成http request 的?如何在浏览器里查看到这些数据? 浏览器做的html数据解析 form里的数据变成name=value对在POST Body中 re ...
- C. Glass Carving 正着做或者倒着做都可以
http://codeforces.com/problemset/problem/527/C 这题总体思路就是,每画一条线,然后就找到x间距的最max值和y间距的最max值,相乘就是当前的ans 那么 ...
- HDU 4143 A Simple Problem 分解因式
求一个最小的正整数x,使得(y + x) (y - x) = n成立 考虑一下n的分解因式. 可能会想到枚举n的约数,那么a * b = n成立,取最小的x即可 但是要枚举到n / 2,这样会超时. ...
- JAVA多线程之线程池的使用
合理利用线程池能够带来三个好处. 第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行. 第三:提高线程 ...
- mysql日常使用总结(持续更新中)
记录一些日常的mysql常用的使用, 方便随用随查. 一.表结构 1.1 查看表结构 方式1: 可以查看建表语句,完整的表结构. show create table table_name; 方式2:可 ...
- 机器学习框架ML.NET学习笔记【3】文本特征分析
一.要解决的问题 问题:常常一些单位或组织召开会议时需要录入会议记录,我们需要通过机器学习对用户输入的文本内容进行自动评判,合格或不合格.(同样的问题还类似垃圾短信检测.工作日志质量分析等.) 处理思 ...
- 【Linux】linux压缩和解压缩命令大全
tar命令 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName gz命令 解压1:gunzip FileName.gz 解压2:gzip ...
- EF增删查改加执行存储过程和sql语句,多种方法汇总
ActionUrl c = new ActionUrl() { ActionName="test", RequestUrl="/123/123", SubTim ...
- 2 cmd中startup显示运行不了显示“不是内部或外部命令”
解决方案: 1 在C:\Windows\System32中检查cmd.exe是否存在(如果存在的话)(检查cmd.exe是否被误删) 2 在我的电脑——属性——环境变量——在系统变量找到Path编辑前 ...