实验一:mysql二进制安装方法Mysql基础篇_MySQL

Mysql基础篇_Linux _02Mysql基础篇_MySQL_03

mysql_secure_installation 系统初始化(更安全一点)

mysql  -uroot  -pcentos (登陆mysql,-u后跟root,-p后跟密码,之间没有空格)

实验2:在centos6上安装二进制的mariadb

1.从downloads.mariadb.org  下载所需版本的mariadb的二进制包 mariadb-10.3.9-linux-x86_64.tar.gz

2.创建所需用户及组
[root@centos6(nanyibo) ~]# groupadd -g 36 -r mysql
[root@centos6(nanyibo) ~]# useradd -u 36 -r -g mysql -m -d /app/dbdata -s /sbin/nologin mysql

3.准备dbdata 建议做到lvm上
[root@centos6(nanyibo) ~]# fdisk /dev/sda
[root@centos6(nanyibo) ~]# partx -a /dev/sda
[root@centos6(nanyibo) ~]# pvcreate /dev/sda6
[root@centos6(nanyibo) ~]# vgcreate vgmysql /dev/sda6
[root@centos6(nanyibo) ~]# lvcreate -l +100%FREE -n lvmysql vgmysql
[root@centos6(nanyibo) ~]# mkfs.ext4 /dev/vgmysql/lvmysql
[root@centos6(nanyibo) ~]# vim /etc/fstab 
/dev/vgmysql/lvmysql    /app/dbdata             ext4    defaults        0 0
[root@centos6(nanyibo) ~]# mount -a
[root@centos6(nanyibo) ~]# chown mysql.mysql /app/dbdata
[root@centos6(nanyibo) ~]# chmod 700 /app/dbdata


4.解压二进制目录 
[root@centos6(nanyibo) ~]# tar -xvf mariadb-10.2.14-linux-x86_64.tar.gz -C /usr/local/

[root@centos6(nanyibo) ~]# cd /usr/local/
[root@centos6(nanyibo) local]# ln -sv mariadb-10.2.14-linux-x86_64 mysql
`mysql' -> `mariadb-10.2.14-linux-x86_64'

5.创建配置文件
[root@centos6(nanyibo) local]# cd /usr/local/mysql/
[root@centos6(nanyibo) mysql]# mkdir /etc/mysql
[root@centos6(nanyibo) mysql]# cp support-files/my-huge.cnf /etc/mysql/my.cnf
[root@centos6(nanyibo) mysql]# vim /etc/mysql/my.cnf
[mysqld]
……
datadir         = /app/dbdata
innodb_file_per_table   = on
skip_name_resolve = on
……

6.创建数据库
[root@centos6(nanyibo) mysql]# scripts/mysql_install_db --datadir=/app/dbdata --user=mysql


7.配置启动脚本
[root@centos6(nanyibo) mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@centos6(nanyibo) mysql]# chkconfig --add mysqld
[root@centos6(nanyibo) mysql]# chkconfig mysqld on
[root@centos6(nanyibo) mysql]# service mysqld restart
MariaDB server PID file could not be found!                [FAILED]
Starting MariaDB.180710 18:00:14 mysqld_safe Logging to '/var/log/mysqld.log'.
180710 18:00:14 mysqld_safe Starting mysqld daemon with databases from /app/dbdata
                                                           [  OK  ]


8.配置环境变量PATH
[root@centos6(nanyibo) ~]# vim /etc/profile.d/mage.sh
export PATH=/usr/local/mysql/bin:$PATH
[root@centos6(nanyibo) ~]# source /etc/profile.d/mage.sh


9.初始化mysql
[root@centos6(nanyibo) ~]# mysql_secure_installation 





基本语句 

MariaDB [(none)]> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)


MariaDB [(none)]> select version();
+---------------------+
| version()           |
+---------------------+
| 10.2.14-MariaDB-log |
+---------------------+
1 row in set (0.00 sec)

查看有哪些databases

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.01 sec)

创建数据库
MariaDB [test]> create database magedb;
Query OK, 1 row affected (0.01 sec)

MariaDB [test]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| magedb             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

DDL (create drop alter)



MariaDB [m33student]> create table student (id tinyint unsigned primary key, name varchar(20) not null, age tinyint unsigned,sex char(1) default "m" );
Query OK, 0 rows affected (0.05 sec)

MariaDB [m33student]> desc student;
+-------+---------------------+------+-----+---------+-------+
| Field | Type                | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| id    | tinyint(3) unsigned | NO   | PRI | NULL    |       |
| name  | varchar(20)         | NO   |     | NULL    |       |
| age   | tinyint(3) unsigned | YES  |     | NULL    |       |
| sex   | char(1)             | YES  |     | m       |       |
+-------+---------------------+------+-----+---------+-------+
4 rows in set (0.02 sec)

MariaDB [m33student]> create table student2 (id tinyint unsigned, lesson varchar(20) not null default "linux" , score tinyint unsigned, primary key (id,lesson));
Query OK, 0 rows affected (0.02 sec)

MariaDB [m33student]> desc student2
    -> ;
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| id     | tinyint(3) unsigned | NO   | PRI | NULL    |       |
| lesson | varchar(20)         | NO   | PRI | linux   |       |
| score  | tinyint(3) unsigned | YES  |     | NULL    |       |
+--------+---------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)


MariaDB [m33student]> drop table student2;
Query OK, 0 rows affected (0.04 sec)

MariaDB [m33student]> alter table student add phone char(11) after name;
Query OK, 0 rows affected (0.05 sec)


查看索引 
MariaDB [m33student]> show indexes from student\G;

增加唯一性约束
MariaDB [m33student]> alter table student add unique key (phone);

删除列
MariaDB [m33student]> alter table student drop phone;

创建索引
MariaDB [m33student]> create index age_index on student(phone);


DML

insert
MariaDB [m33student]> insert into student values (1,'liuxin','18768896428',22,default);
Query OK, 1 row affected (0.02 sec)

MariaDB [m33student]> insert into student (id,name) values (2,'zhangxinglei');
Query OK, 1 row affected (0.02 sec)

MariaDB [m33student]> insert into student (name,id) values ('zhangxuechao',3);
Query OK, 1 row affected (0.01 sec)


一次性插入多行
MariaDB [m33student]> insert into student (id,name,sex) values (4,'meiwenjun','f'),(5,'chenhaiyan','f'),(6,'fanguodong',default);

使用查询语句创建表 as可以省略
MariaDB [m33student]> create table emp as select * from student;

删除表中的所有行
MariaDB [m33student]> delete from lady;
Query OK, 4 rows affected (0.01 sec)

通过查询结果来插入行
MariaDB [m33student]> insert into lady select * from student where sex='m';
Query OK, 2 rows affected (0.02 sec)


update

MariaDB [m33student]> update student set phone='18438613802' where id=2;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0


MariaDB [m33student]> update emp set phone='18438613802' ;
Query OK, 6 rows affected (0.02 sec)
Rows matched: 6  Changed: 6  Warnings: 0


delete

MariaDB [m33student]> delete from emp where id=1;
Query OK, 1 row affected (0.02 sec)


MariaDB [m33student]> delete from emp;
Query OK, 6 rows affected (0.03 sec)

create table lesson (id tinyint unsigned, lesson varchar(20) not null default "linux" , score tinyint unsigned, primary key (id,lesson));

MariaDB [m33student]> select * from student;
+----+--------------+-------------+------+------+
| id | name         | phone       | age  | sex  |
+----+--------------+-------------+------+------+
|  1 | liuxin       | 18768896428 |   22 | m    |
|  2 | zhangxinglei | 18438613802 | NULL | m    |
|  3 | zhangxuechao | NULL        | NULL | m    |
|  4 | meiwenjun    | NULL        | NULL | f    |
|  5 | chenhaiyan   | NULL        | NULL | f    |
|  6 | fanguodong   | NULL        | NULL | m    |
| 10 | weishiyan    | 11515151511 |   18 | f    |
+----+--------------+-------------+------+------+
7 rows in set (0.00 sec)


MariaDB [m33student]> select name mingzi,phone from student;
+--------------+-------------+
| mingzi       | phone       |
+--------------+-------------+
| liuxin       | 18768896428 |
| zhangxinglei | 18438613802 |
| zhangxuechao | NULL        |
| meiwenjun    | NULL        |
| chenhaiyan   | NULL        |
| fanguodong   | NULL        |
| weishiyan    | 11515151511 |
+--------------+-------------+
7 rows in set (0.00 sec)


MariaDB [m33student]> select id,score+10 score from lesson;
+----+-------+
| id | score |
+----+-------+
|  1 |   100 |
|  2 |   105 |
+----+-------+
2 rows in set (0.00 sec)

rhel   7.0        7.1      7.3
mysql 5.5-1      5.5-2    5.5-2

函数

单行函数
	字符串型
		upper
		lower
		concat
			select concat(name,' age is ',age),gender from students;
		insert替换函数(列名,从第几位开始,替换几位,替换的内容)
MariaDB [hellodb]> select name,insert(phone,4,4,'****') phone from students;
+----------------+-------------+
| name           | phone       |
+----------------+-------------+
| Hou Yi         | 151****2972 |
| Ya Se          | 151****2972 |
| An Qila        | 135****9929 |
| Da Ji          | 135****9929 |
| Sun Shangxiang | 135****9929 |
		length(name)  长度
		lpad(phone,15,'*')
		rpad(phone,15,'*')
		replace(name,'Liu','Li')
		substr(phone,5) 从第5位开始取到最后
		substr(phone,5,3) 从第5位开始取,往后一共取3位
数字型
		abs(-20); 取绝对值
		mod(10,3); 取模
		ceil(9.2);取不小于X的最小整数
		floor(3.6) 取不大于X的最大整数
		round 四舍五入
			round(3.41111)  得3
			round(3.41111,2)  得3.41
		truncate 截断  
			truncate(3.111111,0) 得3
			truncate(113.119911,3) 得113.119
			truncate(113.119911,-1) 得110

日期型 
	select now();  显示当前的时间
	select curdate();  显示当前的日期
	select curtime();  显示当前的时间
	select year(birthday); 显示指定日期的年
	select month(birthday); 显示指定日期的月
	select day(birthday); 显示指定日期是几号
	select dayname(now()); 显示指定日期是周几

字符转日期
	str_to_date('24-11-1700','%d-%m-%Y')  字符转日期
日期转字符
	select date_format(birthday,'%Y年%m月%d日') 生日 from students;

null函数
	ifnull(score,0)
	coalesce(score,0)
其他函数
		MariaDB [hellodb]> select user();
		+----------------+
		| user()         |
		+----------------+
		| root@localhost |
		+----------------+
		1 row in set (0.00 sec)

		MariaDB [hellodb]> select version;
		ERROR 1054 (42S22): Unknown column 'version' in 'field list'
		MariaDB [hellodb]> select version();
		+----------------+
		| version()      |
		+----------------+
		| 5.5.56-MariaDB |
		+----------------+
		1 row in set (0.00 sec)

		MariaDB [hellodb]> select database();
		+------------+
		| database() |
		+------------+
		| hellodb    |
		+------------+
		1 row in set (0.00 sec)

case else

select courseid,case courseid
    -> when 2 then score+10
    -> when 3 then score+0
    -> when 4 then score+20
    -> else score
    -> end
    -> as score
    -> from scores;

多行函数(聚合函数、组函数)

count() 返回表中满足where条件的行的数量,如没有Where条件,列出所有行的总数
	MariaDB [hellodb]> Select count(*) from scores where score > 50;
	+----------+
	| count(*) |
	+----------+
	|       14 |
	+----------+
	MariaDB [hellodb]> select count(distinct classid) from students;
	+-------------------------+
	| count(distinct classid) |
	+-------------------------+
	|                       7 |
	+-------------------------+
	1 row in set (0.00 sec)

max()  min()  avg()  sum()
 select max(score) from scores;

 select courseid,sum(score) scoreall from scores group by courseid;

算平均值时,注意null不会参与组函数,所以要先用ifnull将null转为0,如下
	MariaDB [hellodb]> select avg(ifnull(score,0)) from scores;
	+----------------------+
	| avg(ifnull(score,0)) |
	+----------------------+
	|              73.0588 |
	+----------------------+
	1 row in set (0.00 sec)


MariaDB [hellodb]> select courseid,avg(score) from scores group by courseid;


select courseid,avg(nullif(score,0)) as avg from scores group by courseid where avg>60; 错误

select courseid,avg(nullif(score,0)) as avg from scores group by courseid having avg>60; 对的

where发生在group by 之前,所以不能对group by 后的结果进行筛选,而要用having



select * from students limit 6  取前6行,即1-6行
select * from students limit 6,3 取6行后的3行,即7,8,9行


练习

导入hellodb.sql生成数据库

(1)在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄
MariaDB [hellodb]> select Name,age from students where age>25 and gender='m';
(2)以ClassID为分组依据,显示每组的平均年龄
MariaDB [hellodb]> select classid ,avg(age) age from students group by classid having classid is not null;
(3)显示第2题中平均年龄大于30的分组及平均年龄
MariaDB [hellodb]> select classid ,avg(age) age from students group by classid having age>30 and classid is not null;
(4)显示以L开头的名字的同学的信息
MariaDB [hellodb]> select * from students where name like 'L%';
(5)显示TeacherID非空的同学的相关信息
MariaDB [hellodb]> select * from students where TeacherID is NOT NULL;
(6)以年龄排序后,显示年龄最大的前10位同学的信息
MariaDB [hellodb]> select * from students order by age desc limit 10;
(7)查询年龄大于等于20岁,小于等于25岁的同学的信息
mysql> select * from students where age >= 20 and age <=25;
mysql> select * from students where age between 20 and 25;