作者:​猪猪​

一.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 表名 (字段 字段类型,字段 字段类型,….);

9 删除表

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 .修改字段排列顺序

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

Mysql> alter table 表名 add A 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,字段2 from 表名;


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


条件:= 等于

> 大于

< 小于

>= 大于或等于

<= 小于或等于

!= 不等于

Or 和

And 而


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

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


Mysql> select * from 表名 order by [DESC和ASC] 字段; 查询进行排序


DESC和ASC为参数:

DESC:表示小到大降序摆列

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


Mysql> select * from 表名 order by [DESC和ASC] 字段 limit n; 查询摘要


比如:Mysql> select * from 表名 order by [DESC和ASC] 字段 limit 3;

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


比如:Mysql> select * from 表名 order by [DESC和ASC] 字段 limit 1,3;

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



[转载]mysql 学习笔记_表名

统计总人数

Mysql> selecet count(1) from 表名;

统计部门人数

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

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

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

统计大于1人部门

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

统计总额、最高、最低

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


mysql> select * from emp;

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

| name | hiredate | sal | deptno |

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

| qtt | 2011-08-08 | 3000 | 2 |

| xieqiangneng | 2010-08-07 | 6000 | 1 |

| ty | 2011-02-04 | 4000 | 2 |

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

mysql> select * from emp;

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

| name | hiredate | sal | deptno |

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

| qtt | 2011-08-08 | 3000 | 2 |

| xieqiangneng | 2010-08-07 | 6000 | 1 |

| ty | 2011-02-04 | 4000 | 2 |

| t210 | 2010-02-02 | 4500 | 3 |

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

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

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 '123qwe' WITH GRANT OPTION;


使用myuser/mypassword从ip为192.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 学习笔记_表名




Mysql主服务器上的配置


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

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

[转载]mysql 学习笔记_表名

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 学习笔记_表名


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


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


Mysql> unlock tables;



mysql从服务器上配置


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


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

[mysqld]

Server-id = 2



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

[转载]mysql 学习笔记_表名

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 学习笔记_表名



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

Mysql> start slave;

[转载]mysql 学习笔记_表名


11】 查看是否连接成功

mysql> show processlist G

[转载]mysql 学习笔记_表名

这表明slave已经连接上了master;


测试主从服务器

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



五 Mysql主从同步单个数据库

mysql 主从配置


mysql主:10.39.0.105

mysql从:10.39.0.106

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

要求:同步10.39.0.105的pdata和process数据库到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, 0 rows affected, 1 warning (0.00 sec)

mysql> reset slave;

Query OK, 0 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 6 mysql mysql 4096 Apr 9 17:54 data4

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

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

drwxr-xr-x 3 mysql mysql 4096 Apr 9 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 1 只启动第一个服务


#/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.0.0:3306 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN

tcp 0 0 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