数据库变量

 
数据库的两个目录
  数据存放目录:/var/lib/mysql/     配置文件目录:/etc/my.cnf.d/
查看数据库的变量
  show global variables like '%pro%';
  show session variables like '%pro%';
  set session profiling=1;
  show session variables like '%pro%';
  --session变量只在会话层生效,退出会话再进入数据库那么配置就会失效。
  --global变量在全局生效,但是重启数据库之后会失效,要想永久生效需要将参数设定写入到配置文件之中。
  --将想要设置的变量值写到配置文件的[server]之下即可,这里需要注意的是:并不是所有的变量写到配置文件里都能生效。
  show global variables like '%buffer_pool%';
  set @@global.profiling=1;
  set global profiling=0;
  --不接global默认修改session,修改全局变量需要加上global。
 
  --状态变量
  用来保存mysqld运行中的统计数据的变量,状态变量没有办法修改。
  show global status;
  show session status;
  show table status like 'students';  #查看表的状态
 

关联查询

 
表的自关联
  create table areas(
    aid int primary key auto_increment,
    name varchar(22),
    pid int
  );
  show tables;
  source areas.sql;  #将sql语句要插入的内容写到文件中,放到连接数据库时所在的工作目录之中,执行source即可。
                #确保已经切换到该表所在的库。
  --自关联查询使用inner join
    select * from areas as province inner join areas as city on province.aid=city.pid having name='河北省';
  --查询出河北省的所有市
    select province.name,city.name from areas as province inner join areas as city on province.aid=city.pid having provine.name='河北省';
    select * from areas as p inner join areas as c on p.aid=c.pid;
    select * from areas as p inner join areas as c on p.aid=c.pid having p.name='北京市';
 
  --子查询
    select aid form areas where name='北京市';
    select * from areas where pid=1;
  合并:
    select * from areas where pid=(select aid from areas where name='北京市');
    #可以联合多个inner join,嵌套多层。不过结构可能需要慎重考虑。
 
表的关联查询
  #windows路由跟踪tracert www.baidu.com
  select * from students;
  select * from classes;
  select * from students inner join classes on students.cls_id=classes.id;
  select students.name,classes.name from students inner join classes on students.cls_id=classes.id;
  select classes.name as class,students.name from students inner join classes on students.cls_id=classes.id order by class;
  --左右关联查询
  select * from classes left join students on calsses.id=students.cls_id;   #以classes为基准
  select * from students left join classes on classes.id=students.cls_id;   #以students为基准,没有班级的学生班级为空
  --left join 和 right join 相当于调换位置。
  select * from students right join classes on classes.id=students.cls_id;
  --关联查询只是查询,并没有真正将两张表真正关联起来。
  --外键:真正将两张表关联起来。
  select * from classes inner join students on students.cls_id=classes.id;        #使用where也可以,但有时会报错。
  select classes.name,students.name from classes inner join students on students.cls_id=classes.id;
  select calsses.name,students.name from classes inner join students on students.cls_id=classes.id order by classes.name;
  select classes.name,students.name from classes right join students on classes.id=students.cla_id order by classes.name;
  --以students为基准 classes没有的为null
  select c.name,s.name from classes as c right join students as s on c.id=s.cls_id order by c.name;
  --多个inner join,如果c.id=b.id=a.id 写成:c.id=b.id and b.id=a.id
 

视图

--定义试图建议使用v_开头,为了将视图和表做出区分。
  create view 视图名称 as select语句;
--查看视图
  show tables;       #会将所有的视图也列出来
  show table status like 'v_test';
--删除视图
  drop view 视图名称;
  drop view v_test;
--视图的用处就是查询,简化sql语句。视图只能用于查询,不能用于增删改查。
  select classes.name,students.name from students inner join classes on students.cls_id=classes.id;
--创建视图
  create view v_info as select c.name as c_name,s.name as s_name from students as s inner join calsses as c on s.cls_id=c.id;
--如果两个colume都是name那么会报重复的错误,所以起一个别名。
  select * from v_info;
--视图只能查询,无法实现增删改查。
 

事物

事物具有ACID特性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durabulity)。
要求:表的引擎类型必须是innodb类型才可以使用事物,这是mysql表的默认引擎。
开启事物:begin 或者 start transaction;
关闭事物(提交或者回滚):commit或者rollback
如果你是通过第三方来操作数据库,比如pymysql,那么是默认开启事物的,操作结束之后一定记得commit。
开启事物之后使用delete删除,rollback可以回滚。但是使用truncate删除后rollback是恢复不了的。
也只有在事物里面才能回滚。如果没有开启事物或者已经commit了,那么就不能rollback了.
  show variables like '%commit%';
  --默认是开启autocommit,执行一条sql语句自动commit。
数据库的变量影响着数据库的性能,数据库的调优也是对变量的设置。
如果将变量autocommit设置为0,那么你的操作需要commit才能生效。
可以使用set:全局变量、session变量,也可以写入配置文件:
[server]
autocommit=0
然后重启数据库才能生效。
使用配置文件更改这种变量是永久型的,使用set是临时型的,global——是重启数据库失效,session——退出当前会话失效。
 
 

索引

 
对于索引而言只是用于大量的查询,如果涉及大量的增删改可能事与愿违.
主键默认有索引的作用,索引可以加快查询的速度,但也不是越多越好,如果数据库涉及大量的增删改的话,修改数据的同时也要对对应的索引
进行修改,因此会大量降低数据库的性能。
 
--创建索引
 方式一、在创建表的时候创建索引
    create table index(
      id int primary key,
      name varchar(22),
      age int,
      key (age)
    );
 方式二、在已经存在的表上创建索引
    create index 索引名称 on 表名(字段名)
    create index age_index on index(age);
--查看索引
   show index from 表名;
--删除索引
   drop index 索引名称 on 表名;
 
--索引能降低查询的时间,加快查询的速度
--可以使用时间测试来检测
   set profiling=1;  #打开sql语句的执行时间
   show profiles;   #查看sql执行时间
  create table test_table (id int primary key auto_increment,name varchar(20),title varchar(20));
  desc test_table;
--循环插入数据之后设置参数
  set profiling=1
  select * from test_table where 'name=name-88888';
  show profiles;
  create index name_index on test_table(name);
  select * from test_table where 'name=name-88888';
  show profiles;
--会发现查询的时间大大缩短了,查询的性能更优。
 
 

外键foreign key

 
外键:如果一个实体的某个字段指向了另一个实体的主键,就称之为外键。
--添加外键
  alter table students add constraint fk_students foreign key (gid) references grade(gid) on delete cascade;
--查看外键
  show create table 表名;
  alter table students drop foreign key 外键名称;
  select * from classes;
  select * from students;
  alter table students add constraint fk foreign key (cls_id) references classes(id);
--建立起了外键这个时候要插入cls_id那么可能需要注意不能超过主表的id,否则会报错。
--如果class(id)只有1和2,插入数据的时候students(cls_id)写3会报错。
  delete from classes where id=1;   #外键约束,无法删除
--先删除子表再删除父表
  delete from students where cls_id=1;
  select * from students;
  delete from classes where id=1;   #发现可以删除
--级联删除
  alter table students drop foreign key fk;
  alter table students add constraint fk foreign key (cls_id) references classes(id) on delete cascade;
  delete from classes where id=2;   #删除成功,级联删除
  selete * from students;
  selete * from classes;
 

 
 
 

MariaDB——相关概念与sql语句的更多相关文章

  1. MariaDB——数据库基础与sql语句

    数据库介绍 什么是数据库? 简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库提供的多种方法来管理数据 ...

  2. [MySQL数据库之数据库相关概念、MySQL下载安装、MySQL软件基本管理、SQL语句]

    [MySQL数据库之数据库相关概念.MySQL下载安装.MySQL软件基本管理.SQL语句] 数据库相关概念 数据库管理软件的由来 数据库管理软件:本质就是个C/S架构的套接字程序. 我们在编写任何程 ...

  3. SQL语句报错:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near

    报错如图: 最开始其实我的列名tname和tsubject分别叫name和subject,后来看到网上有说这个报错可能是数据库建表的时候使用了mysql的关键词,我就只把name改了.后来还是这个问题 ...

  4. MariaDB——SQL语句分类汇总

    常用SQL语句汇总 SQL语句在所有的关系型数据库中都是通用的,算起来sql语句也是一门语言,只不过这门语言的主要操作对象是关系型的数据库,其中最常用的还是查询相关的语句. sql语句主要分为: DQ ...

  5. Python-数据库 基本SQL语句

    1. 数据库是什么 2. MySQL安装 3. 用户授权 4. 数据库操作 - 数据表 - 数据类型 - 是否可以为空 - 自增 - 主键 - 外键 - 唯一索引 数据行 增 删 改 查 排序: or ...

  6. 详细分析SQL语句逻辑执行过程和相关语法

    本文目录: 1.SQL语句的逻辑处理顺序 1.2 各数据库系统的语句逻辑处理顺序 1.2.1 SQL Server和Oracle的逻辑执行顺序 1.2.2 MariaDB的逻辑执行顺序 1.2.3 M ...

  7. php中sql语句常见错误

    .php文件中sql语句的写法导致的错误如下: 1.$logSql="select * from jd_login where uname=".$u."and upwd= ...

  8. 数据库入门-基本sql语句及数据类型

    一.基本sql语句 SQL语言主要用于存取数据.查询数据.更新数据和管理关系数据库系统,SQL语言由IBM开发.SQL语言分为3种类型: #.DDL语句 数据库定义语言: 数据库.表.视图.索引.存储 ...

  9. MySQL的SQL语句

    一. MySQL概念 程序 =数据+指令构成,如果下载1个程序需要连带该程序所有代码+数据下载到本地,那这个程序运行起来势必造成本机内存压力暴涨,所以我们需要1个在远程server端帮我们管理数据的软 ...

随机推荐

  1. 连接mysql,oracle的命令 以及导入sql文件

    Oracle 1,sqlplus  username/password 导入: 2,@后面跟着sql文件的路径,回车,导入数据 @D:/test.sql; 导入完毕,输入commit; MySQL: ...

  2. WPS/office使用技巧系列

    一 WPS中如果要对比2个文档,不想以标签形式打开而是以多窗口形式,该怎么操作? 点击WPS左上角的蓝色或绿色框-->选项->->视图->勾选在任务栏中显示所有窗口,恢复书签模 ...

  3. python2.7 安装 Scipy

    Numpy.scikit-learn可以直接 pip install xxx 但Scipy不能,在官网找到了安装方法: python -m pip install --user numpy scipy ...

  4. CPU的态

    CPU是OS最基本的硬件. cpu的态(mode): 1.mode展示CPU的工作状态 2.mode用来给对资源和指令权限的描述 分类: 1.kernel mode(核态): 权限最高 OS内核/管理 ...

  5. Mybatis学习day2

    Mybatis初探 之前已经用利用mybatis实现链接数据库查询所有用户的信息(用的是在resources下建立和Dao层一样目录的xml实现的).这次再来看一下增删改查等其它的操作. 利用Myba ...

  6. HA: Infinity Stones-Write-up

    下载地址:点我 哔哩哔哩:点我 主题还是关于复仇者联盟的,这次是无限宝石的. 信息收集 虚拟机的IP为:192.168.116.137 ➜ ~ nmap -sn 192.168.116.1/24 St ...

  7. 第九届蓝桥杯B组决赛 调手表(完全背包)

    问题描述 M78 星云的一个小时有 n 分钟. 大家都知道,手表只有一个按钮可以把当前的数加一.在调分钟的时候,如果当前显示的数是 0 ,那么按一下按钮就会变成 1,再按一次变成 2 .如果当前的数是 ...

  8. 【快学springboot】SpringBoot整合Mybatis Plus

    原创声明 本文首发于头条号[Happyjava].Happy的掘金地址:https://juejin.im/user/5cc2895df265da03a630ddca,Happy的个人博客:http: ...

  9. Android开发:界面设计之六大layouts介绍

    1.帧布局 FrameLayout: FrameLayout是最简单的布局对象.在它里面的的所有显示对象都将固定在屏幕的左上角,不能指定位置,后一个会直接覆盖在前一个之上显示 因为上面的一段话这个是在 ...

  10. MySQL : INSERT INTO SELECT

    INSERT INTO wx_announcement_push ( title, content, STATUS, del_flag, user_login_name ) SELECT '大家好', ...