实验一:mysql二进制安装方法
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;