mariadb数据库——关联、视图、事务、索引、外键
1.关联
1)连接查询(内关联)
inner join ... on
两个表连接查询
select * from students inner join classes
查询能够对应班级的学生以及班级信息
select * from students inner join classes on students.cls_id=classes.id;
按照要求显示姓名,班级
select students.*, classes.name from students inner join classes on students.cls_id=classes.id;
给数据表起名字
select s.name, c.name from students as s inner join classes as c on s.cls_id=c.id;
查询 有能够对应班级的学生以及班级信息,显示学生的所有信息,只显示班级名称
select students.*, classes.name from students inner join classes on students.cls_id=classes.id;
在以上查询中将班级姓名显示在第一列
select classes.name,students.* from students inner join classes on students.cls_id=classes.id;
查询有能够对应班级的学生以及班级信息,按照班级进行排序
select classes.id, students.* from students inner join classes on students.cls_id=classes.id order by classes.id;
当是同一个班级的时候,按照学生的id从小到大
select classes.id, students.* from students inner join classes on students.cls_id=classes.id order by classes.id, students.id;
2)连接查询(左关联,右关联)
左关联,以左边表为基准,条件对应不上的显示null
select * from students left join classes on students.cls_id=classes.id;
右关联,以后边为基准,条件对应不上的显示null
select * from classes left join students on students.cls_id=classes.id;
3)自关联
查询出河北省所有市
select province.name,city.name from areas as province inner join areas as city on province.aid=city.pid having province.name='河北省';
子查询
标量子查询
查询出北京市所有区的信息
select * from areas where pid in (select aid from areas where name='北京市');
2.视图
比如将一个user表拆分成usera表和userb表,如果再去调用user表就会显示user不存在,就需要创建视图
1)视图的本质就是对查询的封装
create view v_info as select students.*,classes.name as class from students inner join classes on classes.id=students.cls_id;
2)删除视图
drop view v_info;
3)使用视图(只用来查询)
select * from v_info;
3.事务
1)特点
原子性(atomicity):事务内的所有操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
一致性(consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态
隔离性(isolation):一个事物所做的修改在最终提交之前,对其他事物是不可见的
持久性(durabulity):事务完成后,该事务内涉及的数据必须持久性的写入磁盘保证其持久性。
2)命令
begin 开启事务
commit 提交事务
rollback 回滚事务 delete操作可回滚,truncate操作不可回滚
3)关闭自动提交事务
set autocommit=0; 临时关闭
vim /etc/my.cnf.d/server.cnf 修改配置文件重启后永久生效
[server]
autocommit=0
4.索引
1)添加索引
create index index_name on students(name);
2)查看索引
show index from students;
3)删除索引
drop index index_name on students;
4)测试时间
set profiling=1;#打开sql语句执行时间
show profiles;#查看sql执行时间
5.外键
如果一个实体的某个字段指向另一个实体的主键,就称为外键。被指向的实体,称之为主实体(主表),也叫父实体(父表)。负责指向的实体,称之为从实体(从表),也叫子实体(子表)。
对关系字段进行约束,当为从表中的关系字段填写值时,会到关联的主表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并报错。
1)创建外键
将学生的cls_id字段指向班级的id字段并设置级联删除功能
alter table students add constraint fk_students foreign key (cls_id) references classes(id) on delete cascade;
2)删除外键
alter table students drop foreign key fk_students;
6.第三方软件连接数据库
1)允许root用户在任意主机登录
grant all privileges on *.* to root@'%' identified by 'root';
2)使用Navicat连接数据库
3)使用Python解释器连接,需要pymysql模块
import pymysql
db = pymysql.connect(host="192.168.254.10", user="root",
password="root", db="testdb", port=3306)
cur = db.cursor()
for i in range(100000):
cur.execute("insert into test_table values (0,'name-%s','title-%s')" % (i,i))
db.commit()
result = cur.fetchall()
print(result)
4)利用shell终端执行命令
mysql -uroot -proot -e "show databases;"
mariadb数据库——关联、视图、事务、索引、外键的更多相关文章
- mariadb 视图 事务 索引 外键
视图 对于复杂的查询,在多个地方被使用,如果需求发生了改变,需要更改sql语句,则需要在多个地方进行修改,维护起来非常麻烦 假如因为某种需求,需要将user拆房表usera和表userb,该两张表 ...
- MariaDB 连接查询,视图,事物,索引,外键
1.连接查询 --创建学生表 create table students ( id int unsigned not null auto_increment primary key, name var ...
- mysql(视图 事务 索引 外键)
视图 视图本质就是对查询的封装 创建视图(定义视图 起名以v_开头) create view v_students as select classes.name as c_name ,stud ...
- mariadb(四)连接查询,视图,事物,索引,外键
一.连接查询 1)进入自己创建的zz数据库 2)创建学生表: create table students ( id int unsigned not null auto_increment prima ...
- MySQL 视图 事务 索引 外连接
视图 1.定义 select 语句的结果集,是一张虚拟的表2.创建视图语句create view 视图名 as select语句3.查看视图show views;4.使用视图select * from ...
- day38:MySQL数据库之约束&索引&外键&存储引擎
目录 part1:数据类型 part2:约束 part3:主键索引 PRI &唯一索引 UNI &普通索引 MUL part4:外键:foreign key part5:在外键中设置联 ...
- mysql字段约束-索引-外键---3
本节所讲内容: 字段修饰符 清空表记录 索引 外键 视图 一:字段修饰符 (约束) 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table wo ...
- Oracle数据库之视图与索引
Oracle数据库之视图与索引 1. 视图简介 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改. 视图基于的表称为基表,视图是存储在数据字典里的一条SE ...
- SQL删除数据库里所有表的外键,同时删除所有用户表
SQL删除数据库里所有表的外键,同时删除所有用户表 删除所有的用户表的外键,直接将下面的代码拷贝到数据库里执行即可: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- MySQL/MariaDB数据库的视图(VIEW)
MySQL/MariaDB数据库的视图(VIEW) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.视图概述 1>.什么是视图 视图就是一个虚拟的表,保存有实表的查询结果 ...
随机推荐
- Java技术综述
自己打算好好学习下Java,所以想先明晰Java开发中到底有哪些技术,以便以后学习的过程中,可以循序渐进,随着学习的深入,本文将不断更新. Java基础教程将Java的入门基础知识贯穿在一个实例中,逐 ...
- Django+BootstrapTable实现表格分页
models.py: from django.db import models # Create your models here. class Article(models.Model): titl ...
- docker运用
由于目前工作中不使用docker 时间长了,下一个项目中要使用docker ,记录一下docker的运用 1:docker的部署 yum install -y yum-utils device-map ...
- [人物存档]【AI少女】【捏脸数据】气质学生
点击下载(城通网盘): AISChaF_20191119010459547.png
- shiro之缓存
1 细说shiro之七:缓存:https://www.cnblogs.com/nuccch/p/8044226.html 2 Shiro缓存使用Redis.Ehcache.自带的MpCache实现的三 ...
- POJ 3061 Subsequence 尺取法 挑战146页
---恢复内容开始--- Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10487 Accept ...
- sh_05_列表遍历
sh_05_列表遍历 name_list = ["张三", "李四", "王五", "王小二"] # 使用迭代遍历列表 ...
- 【BZOJ3545&BZOJ3551】Peaks(kruskal重构树,主席树,dfs序)
题意:在Bytemountains有N座山峰,每座山峰有他的高度h_i. 有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走, 现在有Q组询问,每组询问询问从点v开始只 ...
- Linux 简单打印日志(二)
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> //# ...
- Vue学习日记(二)——Vue核心思想
前言 Vue.js是一个提供MVVM数据双向绑定的库,其核心思想无非就是: 数据驱动 组件系统 数据驱动 Vue.js 的核心是一个响应的数据绑定系统,它让数据与DOM保持同步非常简单.在使用 jQu ...