MySQL数据库简识

MySQL:关系型数据库
     (由瑞典MySQL AB公司开发,后来被Sun公司收购,Sun公司后来又被Oracle公司收购,目前属于Oracle旗下产品)
        开源 免费 不要钱 使用范围广,跨平台支持性好,提供了多种语言调用的 API
关系型数据库RDBMS与数据库之间的关系:
    RDBMS这个是关系型数据库,mysql数据库存储数据的方式:一个数据仓库(叫数据库),一个数据库存了很多的数据(这些数据以数据表的形式存在)
 
数据库
  • 当前主要使用两种类型的数据库:关系型数据库、非关系型数据库
  • 所谓的关系型数据库RDBMS,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据
  • 数据库里面的数据以表格的形式存在   
    对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径
 
SQL语言
SQL是结构化查询语言,是一种用来操作RDBMS的数据库语言,当前关系型数据库都支持使用SQL语言进行操作
  • SQL语句主要分为:
    • DQL:数据查询语言,用于对数据进行查询,如select
    • DML:数据操作语言,对数据进行增加、修改、删除,如insert、udpate、delete
    • TPL:事务处理语言,对事务进行处理,包括begin transaction、commit、rollback
    • DCL:数据控制语言,进行授权与权限回收,如grant、revoke
    • DDL:数据定义语言,进行数据库、表的管理等,如create、drop
    • CCL:指针控制语言,通过控制指针完成表的操作,如declare cursor
  • 对于web程序员来讲,重点是数据的crud(增删改查),必须熟练编写DQL、DML,能够编写DDL完成数据库、表的操作,其它语言如TPL、DCL、CCL了解即可
  • SQL 是一门特殊的语言,专门用来操作关系数据库
  • 不区分大小写
 
视图
定义通俗的讲,视图就是一条SELECT语句执行后返回的结果集。
视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变);
作用:方便操作,特别是查询操作,把复杂的sql语句可以使用视图来代替,增强可读性;如果数据库的字段修改,不需要修改我们写的python代码
 
定义视图:create view 视图名称 as select语句; (建议以V_开头)
查看视图:show tables;
使用视图:select * from 视图名称;
删除视图:drop view 视图名称;
 
 
事务
定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

事务四大特性(简称ACID)

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持久性(Durability)
开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表中
开启事务命令begin; 或者start transaction;
回滚事务命令rollback;(放弃缓存中变更的数据)
提交事务命令commit;(将缓存中的数据变更维护到物理表中)
 
 
索引
定义:索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
          更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。
 
查看索引:show index from 表名;
创建索引:create index 索引名称 on 表名(字段名称(长度));
删除索引:drop index 索引名称 on 表名;
 
附:
{开启运行时间监测:set profiling=1;}
{查看执行的时间:show profiles;}
 
  
权限管理对用户的管理
-- 查看有哪些账户
        1 使用root账户登录
        2 使用mysql数据库
        3 用户的信息存放在 user 表中
                Host表示允许访问的主机
                User表示用户名
                authentication_string表示密码,为加密后的值
          -- select host,user,authentication_string from user;(查询语句)
 
-- 创建账户、授权
        创建账户并授予所有权限(部分权限)
        -- grant 权限列表 on 数据库 to '用户名'@'访问主机' identified by '密码';(语法格式)
            -- 注意
            -- 1 访问主机通常使用 百分号% 表示此账户可以使用任何ip的主机登录访问此数据库
            -- 2 访问主机可以设置成 localhost 或具体的ip,表示只允许本机或特定主机访问
 
        创建账户并授予所有权限(所有权限) all privileges
        --grant 权限列表 on 数据库 to '用户名'@'访问主机' identified by '密码';(语法格式)
        -- 注意 访问链接设置成 % 十分危险 不要使用
            grant all privileges on python10.* to "p10"@"%" identified by "123";
 
注:如果远程依然连不上,可能原因:
1) 网络不通
通过 ping xxx.xxx.xx.xxx可以发现网络是否正常
2)查看数据库是否配置了bind_address参数
本地登录数据库查看my.cnf文件和数据库当前参数show variables like 'bind_address';
如果设置了bind_address=127.0.0.1 那么只能本地登录
3)查看数据库是否设置了skip_networking参数
如果设置了该参数,那么只能本地登录mysql数据库
4)端口指定是否正确
            
        -- 查看用户有哪些权限
        -- show grants for '用户'@'访问主机';
 
-- 修改权限
        1 使用root账户登录
        2 修改用户权限
        -- grant 权限名称 on 数据库 to 账户@主机 with grant option;(语法格式)
            grant update on python10.* to "python10"@"localhost" with grant option;
        3 刷新权限
            flush privileges;
 
-- 修改密码
        1 使用root账户登录
        2 选择mysql数据库
        3 使用password()函数进行密码加密 对user表进行修改
        -- update user set authentication_string=password('新密码') where user='用户名';(语法格式)
        例:update user set authentication_string=password('222') where user='用户名';
        4 刷新权限
            flush privileges;
 
-- 删除用户
        1 使用root账户登录
        2 删除用户
            第一种方式  drop user '用户名'@'主机';(语法格式)  卸载
                        例:drop user 'oldyang'@'%';
                        drop user "python10"@"localhost";
            第二种方式    delete from user where user='用户名';(语法格式)  手动删除
                        例:delete from user where user='laowang';
                        -- 操作结束之后需要刷新权限
                        flush privileges
                        
        -- 推荐使用语法1删除用户, 如果使用语法1删除失败,采用语法2方式
    
-- 远程登录(谨慎使用)
 
 
MySQL主从
    从的数据库服务器会实时备份主的数据库服务器数据
原文地址:https://www.cnblogs.com/qingchang/p/9072655.html