Linux 安装Mysql
官方下载地址
这里使用5.5.48的版本,注意自己是32位还是64位
查看有没有rpm安装过mariadb :
rpm -qa | grep mariadb
如果有 移除mariadb :
rpm -e --nodeps mariadb-*
同理,再看看有没有安装mysql 如果有先卸载
然后把残留的文件夹删除,不删除会安装失败的
rpm -ivh MySQL-server-5.5.48-1.linux2.6.x86_64.rpm
如果出现以下错误
原因:这是由于yum安装了旧版本的GPG keys造成的
解决办法:
命令后面跟上 --force --nodeps
如果还出现错误,那说明还是没有卸载干净
yum remove perl-DBD-MySQL
yum remove mysql*
yum remove mysql*
出现此界面为server端安装成功
安装client端
rpm -ivh MySQL-client-5.5.48-1.linux2.6.x86_64.rpm
可以查询版本即为安装成功
启动mysql
service mysql start / stop /status 启动 停止 状态
- mysql 给root 设置密码
/usr/bin/mysqladmin -u root password 123456
- 设置msyql 开机自启
chkconfig mysql on
- 目录结构
- 修改配置文件位置
修改/etc/my.cnf文件,在其添加:
#配置字符編碼
default-character-set=utf8
#配置字符編碼
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
default-character-set=utf8
mysql 配置文件配置
如何配置 :
Windows : my.ini 文件
Linux : /etc/my.cnf文件
数据库存在地址:
windows: 安装目录下的data目录
Linux:var/lib/mysql
frm 文件: 存放表结构
myd 文件 存放表数据
myi文件 存放表索引
存储引擎
查看你的mysql现在已提供什么存储引擎
show engines;
查看当前默认存储引擎
show variables like '%engine%';
两种常用存储引擎的对比
对比项 | MyISAM | InnoDB |
---|---|---|
主外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行表锁 | 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 | 行锁,操作时只锁定某一行,不对其它行有影响,适合高并发的操作 |
缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引,还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响 |
表空间 | 小 | 大 |
关注点 | 性能 | 事务 |
sql执行加载顺序
人为写的顺序:
select distinct
<select_list>
from
<left_table> <join_type>
join <right_tabel> on <join_condition>
where
<where_condition>
group by
<group_by_list>
having
<having_condition>
order by
<order_by_conditon>
limit <limit number>
机读:
from <left_table>
on <join_condition>
<join_table> join <right_table>
where <where_condition>
group by <group_by_list>
having <gaving_condition>
select
distinct <select_list>
order by <order_by_condition>
limit <limit_number>
SQL JOINS
建表sql:
CREATE DATABASE /*!32312 IF NOT EXISTS*/`jointest` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `jointest`;
DROP TABLE IF EXISTS `t_dept`;
CREATE TABLE `t_dept` (
`dept_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门id',
`dept_name` varchar(20) NOT NULL COMMENT '部门名称',
PRIMARY KEY (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
insert into `t_dept`(`dept_id`,`dept_name`) values (1,'IT部门'),(2,'HR部门'),(3,'财务部门'),(4,'后勤部门'),(5,'保安部门');
DROP TABLE IF EXISTS `t_emp`;
CREATE TABLE `t_emp` (
`emp_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '员工id',
`emp_name` varchar(20) NOT NULL COMMENT '员工姓名',
`dept_id` bigint(20) DEFAULT NULL COMMENT '员工所属部门',
PRIMARY KEY (`emp_id`),
KEY `fk_emp_dept` (`dept_id`),
CONSTRAINT `fk_emp_dept` FOREIGN KEY (`dept_id`) REFERENCES `t_dept` (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
insert into `t_emp`(`emp_id`,`emp_name`,`dept_id`) values (1,'z3',1),(2,'l4',2),(3,'w5',1),(4,'z6',4),(5,'d7',NULL);
inner join内连接: 交集,取AB交集部分
select * from t_emp inner join t_dept on t_emp.dept_id = t_dept.dept_id;
left join 左连接,A,B的共有 + A的独有
select * from t_emp left join t_dept on t_emp.dept_id = t_dept.dept_id;
right join 右连接,A,B的共有 + B的独有
select * from t_emp right join t_dept on t_emp.dept_id = t_dept.dept_id;
A 的独有
select * from t_emp left join t_dept on t_emp.dept_id = t_dept.dept_id where t_dept.dept_id is null;
B的独有
select * from t_emp right join t_dept on t_emp.dept_id = t_dept.dept_id where t_emp.emp_id is null;
全有:
注:mysql 不支持全外连接,所以我们采用: