系列1-MYSQL基础入门
mysql发行版选择
1、mysql发行版和存储引擎
(1)MySQL的官方发行版
- 简单
- 开源
- 支持多种存储引擎:M有ISAM,InnoDB,MERGE,MEMORY、BDB、EXAMPLE,FEDERATED,ARCHIVE,CSV,BLACKHOLE
- 支持高可用架构:mysql自身的replication功能可以实现mysql数据的实时备份。
(2)MySQL与存储引擎
- MySQL最常用的两个存储引擎是InnoDB和MyISAM
- MySQL4和5使用默认的MyISAM存储引擎,从MySQL5.5开始,MySQL已将存储引擎从MyISAM更改为nnoDB
- 两大存储引擎的区别是
项目 | InnoDB | MyISAM |
---|---|---|
1 | 支持事务,增删查改可以回滚还原 | 不支持 |
2 | 支持外键,支持行级锁 | 不支持 |
3 | 适用频繁修改以及涉及到安全性较高的应用 | 适合大量的select,可以全文索引 |
4 | 缓存在内存中的是数据 | 索引和数据是分开的,索引是压缩的,缓存在内存的是索引而不是数据 |
5 | 可支持大并发请求,适合大量insert和update |
关于MyISAM和InnoDB的选择和使用
如果应用程序一定要用事务,毫无疑问使用InnoDB
如果应用程序对查询性能要求较高,就要使用MyISAM,MyISAM拥有全文索引的功能,这可以极大的优化查询的效率。
(3)percona server 分支
最接近官方MySQL Enterprise发行版的版本,percona提供了高性能XtaDB引擎,还提供了PXC高可用解决方案,并且附带了percona-toolkit等dba管理工具箱。
(4)Maria DB
是为了完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的替代品。
Maria DB提供了标准存储引擎,即MyISAM和InnoDB,10.0.9版使用XtraDB来代替InnoDB,
总之,线上首选percona分支,其次是mysql版本,最后是MariaDB
mysql安装
1、二进制安装mysql
安装包大家可以从https://dev.mysql.com/downloads/mysql/进行下载,下载下来的二进制包名类似mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz,安装过程如下:
[root@mysqlserver local]# tar zxvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz
[root@mysqlserver local]# mv mysql-5.7.35-linux-glibc2.12-x86_64 mysql
[root@mysqlserver local]# mkdir /usr/local/mysql/data
[root@mysqlserver local]# mkdir /usr/local/mysql/logs
[root@mysqlserver local]# useradd mysql
然后,继续执行如下操作:
[root@mysqlserver ~]# vim /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/logs/mysqld.pid
[root@mysqlserver ~]# chown -R mysql:mysql /usr/local/mysql
[root@mysqlserver ~]# cd /usr/local/mysql
[root@mysqlserver mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
[root@mysqlserver mysql]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@mysqlserver mysql]# chkconfig --level 35 mysqld on
[root@mysqlserver mysql]# /etc/init.d/mysqld start
Mysql启动成功后,需要重置root密码,临时密码在上面定义的mysql日志文件/usr/local/mysql/logs/mysqld.log中可以查到
找到临时密码后,执行如下sql
[root@mysqlserver ~]# /usr/local/mysql/bin/mysql -uroot -p
输入临时密码
进入sql命令行后,执行如下命令,修改root密码:
SQL> alter user 'root'@'localhost' identified by 'root@mySQL123';
yum在线安装
从 https://dev.mysql.com/downloads/下载yum源,然后通过yum安装即可。
[root@mysqlserver ~]# yum install mysql-server mysql mysql-common mysql-libs
或者从https://mirrors.aliyun.com/mysql/MySQL-5.7/ 下载对应的rpm文件包安装也可。
安装完成后,可直接启动mysql服务,会自动初始化系统库以及启动相关服务。
mysql启动完成后,会生成root用户的默认密码,可从mysqld.log日志文件中获取临时的密码,此密码可用于临时登录,登录后,需要马上修改为自己的新密码,执行如下SQL命令:
SQL > alter user 'root'@'localhost' identified by 'root@mySQL123';
innoDB和myISAM运行原理
Mysql基础操作
1、连接Mysql (客户端工具NaviCat、phpMyAdmin、MySQL-Front)
格式: mysql -h 主机地址 -u用户名 -p用户密码
-
连接到本机上的MYSQL。
首先进入Mysql安装程序的bin目录下,再键入命令./mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。 -
连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql -h110.110.110.110 -u root -pabcd123;
(注:u与root之间可以不用加空格)
- 退出MYSQL命令: exit (回车)
2、修改密码
格式:mysqladmin -u用户名 -p旧密码 password 新密码
- 首先在Mysql安装目录下面的bin目录,然后键入以下命令
mysqladmin -u root -p旧密码 password ab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
- 再将root的密码改为abc345。
mysqladmin -u root -p ab12 password abc345
3、增加新用户/授权用户
注意:和上面不同,下面的因为是MYSQL命令行中的命令,所以后面都带一个分号作为命令结束符
格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”
- 增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令:
mysql>grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";
但这种权限增加的用户是十分危险的,如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录这台mysql数据库,并可对数据进行任意操作,解决办法是设置登录权限。
- 增加一个用户test2密码为abc,让它只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库。
mysql>grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";
如果你不想test2有密码,可以再执行下面这个命令将密码取消掉。
mysql>grant select,insert,update,delete on mydb.* to test2@localhost identified by "";
如果想给一个用户test2授予访问mydb数据库的所有权限,并且仅允许test2在192.168.11.121这个客户端ip登录访问,可执行如下命令:
mysql>grant all on mydb.* to test2@192.168.11.121 identified by "abc";
4、数据库基础操作
- 创建数据库
注意:创建数据库之前要先连接Mysql服务器
命令:create database <数据库名>
创建数据库,并分配用户方法:
CREATE DATABASE 数据库名;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON 数据库名.* TO 数据库名@localhost IDENTIFIED BY '密码';
例1:建立一个名为abc的数据库
mysql> create database abc;
- 显示数据库
命令:show databases (注意:最后有个s)
mysql> show databases; - 删除数据库
命令:drop database <数据库名>
例如:删除名为 iivey的数据库
mysql> drop database iivey;
mysql> drop database if exists drop_database; //if exists 判断数据库是否存在,不存在也不产生错误
Query OK, 0 rows affected (0.00 sec)
- 连接数据库
命令: use <数据库名>
例如:如果iivey数据库存在,尝试存取它:
mysql> use iivey;
use语句可以通告MySQL把iivey数据库作为默认(当前)数据库使用,用于后续语句。该数据库保持为默认数据库,直到语段的结尾,或者直到发布一个不同的USE语句。
5、Mysql表操作
- 创建数据表
命令:create table <表名> ( <字段名1> <类型1> [,…<字段名n> <类型n>]);
mysql> create table MyClass(
> id int(4) not null primary key auto_increment,
> name char(20) not null,
> sex int(4) not null default '0',
> degree double(16,2));
- 删除数据表
命令:drop table <表名>
例如:删除表名为 MyClass 的表
mysql> drop table MyClass;
- 表插入数据
命令:insert into <表名> [( <字段名1>[,…<字段名n > ])] values ( 值1 )[, ( 值n )]
例如:在表MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为90.45, 编号为2 的名为Joan 的成绩为88.99, 编号为3的名为Wang的成绩为99.5。
mysql> insert into MyClass values(1,‘Tom’,90.45),(2,‘Joan’,88.99), (3,‘Wang’, 99.5);
- 查询表中的数据
- 查询所有行
命令: select <字段1,字段2,...> from < 表名 > where < 表达式 >
例如:查看表 MyClass 中所有数据
mysql> select * from MyClass;
- 查询前几行数据
例如:查看表 MyClass 中前2行数据
mysql> select * from MyClass order by id limit 0,2;
- 删除表中数据
命令:delete from 表名 where 表达式
例如:删除表 MyClass中编号为1的记录
mysql> delete from MyClass where id=1;
- 修改表中数据
语法:update 表名 set 字段=新值,… where 条件
mysql> update MyClass set name=‘Mary’ where id=1;
- 增加字段
命令:alter table 表名 add 字段 类型 其他;
例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0
mysql> alter table MyClass add passtest int(4) default '0'
- 修改表名
命令:rename table 原表名 to 新表名;
例如:在表MyClass名字更改为YouClass
mysql> rename table MyClass to YouClass;
6、备份数据库
- 导出整个数据库
导出文件默认是存在
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u user_name -p123456 database_name > outfile_name.sql
- 导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u user_name -p database_name table_name > outfile_name.sql
- 导出一个数据库结构
mysqldump -u user_name -p -d --add-drop-table database_name > outfile_name.sql
含义:-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
- 带语言参数导出
mysqldump -uroot -p –default-character-set=latin1 --set-charset=gbk --skip-opt database_name > outfile_name.sql