工作杂记

 

记录一些零碎

【MYSQL】

  • 连接方式。连接 mysql 服务器可以通过 tcp/ip,也可以通过 socket(仅限于本地) 。当在连接命令中指定 mysql 服务器 ip 时,连接方式为 tcp/ip 。当连接命令中不指定连接 ip 或 或者 ip 为 localhost 时,连接方式为 socket。如果使用 socket 连接时,mysql 默认从 /tmp 目录下寻找 mysql.sock 文件,如果没有找到,并且没有在全局选项文件里指定,那么会报“Can't connect to local MYSQL server through socket '/tmp/mysql.sock'” 的错误。这种情况下,可以尝试重启 mysql 服务器,重启后进入 /tmp 目录下查看是否生成 mysql.sock,如果没有,先使用命令查找下是否存在 mysql.sock 文件。比如:find / -name mysql.sock,或者 whereis mysql.sock。查询到位置后,那么可以通过修改 /etc/my.cnf 文件:
    [mysqld]
    # 示例位置
    socket=/opt/mysql/tmp/mysql.sock
    [client]
    socket=/opt/mysql/tmp/mysql.sock
     在文件中指定该位置,然后重启 mysql。注意,客户端和服务器需要同时指定同一个位置!
  • mysql 5.7 在创建联合主键时,每个主键均不能为空!即 NOT NULL。
  • 触发器 trigger。现假设有两张表 A 和 B。在 A 表进行 INSERT 操作后,对 B 表的 VERSION 字段做 + 1 的更新操作:
    -- -----------------
    -- 触发器
    -- -----------------
    DROP TRIGGER IF EXISTS `test_trigger`;
    DELIMITER ;;
    CREATE TRIGGER `test_trigger` AFTER INSERT ON `A` 
    FOR EACH ROW
    BEGIN
        UPDATE `B` SET VERSION = VERSION + 1 WHERE ID = NEW.B_ID;
    END
    ;;
    DELIMITER ;
     其中 DELIMITER 是 mysql 中的分隔符,默认的分隔符为分号“;”,当一次输入的语句不止一行,且行与行之间有分号,那么需要对该段语句重新定义分隔符。DELIMITER ;; 表示从这行开始分割符为 ;;,当语句结束后需要变回原来的单分号,那么指定 DELIMITER ; 即可。NEW.B_ID 中的 NEW 表示 A 表插入后的数据,这个是特定语法,对应的还有 OLD
  • 视图 VIEW
       什么是视图? 视图是一张虚拟表,存放了某个预先写好的查询语句执行的结果,对于一些复杂查询来说,当我们需要再次执行复杂查询时,不需要在重新写冗长的查询语句,直接从这张虚拟表中查询即可。

相关推荐