mysql功能汇总

python mysql编程:

建立和数据库服务器之间的连接      conn = mysql.connect
获取游标                      cursor = conn.cursor()
使用游标执行SQL语句获取效果      cursor.execute(sql语句)
关闭游标                      cursor.close()
断开连接                      conn.close()

SQL注入

在执行SQL语句时,往往通过拼接字符串的方式构成SQL语句,这时候如果伪造输入指令影响SQL语句的语义,容易造成数据泄露的风险。
对此,注意做到两点解决SQL注入的问题:
将SQL语句的所有数据参数存在一个列表中传递给execute中的第二个参数
对于需要占位的参数为,全部使用%s进行占位,且不加双引号和单引号
for example:params = [find_name]
             # 执行select语句,并返回受影响的行数:查询所有数据
             count = cs1.execute('select * from goods where name=%s', params)

视图

视图封装了多张基础表的数据的复杂操作,封装了多张表的引用,实现一张虚表用于显示信息,
而且视图只是封装了显示的引用,并不能通过修改视图来更改基础表的数据。
优点:
    视图封装了对多张基本表的复杂操作,简化用户操作
    视图只是一个虚表,并不存储任何基本表的表数据,当用户使用视图的时候 视图会从基本表中取出
    通过视图可以对用户展示指定字段从而屏蔽其他字段数据,更加安全
创建视图:create view 视图名称 as select语句;
查看视图:show tables;
使用视图:select * from 视图;
删除视图:drop view 视图名称;

事务

注意:只有数据库的引擎为innodb才能使用事务,其他的引擎不支持
概念:是指作为一个基本工作单元执行的一系列SQL语句的操作,要么完全地执行,要么完全地都不执行。
事物的四大特性:
    原子性:事务中多个操作是一个整体 要么都完全的成功 要么什么都不做 
    一致性:数据库总是从一个一致性状态转换为另一个一致性状态 不会存在不一致状态 
    隔离性:事务与外界之间是隔离 相互不可见<事务的数据在未提交之前 外界是不可见的>
    持久性:数据一旦提交commit 到数据库中 就会永久保存<系统故障 崩溃 保证数据不丢失>  
           一旦提交不允许rollbakc回滚
事务的使用:
    开始:begin或者start transaction
    提交:commit
    回滚:rollback
事务使用过程中的注意点:
    1、修改数据的操作会自动触发事务,包括insert、update、delete
    2、在不手动开启事务的时候,mysql有自动提交的功能,通过set autocommit = 0关闭自动提交
    3、隐式提交:除对表数据的操作外的操作绝地大多数的都是不可撤销的

索引

概念:索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),
    它们包含着对数据表里所有记录的位置信息。通过所以能提升查询的效率。
创建索引:create index idx_字段名 on 表名(字段名(字符串类型需要添加长度))
查看索引:show index from 表名
删除索引:drop index idx_字段名 on 表名
备注:对于一组数据创建索引之后,其查询速度提升是显著地,且数据量越大,提升的数量级越大,对于索引,
是快速定位数据所在的位置,如果使用二叉树的数据结构,数据的数据量会按照2的n次幂进行筛选。

账户管理

根据数据库账户的权限可将账户分为以下几种:
    1.服务实例级账号:,启动了一个mysqld,即为一个数据库实例;如果某用户如root,拥有服务实例级分配的权限,那么该2   账号就可以删除所有的数据库、连同这些库中的表
    2.数据库级别账号:对特定数据库执行增删改查的所有操作
    3.数据表级别账号:对特定表执行增删改查等所有操作
    4.字段级别的权限:对某些表的特定字段进行操作
    5.存储程序级别的账号:对存储程序进行增删改查的操作
刷新权限:** 操作权限和密码后一定记得刷新权限 flush privileges;
查看用户信息:select host,user,authentication_string from user;(user所在的位置为mysql数据库)
查看账户的权限:show grants for '用户名'@'主机名';
创建用户并授权:grant 权限列表 on 数据库.表名 to '用户名'@'主机地址' identified by '密码' WHIH GRANT OPTION
    关于权限:create、alter、drop、insert、update、delete、select   所有权限用all privileges 
    ** WHIH GRANT OPTION 是将授予权限的功能赋予账户,所以在写这条语句的时候要慎重
添加用户权限:grant 权限列表 on 数据库.表名 to '用户名'@'主机地址'
移除用户的权限:revoke 权限列表 on 数据库名.表名 from '用户名'@'主机号';
更改用户及密码:update user set authentication_string= PASSWORD('新密码') where user = '用户名';
删除用户:drop user '用户名'@'主机名';

主从配置

1 备份主服务器
    sql文件保存 主 所有的数据
    mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/master_db.sql
2 将第一步产生的数据 在从上进行恢复 -- 主从数据一致 <让主从在同一起跑线>
    mysql -uroot -pmysql < master_db.sql
3 在主上先开启二进制日志功能 设置 server_id    
    sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf  
    将配置文件中数据中的三个值改为以下三行
    # bind-address      = 127.0.0.1
    server-id       = 1
    log_bin         = /var/log/mysql/mysql-bin.log
    重启主服务器
    sudo service mysql restart
4. 在主上
    查询主服务器 IP地址 ifconfig 结果是: 192.168.164.91
    获取主数据库的状态 mysql> show master status;
    在主上查询信息 File 和 Position数据在 配置 从服务器 进行操作的时候需要用到
    mysql root@(none):jd> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
     mysql-bin.000035 |      154              |                  |                   |
    +------------------+---------
5. 在主上配置 从 所需权限
    GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
    FLUSH PRIVILEGES;
6. 配置从服务器
    登录从服务器 
    停止从服务器 mysql > stop slave;
    在从上配置主相关信息
    change master to master_host='192.168.164.91', master_user='slave',
    master_password='slave',master_log_file='mysql-bin.000035', master_log_pos=154;
    启动从    mysql> start slave
    查看从主状态  mysql> show slave status;
    如果启动出错 可以尝试一下 > reset slave
    MAC操作MySQL服务
        brew services start mysql (启动)
        brew services stop mysql (停止)

你可能感兴趣的:(mysql相关)