MySql

Posted relaxlee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql相关的知识,希望对你有一定的参考价值。

?

mysql

  • 安装

    1. 配置my.ini 至Mysql安装目录(utf-8编码)

      [mysql]
      # 设置mysql客户端默认字符集
      default-character-set=utf8
      [mysqld]
      #设置3306端口
      port = 3306 # mysql服务器默认端口
      # 设置mysql的安装目录
      basedir=E:mysql# 设置mysql数据库的数据的存放目录
      datadir=E:mysqldata
      # 允许最大连接数
      max_connections=200
      # 服务端使用的字符集默认为8比特编码的latin1字符集
      character-set-server=utf8
      # 创建新表时将使用的默认存储引擎
      default-storage-engine=INNODB
      
      
    2. 添加环境变量

      e:mysqlin
      
    3. 管理员身份cmd,切换到mysqin目录,运行:

      mysqld install # 注册mysql服务
      
    4. 管理员身份cmd,运行:显示服务启动成功

      net start mysql # 启动mysql服务, 开机自启动
      net stop mysql # 停止服务
      
    5. MySql在windows服务中自动启动: 服务名称:MySql

    6. MySql是CS架构的软件:

      • server端: 开机自动启动

      • client端: mysql -uroot -p 连接服务端

        • -u: 用户 root:管理员
        • -p: 密码登陆(刚创建没有密码)

        技术图片

  • 启动客户端连接server

    无密码登陆:mysql -uroot -p
    密码登陆:  mysql -uroot -p123
    连接其他电脑的server端: mysql -uroot -p123 -h192.168.14.12(其他电脑ip)
    
    
  • MySql账号操作

    #进入mysql客户端
    $mysql
    mysql> select user();  #查看当前用户
    mysql> exit     # 也可以用q quit退出
    
    # 默认用户登陆之后并没有实际操作的权限
    # 需要使用管理员root用户登陆
    $ mysql -uroot -p   # mysql5.6默认是没有密码的
    #遇到password直接按回车键
    mysql> set password = password(‘root‘); # 给当前数据库设置密码
    
    # 创建账号
    mysql> create user ‘eva‘@‘192.168.10.%‘  IDENTIFIED BY ‘123‘;# % 表示网段 密码123
    mysql> create user ‘eva‘@‘192.168.10.5‘   # 指示某机器可以连接
    mysql> create user ‘eva‘@‘%‘                    #指示所有机器都可以连接  
    mysql> show grants for ‘eva‘@‘192.168.10.5‘;查看某个用户的权限 
    # 远程登陆
    $ mysql -uroot -p123 -h192.168.10.3(server端ip)
    
    # 给账号授权
    mysql> grant all # 所有权限:增删改查
    mysql> grant select # 查询权限
    mysql> grant insert # 写入权限
    mysql> grant select,insert # 查询,写入权限
    
    mysql> grant 权限类型 on ftp.* to ‘guest‘@‘192.168.3.%‘
    # ftp库下的所有表 给 guest用户所在的网段(或指定单个电脑ip)
    
    mysql> grant all on *.* to ‘eva‘@‘%‘;
    mysql> flush privileges;    # 刷新使授权立即生效
    
    # 创建账号并授权
    mysql> grant all on *.* to ‘eva‘@‘%‘ identified by ‘123‘
    
  • 数据库操作(use 数据库名:切换到数据库)

    数据库:文件夹 | 表: 文件

    * use 数据库名 # 切换到数据库
    1. 操作文件夹(库)
       增:create database db1 charset utf8;
       查:show databases;
       改:alter database db1 charset latin1;
       删除: drop database db1;
    
    
    2. 操作文件(表)
       先切换到文件夹下:use db1
       增:create table t1(id int,name char); # t1:表名(字段 类型, name char)
       查:show tables;
       改:alter table t1 modify name char(3);
          alter table t1 change name name1 char(2);
       删:drop table t1;
       
       查看表结构: desc 表名
        
    
    3. 操作文件中的内容(记录)
       增:insert into t1 values(1,‘egon1‘),(2,‘egon2‘),(3,‘egon3‘);
       查:select * from t1;
       改:update t1 set name=‘sb‘ where id=2;
       删:delete from t1 where id=1;
    
       清空表:
           delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。
           truncate table t1;数据量大,删除速度比上一条快,且直接从零开始,
    
    *auto_increment 表示:自增
    *primary key 表示:约束(不能重复且不能为空);加速查找
    
    
  • ubuntu mysql 启动与重启

    # 修改每次启动都要sudo
    1. 修改root用户
    use mysql
    select User, Host,plugin from user;
    # 查看用户的权限,是否是mysql_native_password,如果不是,则将auth_sock改为mysql_native_password。
    update user set plugin = ‘mysql_native_password‘ where user = ‘root‘;
    flush privileges;
    
    
    1、使用 service 启动:service mysql start
    2、使用 mysqld 脚本启动:/etc/init.d/mysql start
    3、使用 safe_mysqld 启动:safe_mysql&
    mysql关闭:
    
    1、使用 service 启动:service mysql stop
    2、使用 mysqld 脚本启动:/etc/init.d/mysql stop
    3、mysqladmin shutdown
    mysql重启:
    
    1、使用 service 启动:service mysql restart
    2、使用 mysqld 脚本启动:/etc/init.d/mysql restart
    
  • mysql 时间差异, UTC时间, 中国处在东8区,本地要+8小时

    临时方案:

    mysql> SET time_zone = ‘+8:00‘;
    

    永久解决方案:

    配置windows:my.ini linux: /etc/my.cnf

    [mysqld]
    default-time_zone = ‘+8:00‘
    
    # 重启服务,linux
    service mysql restart 
    # windows
    net stop mysql
    net start mysql
    

    pycharm设置 settings.py

    TIME_ZONE = ‘Asia/Shanghai‘
    

Count参数区别于执行效率

  • count(1)、count()和count(字段名)执行效果上的区别:

    • count()包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NUL
    • count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
    • count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。
  • count(1)、count(*)和count(字段名)执行效率上的区别:
    如上可以看出其实四种方式的效率是一样的,但是网上有如下说法:

    • 列名为主键,count(列名)会比count(1)快
    • 列名不为主键,count(1)会比count(列名)快
    • 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(
    • 如果有主键,则 select count(主键)的执行效率是最优的
    • 如果表只有一个字段,则 select count()最优。

以上是关于MySql的主要内容,如果未能解决你的问题,请参考以下文章

从mysql的片段中加载ListView

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

使用 json rereiver php mysql 在片段中填充列表视图

关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段

修改MySQL密码报错“ERROR 1819 (HY000): Your password does not satisfy the current policy requirements“(代码片段

mysql查看版本的四种方法