一、Linux安装Mysql步骤:
1.yum install -y mysql-server mysql mysql-devel 安装mysql


2.service mysqld start 启动mysql


3.mysqladmin -u root password 'root' 设置MySQL用户名和密码


4.mysql -uroot -p 登录MySQL


chkconfig 启动
service mysqld status:查看mysql启动状态
service mysqld restart:重启MySQL
service mysqld start:启动MySQL
chkconfig --level 2345 mysqld on:启动mysql2345级别


二、Navicat Premiun连接虚拟机mysql
1、连接前,线启动虚拟机MySQL并登陆,做以下操作赋予远程权限:
use mysql;
delete from user where 1=1;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;


2、创建MySQL新连接,输入虚拟机IP,和MySQL用户名和密码
3、选择SSH选项卡,勾选“使用SSH”,输入虚拟机IP,虚拟机用户以及密码




三、/etc/inittab 设置级别的形式,5为桌面,2为命令行形式




四、mysqladmin -u root -proot 命令
在虚拟机内直接可以对数据库进行操作
1、mysqladmin -u root -proot create test1 创建数据库
2、mysqladmin -u root -proot drop test1 删除数据库
3、mysqladmin -u root -proot password 123456 修改密码


若mysql -uroot -p登陆MySQL,报error: 'Access denied for user 'root'@'localhost' (using password: YES)'错误,则可用下列方法登陆:
mysql -h 192.168.128.129 -uroot -p


mysql常用命令集
http://www.360doc.com/content/10/0608/01/276520_31866098.shtml

五、基本操作
1、创建表
create table tablename(
id int(10) not null auto_increment primary key,
name varchar(20));
auto_increment为自增,primary key设为主键
自动检测外键是否匹配,在创建表时加以下语句:
foreign key(a) references tablename(b)
a为本表字段,b为外键表关键字段


2、desc tablename;显示具体表结构


3、flush privileges 刷新数据库


4、create database dbname; 新建数据库


5、alter table 表名 action:修改表结构
action语句:
add 列名 列类型 [first]|[after] 表已存在列名b 增加字段在列名b前或列名b后
add primary key(列名) 增加主键
change newname oldname 数据类型 修改列名和类型
drop primary key 删除主键设置
rename as newname 修改表名
drop 列名 删除列


6、删除表行数据
DELETE FROM student WHERE sno=20132;


7、插入行数据
INSERT into score VALUES('00003',3,76);
INSERT into score(sno,courseid,grade) VALUES('00003',3,76);


8、默认值设置
在创建表的时候可以在字段后增加约束条件设置默认值
CREATE TABLE student1(
scode int not null auto_increment,
sname VARCHAR(20) not null,
saddress VARCHAR(20) DEFAULT '未知', #设置默认值为“未知”
sgrade int,
semail VARCHAR(20),
ssex bit,
PRIMARY KEY(scode)
);


9、更新表数据(修改表内数据)
UPDATE student set sname='zhangsan' WHERE sname='张三';


六、查询语句
1、
SELECT sname,'year of birth',2016-sage FROM student;
查询结果中,sname和2016-sage之间会多出year of birth字符


2、消除重复行
SELECT DISTINCT sno FROM student;
DISTINCT是消除重复行


3、起别名
SELECT sno as '编号',sname as '姓名' FROM student;




4、排序
SELECT sname,sage FROM student ORDER BY sage DESC;
ORDER BY sage DESC对查询结果的sage进行降序排序


5、取行
SELECT sname,sage FROM student ORDER BY sage LIMIT 3;
ORDER BY默认为升序排序,LIMIT 3表示取结果的前3行,LIMIT 2,5 则表示从第三行开始取五行数据


6、统计
SELECT COUNT(DISTINCT sno) FROM score;
统计选课人数(因为选课可以多选,所以需要去重,才能统计出实际选课人数)


7、分组的应用
SELECT sno,avg(grade) as '平均成绩' FROM score GROUP BY sno;
计算学生平均成绩


8、结果筛选having的应用
SELECT sno,avg(grade) as '平均成绩' FROM score GROUP BY sno HAVING avg(grade)>70;
筛选出平均成绩大于70的学生平均成绩结果


9、in和枚举的用法
SELECT sname,sdept,sage FROM student WHERE sage in (20,21,22);
筛选年龄为20,21,22的学生信息


七、多表连接查询
1、内连接
SELECT s.sname,c.courseid,c.grade FROM student AS s INNER JOIN score AS c ON s.sno=c.sno;


2、左右连接
类似


八、


1、查看表索引
SHOW INDEX FROM emp;
SHOW KEYS FROM emp;


2、删除索引
DROP INDEX index_name ON emp;
ALTER TABLE emp DROP INDEX index_name;


3、新建索引(索引可以是联合索引),在使用联合索引时,只有出现联合索引最左边的字段才会用到联合索引。
方法一:
ALTER TABLE emp ADD INDEX ind1(ENAME);


方法二:新建两个索引
CREATE TABLE na (
sno INT not null PRIMARY key,
sname VARCHAR(20),
age int,
INDEX index_sno(sno),
INDEX index_name(sname(10))
);


方法三:
CREATE INDEX ind2 on emp(SAL,c1,c2);


4、explain
解释查询,查询结果返回结果执行信息
explain SELECT sno FROM student WHERE sno=2;


5、唯一索引(插入数据的时候不能为相同的值,一个表可以多个)
unique关键字
CREATE UNIQUE INDEX ind3 ON emp(ENAME);
或者
CREATE TABLE na (
sno INT not null PRIMARY key,
sname VARCHAR(20),
age int,
UNIQUE index_sno(sno),
);


九、分区表
分区表如果没有在分区的数据范围内,则插入数据会报错。
show table status #可以查看表是不是分区表


1、分区
CREATE TABLE employees(
id INT NOT NULL,
name VARCHAR(10),
hired date not null DEFAULT '1970-01-01',
separated date not null DEFAULT '9999-12-31',
store_id int not NULL
)PARTITION BY RANGE(store_id)(
PARTITION p0 VALUES less than(6),
PARTITION p1 VALUES less than(11),
PARTITION p2 VALUES less than(16),
PARTITION p3 VALUES less than(21) #表示大于16小于等于21,最多上限为MAXVALUE
);


2、查看分区
方法一:
explain partitions SELECT * FROM employees WHERE store_id<10;
查看store_id<10是在哪些分区


方法二:
SELECT
  partition_name part, 
  partition_expression expr, 
  partition_description descr, 
  FROM_DAYS(partition_description) lessthan_sendtime, 
  table_rows,
  partition_method 
FROM
  INFORMATION_SCHEMA.partitions 
WHERE
TABLE_NAME='employees';


查看分区数据
SELECT * FROM employees PARTITION(p1);


3、删除分区
ALTER TABLE employees DROP PARTITION p2,p3;


4、添加分区
ALTER TABLE employees ADD PARTITION (PARTITION p3 VALUES less than(26));


5、