zoukankan      html  css  js  c++  java
  • [转载]mysql 学习笔记

    原文地址:mysql 学习笔记作者:猪猪

    一.DDL语句

    1. 创建数据库

    mysql> create  database  test1;

    2. 删除数据库

    mysql> drop  database  test1;

    3. 选择数据库

    Mysql>use  dbname

    4.  查看数据库

    mysql> show  databases;

    5. 查看表信息

    mysql> show  tables;

    6. 查表结构信息

    Mysql>desc 表名;

    7. 查看表结构详细信息

    Mysql>show create  table  表名 G

    8. 创建表

    Mysq>create  table 表名 (字段 字段类型,字段 字段类型,.)

     删除表

       Mysql>drop table 表名;

    10. 修改表【类型】字段的定义值

       Mysql> alter  table  表名 modify  字段 字段类型;  

    modify:为参数

    11. 在表中增加字段

       Mysql>alter  table  表名 add  column 字段   字段类型; 

    add column:为参数

    12.在表中删除字段

      Mysql>alter  table  表名 drop column 字段;   

    drop column:为参数

    13.在表中字段改名 

    Mysql> alter  table 表名  change  旧字段名 新字段名  新字段类型;  change:为参数

     

    注释:modify 和 change都可以修改表的定义,但是modify不可以修改名称,而change可以修改名称;

    14 .修改字段排列顺序     

    例如:将新加的字段 char(10)B字段后面;

    Mysql> alter  table 表名 add   char(10)  after  B;

    first[前面]|after[后面]:为参数

    15 把某个字段放在最前面

    Mysql> alter  table  表名 modify  字段  字段类型 first;

    16 更改表的名称

      Mysql> alter  table 旧表名名  rename 新表名;   

     rename:为参数 

     

    二.DML语句

    1. 在表中插入数据

    Mysql> insert  inot  表名 (字段,字段..字段)values (‘值1’,‘值2)

     

    Mysql> insert  inot  表名 values (‘值1’,‘值2)

     

    Mysql> insert  inot  表名 values (‘值1’,‘值2)(‘值1’,‘值2(‘值1’,‘值2);

    三种情况

     

    2. 更新记录

    Mysql> update 表名 set 字段1=值,字段2=值 where 条件;

     

    3. 删除数据记录

    Mysql> delete  from 表名 where 条件;

     

    4. 查询记录

    Mysql> select   from 表名

     

    Mysql> select 字段1,字段 from 表名;

     

    Mysql> select 字段1,字段 from 表名 where 条件;      条件查询

     

    条件:  等于

      大于

       小于

      >=  大于或等于

    <=  小于或等于

    !=  不等于

    O 

     And 

     

    Mysql> select  distinct  字段 from 表名;            查询结果不出现重复

          Distinct:参数代表不重复出现;

     

    Mysql> select   from 表名 order by  [DESCASC]  字段;  查询进行排序

      

    DESCASC为参数:

                     DESC:表示小到大降序摆列

                     ASC :表示大到小升序摆列   默认为ASC

     

    Mysql> select   from 表名 order by  [DESCASC]  字段 limit  n; 查询摘要

     

    比如:Mysql> select   from 表名 order by  [DESCASC]  字段 limit  3;

    3:表示所查询出的结果取前3行;

     

    比如:Mysql> select   from 表名 order by  [DESCASC]  字段 limit  13;

    13:表示所查询出的结果取其中的第二行;

     

     

    [转载]mysql <wbr>学习笔记

    统计总人数

    Mysql> selecet  count(1)  from 表名;   

    统计部门人数     

    Mysql> select  字段1,count(1)  from 表名 group  by 字段1

    统计部门人数 统计总人数, 

    Mysql> select 字段1count(1)  from 表名 group  by 字段 with rollup;

    统计大于1人部门

    Mysql> select 字段1count(1)  from 表名 group  by 字段having count(1)>1;

    统计总额、最高、最低

    Mysql> select  sum(字段),max(字段),min(字段 from 表名;

     

    mysql> select from emp;

    +--------------+------------+------+--------+

    name         hiredate   sal  deptno |

    +--------------+------------+------+--------+

    qtt          2011-08-08 3000      |

    xieqiangneng 2010-08-07 6000      |

    ty           2011-02-04 4000      |

    +--------------+------------+------+--------+

    mysql> select from emp;

    +--------------+------------+------+--------+

    name         hiredate   sal  deptno |

    +--------------+------------+------+--------+

    qtt          2011-08-08 3000      |

    xieqiangneng 2010-08-07 6000      |

    ty           2011-02-04 4000      |

    t210         2010-02-02 4500      |

    +--------------+------------+------+--------+

    左连接,查询用户所在的部门;

    mysql> select name,deptname from emp left join dept on emp.deptno=dept.deptno;

    +--------------+----------+

    name         deptname |

    +--------------+----------+

    qtt          sale     |

    xieqiangneng tech     |

    ty           sale     |

    t210         hr       |

    +--------------+------------+------+--------+

    右连接

    mysql>select name,deptname from dept right join emp on dept.deptno=emp.deptno;

    +--------------+----------+

    name         deptname |

    +--------------+----------+

    qtt          sale     |

    xieqiangneng tech     |

    ty           sale     |

    t210         hr       |

    +--------------+----------+

     

    定义别名查询

    mysql> select Host AS 主机,User As 用户 from user;

    +----------------+------+

    主机           用户 |

    +----------------+------+

                 xqn  |

    127.0.0.1      root |

    localhost           |

    localhost      root |

    www.oracle.org      |

    www.oracle.org root |

     

     

     

     

    三 用户管理

    2、指定授权

     使用myuser/mypassword从任何主机连接到mysql服务器

    Mysql> GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'%' IDENTIFIED BY '123qweWITH GRANT OPTION;

     

    使用myuser/mypasswordip192.168.225.166的主机连接到mysql服务器:

     Mysql> GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.225.166' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; 

     

     Mysql> grant  select,update,insert,delete on mysql.* to xqn@%;

     

    3、泛授权

    mysql -h localhost -u root 

    mysql>GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'%' IDENTIFIED BY '123qwe WITH GRANT OPTION; //赋予任何主机上以root身份访问数据的权限 

    mysql>FLUSH PRIVILEGES;

     

    可以用mysqladmin命令在命令行指定密码:

    shell> mysqladmin -u user_name -h host_name password "newpwd"

    该命令重设密码的账户为user表内匹配User列的user_name和Host列你发起连接的客户端的记录。

    从新设置密码

    为账户赋予密码的另一种方法是执行SET PASSWORD语句:

    mysql> SET PASSWORD FOR 'xqn'@'%' PASSWORD('123456');

    只有root等可以更新mysql数据库的用户可以更改其它用户的密码。如果你没有以匿名用户连接,省略FOR子句便可以更改自己的密码:

    mysql> SET PASSWORD PASSWORD('123456');

    你还可以在全局级别使用GRANT USAGE语句(在*.*)来指定某个账户的密码而不影响账户当前的权限:

    mysql> GRANT USAGE ON *.* TO 'xqn'@'%' IDENTIFIED BY '123456';

     

    四.mysql主从配置

    [转载]mysql <wbr>学习笔记

     

     

     

    Mysql主服务器上的配置

     

    1】 在主服务器上,设置一个负责用户xqn,并授权REPLICATION SLAVE 权限,可以从IP192.168.1.2的主机进行连接。

    Mysql> grant  replication  slave  on *.* to test@192.168.1.2  identified by 123456;

    [转载]mysql <wbr>学习笔记

    2】 修改主数据库服务器的配置文件my.cnf ,开启BINLOG,并设置server-id的值;需要重启服务;

     

    #vi /et c/my.cnf

    [mysqld]

    Log-bin /usr/local.mysql/log/mysql-bin.log

    Server-id=1

     

     

    3】 在主服务器设置读锁有效;

    Mysql> flush  tables  with  read  lock;

     

     

    4】 在主服务器查看当前二进制日志名和偏移量值;

    Mysql> show master status;

    [转载]mysql <wbr>学习笔记

     

    5】 备份主服务器的数据,如果是刚刚安装好的服务器没有什么新的数据不需要备份;备份方式很多种,自己选吧;

     

    6】 恢复主服务器的写的操作;

     

    Mysql> unlock  tables;

     

     

    mysql从服务器上配置

     

    7】 如果在主服务有备份文件,直接把的主的服务器的备份文件解开放到从服务器数据安装的相应的目录;如果没有备份就不需要这一步了;

     

    8】 修改从服务器的配置文件my.cnf,增加server-id的参数;

    [mysqld]

    Server-id 

     

     

    9】 在从服务器在,指定复制使用的用户、主服务器的IP、端口、开始执行复制的日志文件和位置;

    [转载]mysql <wbr>学习笔记

    Mysql> change  master  to

     master_host='192.168.1.1',

    master_port=3306,

    master_user='test',

    master_password='123456',

    master_log_file='mysql-bin.000005',

    master_log_pos=242;

     

    注释:master_log_file='mysql-bin.000005',master_log_pos=106;的值就是下图值,也就主服务器的二进制日志名和偏移量值;        

    [转载]mysql <wbr>学习笔记  

     

     

    10】 在从服务器上,启动slave线程

    Mysql> start  slave;

    [转载]mysql <wbr>学习笔记

     

    11】 查看是否连接成功

    mysql> show processlist G

    [转载]mysql <wbr>学习笔记

    这表明slave已经连接上了master

     

    测试主从服务器

    1. 在主服务器新一个数据库xqn_test,然后创建的test表,看看能不同步到从服务器上;

     

     

    五  Mysql主从同步单个数据库

         mysql 主从配置

     

    mysql主:10.39.0.105

    mysql从:10.39.0.106

    +++++++++++++++++++++++++++

    要求:同步10.39.0.105pdataprocess数据库到10.39.0.106上;

          但是mysql数据库不进行同步

    +++++++++++++++++++

    +mysql主服务器配置+

    +++++++++++++++++++

    #vi /etc/my.cnf

    [mysqld]

    log-bin=mysql-bin

    server-id 1

    log_bin /data1/mysql/log/mysql-bin.log

    binlog-do-db pdata                              binlog-do-db:设置需要同步的数据库 

    binlog-do-db process 

    binlog-ignore-db mysql                      binlog-ignore-db:设置不需要同步的数据库 

     

    #创建用于同步的用户

    #mysql -u root -p

    mysql>GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO 'replication'@'10.39.0.106' IDENTIFIED BY '123456';

     

    #复制数据到从库:    

    #service mysqld stop         

    (或对数据库进行锁操作      

    #mysql -u root -p                 

    mysql>FLUSH TABLES WITH READ LOCK; 

    #cd /var/lib/mysql 

    #tar mysql.tar.gz pdata/ process/

    #scp ./mysql.tar.gz  root@10.39.0.106:/var/lib/mysql 

    #mysql mysql start

    #mysql -u root -p         

    mysql>UNLOCK TABLES;

    mysql> show master status; 

    +------------------+----------+---------------+------------------+

    File             Position Binlog_Do_DB  Binlog_Ignore_DB |

    +------------------+----------+---------------+------------------+

    mysql-bin.000011      618 pdata,process mysql            |

    +------------------+----------+---------------+------------------+

     

     

     

    +++++++++++++++++++

    +mysql从服务器配置+

    +++++++++++++++++++

    #vi /etc/my.conf

    [mysqld]

    log-bin=mysql-bin

    server-id 2

    log_bin /data1/mysql/log/mysql-bin.log

    master-host 10.39.0.105

    master-user replication

    master-pass 123456

    master-port 3306

    master-connect-retry=60

    replicate-do-db pdata

    replicate-do-db process

    replicate-ignore-db mysql

     

    #装载主服务器数据库 

    #cd /var/lib/mysql

    #tar -zxvf mysql.tar.gz

    #rm -rf mysql.tar.gz

    #/etc/init.d/mysqld restart

     

    #同步数据

    #mysql -u root -p

     

    mysql>CHANGE MASTER TO            

          MASTER_HOST='10.39.0.105',         

          MASTER_USER='replication',         

          MASTER_PASSWORD='123456',         

          MASTER_LOG_FILE='mysql-bin.000011',         

          MASTER_LOG_POS=618;    

    如果执行报错解决方法:

      mysql> slave stop;

             Query OK, rows affected, warning (0.00 sec)

      mysql> reset slave;

             Query OK, rows affected,(0.00 sec)

     

    这样就完成mysql主从设置了,你可以执行

    mysql show slave   status G;

     

    Slave_IO_Running: Yes  

    Slave_SQL_Running: Yes   这两行也yes表示成功;

     

    测试吧 

    六  mysql配置多个实例

    #tar mysql...tar.gz

    #./configure --prefix=/usr/local/mysql --datadir=/usr/local/mysql/data1 --sysconfdir=/etc

    ###################################################################################

    mysql> GRANT ALL PRIVILEGES ON *.* TO mysql@'localhost' IDENTIFIED BY '123qwe' WITH GRANT OPTION;

    mysql> flush privileges;

     

    #cd /usr/local/mysql

    #mkdir data2 data4 data4

    #cp -rv data1/mysql   data2

    #cp -rv data1/mysql   data3

    #cp -rv data1/mysql   data4

    #chow -R mysql.mysql  data*

     

    ls -l /usr/local/mysql/

    drwxr-xr-x mysql mysql 4096 Apr 17:54 data4

    drwxr-x--- mysql mysql 4096 Apr 17:14 data1

    drwxr-xr-x mysql mysql 4096 Apr 17:54 data2

    drwxr-xr-x mysql mysql 4096 Apr 17:54 data3

     

    修改mysql的配置文件

    #vi /etc/my.cnf   

    [mysqld_multi]

    mysqld /usr/local/mysql/bin/mysqld_safe

    mysqladmin /usr/local/mysql/bin/mysqladmin

    user  mysql

    password 123qwe

     

    [mysqld1]

    port      3306

    socket    /tmp/mysql.sock1

    pid-file=/usr/local/mysql/data1/db-app1.pid

    log=/usr/local/mysql/data1/db-app.log

    datadir /usr/local/mysql/data

    user mysql

    [mysqld2]

    port 3307

    socket /tmp/mysql.sock2

    pid-file /usr/local/mysql/data2/db-app2.pid

    datadir /usr/local/mysql/data2

    log=/usr/local/mysql/data2/db-app.log

    user mysql

    [mysqld3]

    port            3308

    socket          /tmp/mysql.sock3

    pid-file /usr/local/mysql/data3/db-app3.pid3

    datadir /usr/local/mysql/data3

    log=/usr/local/mysql/data3/db-app.log

    user mysql

    [mysqld4]

    port            3309

    socket          /tmp/mysql.sock4

    pid-file /usr/local/mysql/data4/db-app4.pid

    datadir /usr/local/mysql/data4

    log=/usr/local/mysql/data4/db-app.log

    user mysql

     

    #cd mysql-5.0.56/scripts  进入源码安装目录  重新初使化数据库目录

    #mysql-5.0.56/scripts /mysql_install_db   --usrer=mysql  --datadir=/usr/local/mysql/data1

    #./mysql_install_db   --usrer=mysql  --datadir=/usr/local/mysql/data2

    #./mysql_install_db   --usrer=mysql  --datadir=/usr/local/mysql/data3

    #./mysql_install_db   --usrer=mysql  --datadir=/usr/local/mysql/data4

     

    #/usr/local/mysql/bin/mysqld_multi --config-file=/etc/my.cnf start 只启动第一个服务

     

    #/usr/local/mysql/bin/mysqld_multi --config-file=/etc/my.cnf start 1-4 启动所以的服务 【】

     

    /usr/local/mysql/bin/mysqld_multi --defaults-extra-file=/etc/my.cnf start 2

    #[root@sr2 ~]# netstat -ant grep 33

    tcp             0.0.0.0:3306                0.0.0.0:*                   LISTEN      

    tcp             0.0.0.0:3307                0.0.0.0:*                   LISTEN      

    tcp             0.0.0.0:3308                0.0.0.0:*                   LISTEN      

    tcp             0.0.0.0:3309                0.0.0.0:*                   LISTEN 

     

     

    ############

    #连接数据库#

    ############

    启动 mysql:

    cd /usr/local/mysql/bin/mysqld_safe --socket=/tmp/mysql.sock2 --port=3307 &

     

    给 root 指定密码:

    /usr/local/mysql/bin/mysqladmin --socket=/tmp/mysql.sock1 --port=3308 -u root password '密码'

     

    修改 root 对应的 host 为 '%' 以允许在任意 ip 访问(默认是 localhost)。需要进入 mysql 命令行:

    /usr/local/mysql/bin/mysql --socket=/tmp/mysql.sock2 --port=3307 -u root -p

    mysql> use mysql;

    mysql> update user set host='%' where user='root';

     

    需要刷新授权信息:

    mysql> flush privileges;

     

    如果不行的话试试重启 mysql:

    /usr/local/mysql/bin/mysqladmin -u root --socket=/tmp/mysql.sock2 --port=3307 -p reload

     

  • 相关阅读:
    当···时发生了什么?
    数据存储-3、数据库分库分表思路
    数据存储-2、反模式设计
    数据存储-1、MySQL 索引使用的注意事项
    锁机制-4、synchronized 与 lock 的区别
    锁机制-3、synchronize 实现原理
    锁机制-1、乐观锁与悲观锁以及乐观锁的一种实现方式
    线程-11、线程的生命周期
    线程-10、线程池的几种方式
    线程-9、线程池的实现原理
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7480757.html
Copyright © 2011-2022 走看看