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>.什么是视图 视图就是一个虚拟的表,保存有实表的查询结果 ...
随机推荐
- re模块的小练习
1.匹配标签 1 import re 2 ret = re.search('<(?P<tag_name>\w+)>\w+</(?P=tag_name)>','< ...
- 如何查看 SQL Server 执行的历史 SQL 语句记录?
SELECT st.text as sql_statement, qs.creation_time as plan_last_compiled, qs.last_execution_time as p ...
- docker和Dockerfile
目录: 1.docker为什么会出现? 2.docker的理念 3.容器化技术 4.docker三要素 5.docker安装 6.docker帮助命令 7.Docker阿里云镜像加速器配置. 8.do ...
- jdk,jre下载安装
JDK安装https://blog.csdn.net/u012934325/article/details/73441617/jre需要手动生成在JDK安装目录下,的bin cmd执行bin\ jli ...
- CF D. Number Of Permutations 排列
挺水的一道题~ 拿全排列随便乘一下就好了. #include <cstdio> #include <algorithm> #define N 300004 #define ll ...
- 手动升级 Confluence 6 - 升级以后
7. 重新安装服务(仅针对 Windows) 如果你的 Confluence 安装实例在 Windows 中是以服务来运行的话,你需要删除已经存在的 Windows 服务,然后重新安装 Windows ...
- 用JavaScript实现div的鼠标拖拽效果
实现原理鼠标按下时根据onmousemove事件来动态获取鼠标坐标位置以此来更新div的位置,实现的前提时div要有一个定位效果,不然的话是移动不了它的. HTML <div class=&qu ...
- JS框架_(coolShow.js)图片旋转动画特效
百度云盘 传送门 密码:ble6 coolShow.js插件图片旋转动画效果 <!DOCTYPE HTML> <head> <meta http-equiv=" ...
- java 判断Map集合中包含指定的键名,则返回true,否则返回false。
public static void main(String[] args) { Map map = new HashMap(); //定义Map对象 map.put("apple" ...
- 在win7下,将QT集成到vs2010上
在网上查了很多,自己先是下载了一个5.2.0版本的,但在我的电脑上运行时老报错,一怒之下决定不再使用5.2.0版本的QT,而先择了更低版本的4.8.5版本,然后.....然后就成功了.谢天谢地,在这我 ...