精华内容
下载资源
问答
  • Mysql多对多关系利用中间表查询

    万次阅读 2019-05-25 17:24:17
    1、多对多关系,我们举个简单的例子,一个顾客可以买多件商品,同时一类商品(指多件相同的商品)也可以也可以让多个用户购买 下面是对应的表,用户表,商品表以及关系表,其中关系表中userId、metId的外键分别是...

    1、多对多关系,我们举个简单的例子,一个顾客可以买多件商品,同时一类商品(指多件相同的商品)也可以也可以让多个用户购买

    下面是对应的表,用户表,商品表以及关系表,其中关系表中userId、metId的外键分别是userTable 的userId 、materialTable 的matId

            userTable                                                      materialTable                                       

     

                                   

       materil_user 

     

    如果我们要查询用户a1买了哪些商品我们可以这样

    SELECT user.userName,user.userId,mat.matName,mat.matId FROM materil_user mu LEFT JOIN userTable user on 
    user.userId=mu.userId LEFT JOIN materialTable mat on mat.matId=mu.matId WHERE mu.userId=1

     查询结果:

    展开全文
  • MySQL 多对多条件查询

    千次阅读 2019-01-08 17:13:19
    两个表 user和role 中间表是user_role 查询用户和角色的对应关系 select res.user_name,r.role_name from(select u.user_name,ur.role_id from user as u INNER JOIN user_role as ur where u.user_id=ur.user_...

    两个表   user和role   中间表是user_role

    查询用户和角色的对应关系

    select res.user_name,r.role_name from(select u.user_name,ur.role_id from user as u INNER JOIN user_role as ur where u.user_id=ur.user_id) as res 
    INNER JOIN role as r where res.role_id=r.role_id;

     

    展开全文
  • centos7 MySQL5.7 实例安装教程

    万次阅读 2020-12-25 18:03:45
    MySQL数据库的集中化运维,可以通过在一台服务器上,部署运行MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务。各个实例之间是相互独立的,每个实例的datadir, port, socket, pid都是不同的...

    1、背景

    今天,有个朋友问我,一台服务器上面能不能安装多个MySQL呢?这样我们就可以用不同的代码使用不同的数据库了。我知道肯定是可以的,但是按照以前编译安装的方式好像很麻烦,又重新整理了一版其他安装方式的多实例安装文档,特来记录。但是线上需不需要这个东西,还是要看业务需求。此文当做学习笔记记录操作过程,希望可以帮助其他的朋友。
    介绍:MySQL数据库的集中化运维,可以通过在一台服务器上,部署运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务。各个实例之间是相互独立的,每个实例的datadir, port, socket, pid都是不同的。

    2、多实例特点

    2.1 有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。
    2.2 资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降。

    3、环境

    必须关闭selinux

    [root@node2 local]# cat /etc/redhat-release 
    CentOS Linux release 7.4.1708 (Core) 
    [root@node2 local]# uname  -r
    3.10.0-1160.11.1.el7.x86_64
    [root@MySQL ~]# getenforce 
    Disabled
    

    4、部署 [ 4个实例 ]

    4.1 下载 MySQL 5.7 二制包 [ 推荐官方下载 ] 此下载版本大于5.7.5

    [root@node2  ~]# wget wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
    

    4.2 解压 MySQL 5.7 二进制包到指定目录

    [root@node2  ~]# tar zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
    

    4.3 创建 MySQL 软链接

    [root@node2 ~]# mv /usr/local/mysql-5.7.18-linux-glibc2.5-x86_64 /usr/local/mysql
    

    4.4 创建 MySQL 用户

    [root@node2 ~]# useradd -r -s /sbin/nologin mysql
    

    4.5 在 MySQL 二进制包目录中创建 mysql-files 目录 [MySQL 数据导入/导出数据专放目录]

    [root@node2 ~]# mkdir -v /usr/local/mysql/mysql-files
    mkdir: created directory `/usr/local/mysql/mysql-files'
    

    4.6 创建多实例数据目录

    [root@node2 local]# mkdir -vp /data/mysql/data{3306..3309}
    mkdir: 已创建目录 "/data/mysql"
    mkdir: 已创建目录 "/data/mysql/data3306"
    mkdir: 已创建目录 "/data/mysql/data3307"
    mkdir: 已创建目录 "/data/mysql/data3308"
    mkdir: 已创建目录 "/data/mysql/data3309"
    

    4.7 修改 MySQL 二进制包目录的所属用户与所属组

    [root@node2 local]# chown mysql.mysql /usr/local/mysql/ -R
    [root@node2 local]# chown mysql.mysql /data/mysql -R
    

    4.8 配置 MySQL 配置文件 /etc/my.cnf

    [mysqld_multi]
    mysqld    = /usr/local/mysql/bin/mysqld 
    mysqladmin = /usr/local/mysql/bin/mysqladmin
    log        = /tmp/mysql_multi.log
     
    [mysqld3306]
    datadir = /data/mysql/data3306  # 设置数据目录 [多实例中一定要不同]
    socket = /tmp/mysql-3306.sock  # 设置sock存放文件名 [多实例中一定要不同]
    port = 3306    # 设置监听开放端口 [多实例中一定要不同]
    user = mysql  # 设置运行用户
    innodb_buffer_pool_size = 32M  # 设置innodb 缓存大小
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
    
    [mysqld3307]
    datadir = /data/mysql/data3307
    socket = /tmp/mysql-3307.sock
    port = 3307
    user = mysql
    innodb_buffer_pool_size = 32M
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
    
    [mysqld3308]
    datadir = /data/mysql/data3308
    socket = /tmp/mysql-3308.sock
    port = 3308
    user = mysql
    innodb_buffer_pool_size = 32M
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
    
    [mysqld3309]
    datadir = /data/mysql/data3309
    socket = /tmp/mysql-3309.sock
    port = 3309
    user = mysql
    innodb_buffer_pool_size = 32M
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
    

    4.9 初始化各个实例 [ 初始化完成后会自带随机密码在输出日志中 ]

    [root@node2 ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3306
    [root@node2 ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3307
    [root@node2 ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3308
    [root@node2 ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3309
    

    注意:初始化的时候会输出密码,记录下来:2020-12-25T06:39:00.288011Z 1 [Note] A temporary password is generated for root@localhost: dfIx98z,3fj(

    4.10 各实例开启 SSL 连接

    [root@node2 ~]# /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3306
    [root@node2 ~]# /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3307
    [root@node2  ~]# /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3308
    [root@node2  ~]# /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3309
    
    • 复制多实例脚本到服务管理目录下 [ /etc/init.d/ ]
    [root@node2 ~]# cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi
    

    4.11 添加脚本执行权限

    [root@node2 ~]# chmod +x /etc/init.d/mysqld_multi 
    

    4.12 添加进service服务管理和配置环境变量

    [root@node2 ~]# chkconfig --add mysqld_multi
    [root@node2 ~]# echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
    [root@node2 ~]# source /etc/profile
    

    4.13 启动多实例

    [root@node2 local]#  /usr/local/mysql/bin/mysqld_multi start    #开启多实例
    [root@node2 local]#  /usr/local/mysql/bin/mysqld_multi report   #查看全部实例状态
    [root@node2 local]#  /usr/local/mysql/bin/mysqld_multi start 3306 #启动单个实例
    [root@node2 local]#  /usr/local/mysql/bin/mysqld_multi stop  3306 #停止单个实例
    [root@node2 local]#  /usr/local/mysql/bin/mysqld_multi report
    Reporting MySQL servers
    MySQL server from group: mysqld3306 is running
    MySQL server from group: mysqld3307 is running
    MySQL server from group: mysqld3308 is running
    MySQL server from group: mysqld3309 is running
    

    4.14 查看实例监听端口

    [root@node2 local]#  netstat -lntp | grep mysqld
    tcp6       0      0 :::3306                 :::*                    LISTEN      8898/mysqld         
    tcp6       0      0 :::3307                 :::*                    LISTEN      8901/mysqld         
    tcp6       0      0 :::3308                 :::*                    LISTEN      8904/mysqld         
    tcp6       0      0 :::3309                 :::*                    LISTEN      8907/mysqld   
    

    5. 连接测试

    实例3306测试:

    [root@node2 local]# mysql -uroot -p -S /tmp/mysql-3306.sock 
    Enter password:  #输入4.9 初始化输出的密码
    Server version: 5.7.18 MySQL Community Server (GPL)
    ..................
    mysql> set password for root@'localhost'=password('123456'); 
    mysql> flush privileges;
    mysql> create database test  ; #可以看到该实例的data目录下多了一个test库
    

    其他实例连接:

    [root@node2 local]# mysql -uroot -p -S /tmp/mysql-3307.sock  
    [root@node2 local]# mysql -uroot -p -S /tmp/mysql-3308.sock  
    [root@node2 local]# mysql -uroot -p -S /tmp/mysql-3309.sock  
    

    遇到的问题:
    /usr/local/mysql/bin/mysqld_multi stop 3306 停止3306实例无效。
    解决: 自己写一个脚本来实现启停功能
    #先把密码存放到一个安全的文件里面

    echo '123456' >  /etc/mysql.pass
    chmod 600   /etc/mysql.pass
    vim /etc/init.d/mysqld_manager  #以后就可以通过这个脚本来管理mysql了
    #!/bin/bash
    tag=$1
    port=$2
    mysqld_multi="/usr/local/mysql/bin/mysqld_multi"
    sql="/usr/local/mysql/bin/mysql"
    sqladmin="/usr/local/mysql/bin/mysqladmin"
    if [ "$tag" == "start" ] && [ "$port" == '' ];then 
        $mysqld_multi start 
    else   
        case "$tag" in
            'start' )
                $mysqld_multi start $port
                ;;
            'stop' )
                $sqladmin -uroot -p`cat /etc/mysql.pass` -S /tmp/mysql-$port.sock  shutdown
                ;;
            'report' )
                $mysqld_multi report $port
                ;;
            'restart' )
                $sqladmin -uroot -p`cat /etc/mysql.pass` -S /tmp/mysql-$port.sock  shutdown
                $mysqld_multi start $port
                ;;
            *)
                echo "Usage: $0 {start|stop|report|restart}" >&2
                ;;
        esac
    fi    
    #赋权
    chmod 755  /etc/init.d/mysqld_manager 
    
    展开全文
  • mysql中一条insert语句批量插入条记录

    万次阅读 多人点赞 2017-07-20 15:39:23
    插入语句常用写法: INSERT INTO items(name,city,price,number,picture) VALUES('耐克运动鞋','广州',500,1000,'003.jpg'...幸好MySQL提供了另一种解决方案,就是使用一条INSERT语句来插入条记录。这并不是标准的SQ

    插入语句常用写法:

    INSERT INTO items(name,city,price,number,picture)  VALUES('耐克运动鞋','广州',500,1000,'003.jpg');

    这种方式只能够一次插入一条数据,要想插入多条数据,就得多次调用此sql语句,意味着多次与数据库建立连接。但是这样一来,就会增加服务器的负荷,因为,执行每一次SQL服务器都要同样对SQL进行分析、优化等操作。幸好MySQL提供了另一种解决方案,就是使用一条INSERT语句来插入多条记录。这并不是标准的SQL语法,因此只能在MySQL中使用。

     

     一条INSERT语句插入批量数据的写法:

    INSERT INTO 
    
    [表名]([列名],[列名]) 
    
     VALUES
    
    ([列值],[列值])),
    
    ([列值],[列值])),
    
    ([列值],[列值]));

    可以看到,和原来的常规INSERT语句的区别,仅仅是在VALUES 后面增加值的排列,每条记录之间用英文输入法状态下的逗号隔开,是不是so easy。

    示例:

    INSERT INTO 
    
    items(name,city,price,number,picture) 
    
    VALUES
    
    ('耐克运动鞋','广州',500,1000,'003.jpg'),
    
    ('耐克运动鞋2','广州2',500,1000,'002.jpg');

    这样,就实现了一次性插入了2条数据。

    建议:

    在程序中,插入批量数据时,最好使用这种通过一条INSERT语句来一次性插入的方式。这样可以避免程序和数据库建立多次连接,从而增加服务器负荷。

     

    欢迎关注微信公众号(Java修炼记):

    专注Java技术积累,免费分享Java技术干货、学习笔记、学习资料等,致力于让这里成为一个java知识小站。

    展开全文
  • MySQL对一行列求和

    万次阅读 2016-07-11 13:20:47
    SUM函数的语法是:SELECT SUM(expression ) FROM tables WHERE predicates; 表达式可以是一个数值字段或公式。 SELECT 列1+列2+列3……+列N AS Total FROM 表 或者select SUM(group_type+group_num_d
  • Mysql 表联合查询效率分析及优化

    万次阅读 多人点赞 2010-07-13 15:23:00
    1. 表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如: SELECT * FROM table1 CROSS JOIN table2 SELECT * FROM table1 JOIN table2 SELECT * FROM table1,...
  • Mysql 表连接查询

    万次阅读 多人点赞 2018-05-08 19:27:21
    本文部分内容转载至:Mysql 表查询详解,同时感谢原作者的整理与创作;
  • mysql实例配置

    万次阅读 2021-05-10 17:34:04
    Mysql实例配置 下载安装包 [root@localhost mysql]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz --2021-05-04 20:34:21-- ...
  • mysql多表关联统计

    万次阅读 2019-05-10 15:46:13
    mysql多表关联统计子查询统计 需求: 统计每本书打赏金额,不同时间的充值数据统计,消费统计, 设计四个表,book 书本表,orders 订单表reward_log打赏表 consume_log 消费表 ,通过book_id与book表关联, ...
  • mysql对多关联查询 练习

    万次阅读 2019-03-29 16:07:12
    场景:假设一个学生有多门课程,一门课程有多个学生(虽然两者是多对多关系,但本次假设为一对多)。 学生表: SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `student`...
  • Mysql 字段去重

    万次阅读 2018-08-17 11:26:04
    使用group by去重 现在有如下表 id name age 1 张三 23 2 李四 34 3 张三 23 4 李四 32 需求 : 按照name和age字段联合去重 sql如下 select * from user group by n...
  • mysql中一对多数据查询问题

    万次阅读 2017-09-19 17:09:40
    结果就是这样,数据重复,这样用json不好传递,所以我们需要sql进行优化 然后我就想到了group by 分组语句 select goods.*,goods_image.goods_path from goods,goods_image where goods.goods_id = goods_...
  • 多对多关系示例:一个学生可以选择多门课,一门课也有多名学生。 这三种关系在数据库中逻辑结构处理分析: 1.一对多关系处理: 我们以学生和班级之间的关系来说明一对多的关系处理方法。 假设现有基本表学生...
  • MySQL下载与安装

    万次阅读 多人点赞 2018-10-28 18:20:54
    MySQL下载与安装 一、下载 地址:https://dev.mysql.com/downloads/mysql/ 当前最新是8.0版本,我选择上一个最新的mysql-5.7.24-winx64.zip 二、安装 MySQL安装文件分两种 .msi和.zip ,.msi需要安装 zip格式...
  • mysql多线程update发生死锁

    千次阅读 2018-11-14 10:47:06
    mysql使用InnoDB引擎,在线程并发的情况下,发现数据库表中的数据进行更新操作时发生了死锁 基础知识 mysql 引擎 1、MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有...
  • mysql中的主键

    万次阅读 2019-07-05 17:40:28
    mysql中的主键 2013年11月10日 23:57:54DevonLiu02阅读数 2274 最近在学习mysql的时候发现关于主键的一个问题。 google中的一个结果得到说 主键 就是unique 和 not null的结合,但经过试验之后发现,在细节上...
  • 对于多对多的关系表,要通过创建中间表来实现外键关联 1.例如一个用户可以拥有多个游戏角色,这是一对多的关系 2.例如一个角色可以拥有多个商品,且一个商品可以对应多个角色,这是多对多的关系 ...
  • mysql group by 对多个字段进行分组

    万次阅读 多人点赞 2017-06-06 16:49:27
    在平时的开发任务中我们经常会用到MYSQL的GROUP BY分组, 用来获取数据表中以分组字段为依据的统计数据。比如有一个学生选课表,表结构如下:Table: Subject_SelectionSubject Semester Attendee ------------------...
  • mysql对多collection的使用

    千次阅读 2018-08-24 15:31:47
    <resultMap id="BaseResultMap_MeetingVo" type="com.***.entity.vo.MeetingVo" > <result column="id" property="id"...meeting"
  • mysql多张表左连接

    万次阅读 多人点赞 2018-06-22 11:15:14
    A表:姓名,学号,班级编号 B表:学号,成绩C表:班级编号,班级名称最后想显示为姓名,学号,成绩,班级名称A、B表用where a.学号=b.学号查出之后再和C表左连接sql语句如下:select a.姓名,a.学号, b....
  • Linux安装MySQL5.7

    万次阅读 多人点赞 2019-06-25 11:08:32
    下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 解压 tar -xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar ...mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,284,637
精华内容 1,313,854
关键字:

mysql多对多

mysql 订阅