zoukankan      html  css  js  c++  java
  • MySQL Day1

    MySQL安装

    推荐使用通用二进制包安装,下载通用二进制包,解压后会有INSTALL-BINARY文件
    通过查看文件中的安装示例步骤,完成数据库的初级安装
        注意:在数据块初始化时最好提前准备好my.cnf文件并指定
    groupadd mysql                            
    useradd -r -g mysql -s /bin/false mysql
    cd /usr/local
    tar zxvf /path/to/mysql-VERSION-OS.tar.gz
    ln -s full-path-to-mysql-VERSION-OS mysql
    cd mysql
    mkdir mysql-files
    chmod 770 mysql-files
    chown -R mysql .
    chgrp -R mysql .
    bin/mysql_install_db --user=mysql    # Before MySQL 5.7.6
    bin/mysqld --initialize --user=mysql # MySQL 5.7.6 and up
    bin/mysql_ssl_rsa_setup              # MySQL 5.7.6 and up
    chown -R root .
    chown -R mysql data mysql-files
    bin/mysqld_safe --user=mysql &
    cp support-files/mysql.server /etc/init.d/mysql.server
    环境变量问题:
        在环境变量中设置一个MySQL_HOME变量
        把MySQL的bin目录加入到PATH中
        加入一个更改MySQL客户端提示符的变量
    #cat .bash_profile
    
    export MYSQL_HOME=/usr/local/mysql/
    PATH=$PATH:$HOME/bin:$MYSQL_HOME/bin
    export MYSQL_PS1="(u@h) [d]>"
    export PATH

    MySQL的相关操作

    ----查看本会话的连接信息

    (root@localhost) [(none)]>s
    --------------
    mysql Ver 14.14 Distrib 5.7.10, for linux-glibc2.5 (x86_64) using EditLine wrapper

    
    

    Connection id: 24
    Current database:
    Current user: root@localhost
    SSL: Not in use
    Current pager: stdout
    Using outfile: ''
    Using delimiter: ;
    Server version: 5.7.10 MySQL Community Server (GPL)
    Protocol version: 10
    Connection: Localhost via UNIX socket
    Server characterset: latin1
    Db characterset: latin1
    Client characterset: utf8
    Conn. characterset: utf8
    UNIX socket: /tmp/mysql.sock
    Uptime: 5 hours 15 min 42 sec

    
    

    Threads: 1 Questions: 3021 Slow queries: 0 Opens: 340 Flush tables: 1 Open tables: 87 Queries per second avg: 0.159
    --------------

    
    

    (root@localhost) [(none)]>

    --查看mysql使用参数文件的方式
    [root@zhenxing ~]# mysql --help|grep my.cnf
    order of preference, my.cnf, $MYSQL_TCP_PORT,
    /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf /usr/local/mysql/my.cnf ~/.my.cnf
    
    默认原则是排在后面的参数文件参数覆盖前面参数文件中指定的参数
    (也就是如果存在/etc/my.cnf 和~/.my.cnf中存在同样的参数不同的值,则以~/.my.cnf中指定的为准)

    课堂问题:

    如果使自增列插入0值?
    (默认自增列插入NULL或插入0都表示自增列字段以1为起点向上自增)
    通过修改MySQL的SQL_MODE来插入自增列为0的值(NO_AUTO_VALUE_ON_ZERO)
    mysql>ALTER SQL_MODE='NO_AUTO_VALUE_ON_ZERO';
    --该参数表示改变默认0的行为   下列是官方文档说明
    NO_AUTO_VALUE_ON_ZERO affects handling of AUTO_INCREMENT columns. Normally, you
    generate the next sequence number for the column by inserting either NULL or 0 into it.
    NO_AUTO_VALUE_ON_ZERO suppresses(抑制) this behavior for 0 so that only NULL generates the next
    sequence number.
    This mode can be useful if 0 has been stored in a table's AUTO_INCREMENT column. (Storing 0
    is not a recommended practice, by the way.) For example, if you dump the table with mysqldump
    and then reload it, MySQL normally generates new sequence numbers when it encounters the
    0 values, resulting in a table with contents different from the one that was dumped. Enabling
    NO_AUTO_VALUE_ON_ZERO before reloading the dump file solves this problem. mysqldump now
    automatically includes in its output a statement that enables NO_AUTO_VALUE_ON_ZERO, to avoid
    this problem.

    如果将0保存到表的AUTO_INCREMENT列,该模式会很有用。(不推荐采用该方式)。例如,如果你用mysqldump转储表并重载入,MySQL 遇到0值一般会生成新的序列号,生成的表的内容与转储的表不同。但也可在重载转储文件前启用NO_AUTO_VALUE_ON_ZERO可以解决该问题。

    将SQL_MODE还原为默认值

    每个版本的MySQL的SQL_MODE的默认值都不同,可以搜索MySQL的参考文档查看对应版本的SQL_MODE默认值
    --修改成5.7.10的SQL_MODE默认值
    mysql>SET SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

    如何通过sql区分出char和varchar的不同?

    (root@localhost) [test]>create table t(col1 char(10),col2 varchar(10));  --创建测试表
    Query OK, 0 rows affected (0.03 sec)
    
    (root@localhost) [test]>desc t;   --查看表结构
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | col1  | char(10)    | YES  |     | NULL    |       |
    | col2  | varchar(10) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    2 rows in set (0.00 sec)
    
    
    (root@localhost) [test]>insert into t(col1,col2) values('abc','abc');  --插入测试数据
    Query OK, 1 row affected (0.00 sec)
    
    (root@localhost) [test]>select col1,length(col1) as 'length(col1)',char_length(col1) 'char_length(col1)',col2,length(col2) as 'length(col2)',char_length(col2) as 'char_length(col2)' from t;   --查看字段长度,都显示为3
    +------+--------------+-------------------+------+--------------+-------------------+
    | col1 | length(col1) | char_length(col1) | col2 | length(col2) | char_length(col2) |
    +------+--------------+-------------------+------+--------------+-------------------+
    | abc  |            3 |                 3 | abc  |            3 |                 3 |
    +------+--------------+-------------------+------+--------------+-------------------+
    1 row in set (0.00 sec)
    
    (root@localhost) [test]>SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';   --设置SQL_MODE参数
    Query OK, 0 rows affected, 1 warning (0.00 sec)  --存在一个警告
    
    (root@localhost) [test]>show warnings;  --查看警告显示该参数可能会在未来版本中被废弃,需要注意
    +---------+------+------------------------------------------------------------------------------------------------+
    | Level   | Code | Message                                                                                        |
    +---------+------+------------------------------------------------------------------------------------------------+
    | Warning | 3090 | Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. |
    +---------+------+------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    (root@localhost) [test]>select col1,length(col1) as 'length(col1)',char_length(col1) 'char_length(col1)',col2,length(col2) as 'length(col2)',char_length(col2) as 'char_length(col2)' from t;    --再次查看字段长度,char变成了10,而varchar仍旧是3
    +------------+--------------+-------------------+------+--------------+-------------------+
    | col1       | length(col1) | char_length(col1) | col2 | length(col2) | char_length(col2) |
    +------------+--------------+-------------------+------+--------------+-------------------+
    | abc        |           10 |                10 | abc  |            3 |                 3 |
    +------------+--------------+-------------------+------+--------------+-------------------+
    1 row in set (0.00 sec)
    
    
    官方说明:

    By default, trailing spaces are trimmed from CHAR column values on retrieval. If PAD_CHAR_TO_FULL_LENGTH is enabled, trimming does not occur and retrieved CHAR values are padded to their full length. This mode does not apply to VARCHAR columns, for which trailing spaces are retained on retrieval.

    解释:默认检索数据时会把char的后空格trim(修剪,截断)掉,所以需要使SQL_MODE的PAD_CHAR_TO_FULL_LENGTH参数来禁用该默认规则。

    
    

    MySQL5.7.x使用workbench连接数据库的问题

    在MySQL5.6之前,数据库是默认不开启ssh加密传输方式的,在5.7以后,默认安装时执行了ssh_setup操作进行开启,所以在5.6之前可以默认使用workb的Standard(TCP/IP)协议进行连接,但5.7以后需要使用Standard(TCP/IP) over ssh方式连接,不然会连接报错。
    转载请说明出处 |QQ:327488733@qq.com
  • 相关阅读:
    路由聚合(路由发布时)
    RIP
    路由选择和静态路由
    传输介质和IP地址
    升级VRP
    文件系统
    命令行基础
    常见的网络设备
    mysql基本的修改表的命令
    mysql的外键知识
  • 原文地址:https://www.cnblogs.com/zhenxing/p/5324138.html
Copyright © 2011-2022 走看看