1、MySQL安装
(1)安装方式:mysql
优势:安装快,简单正则表达式
缺点:定死了各个文件的地方,太死板sql
2 、二进制格式的程序包:展开至特定路径,并通过简单配置后便可使用(推荐),下实验二数据库
(2)mysql 的程序组成:centos
ip socket: 监听在tcp 的3306 端口,支持远程通讯
unix sock: 监听在sock 文件上(/tmp/mysql.sock,/var/lib/mysql/mysql.sock) ,仅支持本机通讯
实验一:yum源安装MySQL和开启设置服务
一、打开官方网站,上边有各类版本的yum源,找到本身想要的版本设置yum源
https://downloads.mariadb.org/mariadb/repositories/
若上不了网,也可使用本身光盘里的老版本
二、若不用本身的光盘老版本,要配置yum源,这里我选了10.2的版本
vim /etc/yum.repos.d/along.repo
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.2/centos7-amd64 gpgcheck=0
如有其余yum源,加一个enabled=0 先临时关闭,yum clean all 清除缓存,注意:官方给的yum源安装的Maria没有安装相依赖的包,还需本身安装相依赖的包
查询端口对应的进程信息 lsof -i :3306 或 netstat -tnlp | grep 3306
注意:开启服务后,会多一个mysql的用户,它的家目录:存放数据库,至关于数据库中的每一个表
mysql用户是安装包时,执行了个脚本,建立了mysql用户,提示咱们要是二进制安装需建立用户
rpm -q --scripts mariadb-server 能够查看这个脚本
/usr/bin/mysql_secure_installation
实验二:二进制安装mariadb和开启设置服务
注意:安装以前要确保本身系统上没有mariadb服务,有老版本能够先卸掉,删除mysql用户
一、去官网下载本身想要的版本 http://mariadb.org
rz,tar xvf mariadb-10.2.8-linux-x86_64.tar.gz -C /usr/local/
(不像编译安装同样,解包能够放在任何目录,这个二进制安装必须指定在这个目录)
二、cd /usr/local/ 发现mariadb的目录名字不符合要求
ln -s mariadb-10.2.8-linux-x86_64/ mysql 建立软链接也能够更名
useradd -d /app/mysqldb -r -m -s /sbin/nologin mysql
ls support-files/ 包里自带的有配置文件,但地方不对,要放在/etc/mysql/my.cnf
cp support-files/my-huge.cnf /etc/mysql/my.cnf 咱们演示一个大的
[mysqld] datadir = /app/mysqldb //指定总目录,必须的 innodb_file_per_table = on //让每个表数据库都是一个文件,方便管理 skip_name_resolve = on //忽略名字的反向解析,加快速度
cd /usr/local/mysql 必定要在这个目录下执行脚本,由于脚本写死了
./scripts/mysql_install_db --user=mysql --datadir=/app/mysqldb 执行脚本
完成后就会在/app/mysqldb/ 生成mysql系统数据库
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld 设置服务在哪一个运行级别,在哪一个运行级别开启服务
service mysqld start 失败,看失败缘由:缺乏日志文件,日志文件须有读写权限
touch /var/log/mariadb/mariadb.log
chown mysql /var/log/mariadb/mariadb.log
PATH=/usr/local/mysql/bin:$PATH
2、mysql基础入门操做
-pPASSWORD :用户的密码; 建议使用-p, 默认为空密码
二、mysql中一些的名词
三、SQL 语句:(4大类)
DDL: Data Defination Language 数据定义语言,修改表结构
CREATE(建立), DROP(删除), ALTER(修改表结构)
DML: Data Manipulation Language 数据操做语言,修改表里的数据
INSERT, DELETE, UPDATE(更新数据)
DQL :Data Query Language 数据的查询语言
SELECT 用法多,很是灵活
DCL :Data Control Language 数据控制语言,受权限
GRANT, REVOKE(取消受权)
三、对数据库的操做
查看某个数据库中的表:show tables [from database_name] 若是已经在这个库下,不用加from
数据库有information_schema 库,这个库是只读库,只有root特殊权限的用户登陆才能看到,不能drop删除
数据库有#mysql50#.mozilla 相似的库的处理方法,由于mysql家目录下有个隐藏文件致使,不能删除
CREATE DATABASE(数据库) [IF NOT EXISTS](若是不存在,建立)'DB_NAME'; 建立成功一个,会生成一个表数据库文件
CHARACTER SET 'character set name' 设置字符集,不推荐设置,不建议调
COLLATE 'collate name' 设置排序规则,不推荐设置
DROP DATABASE [IF EXISTS] 'DB_NAME'; 删除成功,会删除对应的表数据库文件
查看支持全部字符集:SHOW CHARACTER SET; 不须要改
查看支持全部排序规则:SHOW COLLATION; 不须要改
四、获取命令使用帮助:mysql>help create database;
例:create database testdb; 建立testdb数据库
drop database testdb; 删除testdb数据库
4、建立删除表
一、查看数据库中全部的表:show tables from base_name;
① CREATE TABLE [IF NOT EXISTS] 'tbl_name' (col1 type1 修饰符, col2 type2 修饰符, ...)
• PRIMARY KEY(col1,...) ()复合主键
• ENGINE [=] engine_name (引擎设置,默认就好)
SHOW ENGINES; 查看支持的engine 引擎类型
• ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT |COMPACT} 行的格式,默认就好
② create table students3 select * [id,name] from students; 也能够建立一个表,彻底复制另外一个表的结构[或本身选择的结构];复制的表没有约束,如主键
insert into students3 select * from students; 有students3这个表,彻底复制另外一个表的内容
获取建立表的帮助:mysql> HELP CREATE TABLE;
三、删除表: DROP TABLE [IF EXISTS] 'tbl_name';
例1:CREATE TABLE testdb.students (id int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR (20) NOT NULL,age tinyint UNSIGNED);
解释:建立testdb库中名为students表;表有3列:id、name、age;id:数据类型int为正、不为空、设为主键;name:数据类型VARCHAR (20)、不为空;age:数据类型tinyint UNSIGNED)
例2:create table teachers (id int unsigned not null,name varchar(20) not null,age tinyint unsigned,primary key(id,name));
解释:建立testdb库中名为teachers表;表的复合主键为id和name列;其余和例1同样
例3:create table students3 select * from students; 建立students3复制students的内容
5、DDL语句:修改表结构,尽可能不要改表结构,不多用
一、查看表结构:DESC [db_name.]tb_name;
字段:
添加字段:add
ADD col1 data_type [FIRST加到第一段的后边|AFTER col_name某一段的后边]
删除字段:drop
修改字段:change (字段名), modify (字段属性)
索引:
添加索引:add
删除索引: drop
表选项:
修改:change
ALTER TABLE students3 RENAME s3; 改表名
ALTER TABLE s3 ADD phone varchar(11) AFTER name; 在s3表的name字段后加一个phone
ALTER TABLE s1 MODIFY phone int; 把phone的数据类型改成int
ALTER TABLE s1 CHANGE COLUMN phone mobile char(11); 把字段phone更名为字段mobile,数据类型为char(11)
ALTER TABLE s1 DROP COLUMN mobile; 删除字段mobile
ALTER TABLE students ADD gender ENUM('m','f') 增长gender字段,为枚举类型,只能是m或f
ALETR TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY; 把修改id字段为sid,数据类型为正int、非空、主键
ALTER TABLE students ADD UNIQUE KEY(name); 在name字段加惟一键
ALTER TABLE students ADD INDEX(age); 在age字段加索引
SHOW INDEXES FROM students; 查看索引信息
ALTER TABLE students DROP age;
6、DML语句,修改表内容
select * from tab_name [WHERE clause [LIMIT [m,]n];] 查看表中的全部内容,Limit m,n 跳过m行,要n行
select id,name,... from tab_name; 查出指定的表中内容
select count(*) from tab_name; 查看表中的记录数量,count()是自带的函数
INSERT [INTO] tbl_name[(col_name,...)] VALUES(val1,...),(...),... 下例2,3
分析:① tbl_name后不加(),默认按表结构的列;若加(),先后()内容要对应,顺序能够不按表结构,也能够设null值,但最好不要,
② 选项不是数字,都要加'',例:name='along'
insert into tab_name1 select * from tab_name2; 批量导数据,下例4
UPDATE tbl_name SET col1=val1, col2=val2, ... [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n]; 下例5
分析:若不加where,直接把全部列都修改了,Limit m,n 跳过m行,要n行
DELETE FROM tbl_name [WHERE clause] [ORDERBY 'col_name' [DESC]];可先排序再指定删除的行数,下例6
分析:若不加where,直接把全部列都删除了
• TRUNCATE TABLE tbl_name; 清空表,快速清空,删除的时候,不计日志,谨慎使用
① select * from students limit 3,2;
② insert into students(id,name,age) values(1,'along',18); 添加1行信息
③ insert into students values(2,'xiaoming',19),(3,'xiaohong',20); 添加2,3行信息
④ insert s2 select * from students; 复制students表的信息到s2表中
⑤ update s2 set name='xiaohei',age=30 where id=2; 修改id=2行的内容
⑥ delete from s2 where id=3; 删除s2表的id=3的行
7、DQL 语句,select
SELECT col1,col2,... FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n]; 查询表内容信息,上例1
*: 全部字段
as :字段别名,若事先作好了表,想要把列的英语改为中文,不用修改,能够直接用别名,下例1
解释:by后指定列,desc反向排序,反向也能够-col_name
注意:若其中有空值,正向排序空值在第一行,反向排序空值在最后一行,能够order by -col_name desc 即正向排序,有把空值放在最后一行,下例2
IS NULL ,IS NOT NULL 寻找空值,不能用=,只能用is,因此最好不要有null,很差管理
① select id as 学生编号,name 姓名,age 年龄 from students; 设置别名
② select * from students order by -age desc; 按年龄的列正向排序,null在最后
③ select * from students where age>=20; 显示age>=20的
select * from students where age between 18 and 20; 显示18-20的
select * from students where name like 'xiao%'; 显示name是xiao开头的
select * from students where name rlike 'ng$'; 显示name是ng结尾的
select * from s2 where age is null; 显示null值的行
select * from students where age in (18,20,30); 显示age=18,20,30的行
8、DCL 数据控制语言,受权限
CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
例:create user 'along'@'192.168.30.%' identified by 'centos'; 添加along帐号在192.168.30这个网段,能够输centos密码链接
SELECT User,Host,Password FROM mysql.user;
五、删除用户:DROP USER 'username'@'host';
示例:drop user'along'@'192.168.30.107';
① SET PASSWORD FOR 'user'@'host' = PASSWORD('password');
例:set password for 'along'@'192.168.30.%'=password('along');
② UPDATE user SET password=PASSWORD('magedu') WHERE User='root';
注意:至关于改了user的表,不推荐用,修改表的命令不会立刻生效,需执行FLUSH PRIVILEGES 刷新一下生效
③ /usr/local/mysql/bin/mysqladmin -u root –poldpassword password 'newpassword'
注意:仅建立的用户,其所拥有的权限很小,因此咱们要进行受权
一、受权
GRANT priv_type,... ON [object_type] db_name.tb_name TO 'user'@'host' [IDENTIFIED BY 'password'] [WITHGRANT OPTION]; 受权并建立帐号
① priv_type: ALL [PRIVILEGES] 受权类型:
insert增,delete删 , update改,select查,all全部权限
② db_name.tb_name: 对哪一个数据库的哪一个表受权:
db_name.routine_name :指定库的存储过程和函数
例:grant all on test.* to 'along2'@'%' identified by 'centos'; 建立along2用户,容许其在全部主机经过centos密码登陆,对test库的全部表有全部权限
REVOKE priv_type, ... ON db_name.tb_name FROM 'user'@'host
例:revoke delete on test.* from 'along2'@'%'; 回收along2@'%'用户对test库的全部表的删除权限
① MariaDB 服务进程启动时会读取mysql 库中全部受权表至内存
② GRANT 或REVOKE 等执行权限操做会保存于系统表中,MariaDB 的服务进程一般会自动重读受权表,使之生效