数据库(DB):存储数据的仓库
数据库管理系统(DBMS):用来操纵和管理数据库的大型服务软件
数据库系统(DBS):DB+DBMS,带有数据库并整合了数据库管理软件的计算机系统
提供数据库服务的软件:Oracle、DB2、SQL server、MySQL(Mariadb)
(都是关系型数据库,彼此之间能做关联操作)
非关系型数据库:Redis、MongoDB
开源 不等于 免费
开源软件:MySQL
商业软件:Oracle、DB2、SQL server
跨平台:Windows Unix Linux
SQL server只能用在Windows
MySQL开源+跨平台
MySQL的特点:
适合中小型企业的关系型数据库服务器软件
支持多种操作系统
支持多开发语言
二、MySQL服务器
步骤一:准备工作
环境要求:
# rpm -q mariadb
未安装软件包 mariadb
# rpm -q mariadb-server
未安装软件包 mariadb-server
# rm -rf /etc/my.cnf
# rm -rf /var/lib/mysql/*
步骤二:安装软件包
# rpm -Uvh mysql-community-*.rpm
# yum -y install perl-JSON
# rpm -Uvh mysql-community-*.rpm //-U升级安装,可替换冲突文件
# rpm -qa | grep -i mysql
# rm -rf *.rpm
步骤三:启动MySQL数据库服务并设置开机自启
# systemctl start mysqld
//第一次启动比较慢是因为在做数据初始化,/var/lib/mysql(mysql数据库目录)
# systemctl enable mysqld //设置开机自启
# ss -ntulp | grep 3306
# ps -C mysqld 或者 # ps aux | grep mysqld
# ps aux | grep -i mysql //进程的所有者、所属组用户都是用户mysql
# ls /etc/my.cnf
步骤四:连接MySQL服务器,修改密码
没讲数据库用户授权之前,只能自己连接自己,其他主机连不上
格式:mysql -h 数据库服务器IP地址或主机名 -uroot -p密码
1)查看随机生成的root管理密码
# grep 'temporary password' /var/log/mysqld.log //日志文件
2018-11-16T02:24:46.229164Z 1 [Note] A temporary password is generated for root@localhost: gtf5owjoSX(k
2)使用客户端命令mysql连接到MySQL服务器
提示验证时,填入前一步获得的随机密码,验证成功后即可进入“mysql> ”环境
# mysql -hlocalhost -uroot -p'gtf5owjoSX(k'
用该密码登录到服务端后,必须马上修改密码,不然会报如下错误:
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
修改密码
密码要求其实与validate_password_policy的值有关,默认为1,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符
mysql> alter user root@"localhost" identified by '123qqq...A';
Query OK, 0 rows affected (0.00 sec)
mysql> quit
# mysql -hlocalhost -uroot -p'123qqq...A'
mysql> show databases;
一、数据库基本管理
1.修改密码策略
如果我们不希望密码设置的那么复杂,需要修改两个全局参数:validate_password_policy与validate_password_length。validate_password_length默认值为8,最小值为4,如果你显性指定validate_password_length的值小于4,尽管不会报错,但validate_password_length的值将设为4
mysql> show variables like "%password%";
mysql>set global validate_password_policy=0; //只验证长度
mysql>set global validate_password_length=6; //修改密码长度,默认值是8个字符
mysql> alter user user() identified by "123456"; //修改登陆密码
mysql> quit
# vim /etc/my.cnf //在配置文件设置永久有效
# systemctl restart mysqld
# mysql -hlocalhost -uroot -p'123456'
把数据存储到数据库服务器上的过程
连接数据库服务器---->建库-------------->建表-------------->插入记录---->断开连接
类似:(系统文件夹)—>(系统文件)—>(文件里的行)
常用的SQL操作指令:
DDL—数据定义语言(create、alter、drop)
DML—数据操作语言(insert、update、delete)
DCL—数据控制语言(grant、revoke)
DTL—数据事物语言(commit、rollback、savepoint)
库管理命令:
show databases; //显示已有的库
use 库名; //切换库
select database(); //显示当前所在的库
create database 库名; //创建新库
show tables; //显示已有的库
drop database 库名; //删除库
数据库命名规则:
可以使用数字、字母、下划线,但不能纯数字
区分大小写,具有唯一性
不可使用指令关键字、特殊字符
表管理指令:
create table 库名.表名(
字段名1 字段类型(宽度) 约束条件,
字段名2 字段类型(宽度) 约束条件,
…
字段名N 字段类型(宽度) 约束条件,
);
desc 表名; //查看表结构
select * from 表名; //查看表记录
drop table 表名; //删除表
表命名规则与数据库命名规则一样
记录管理命令:
select * from 表名; //查看表记录
insert into 表名 values(值列表); //插入表记录
update 表名 set 字段=值; //修改表记录
delete 表名; //删除表记录
例:
mysql> show databases;
mysql> create database studb;
mysql> use studb;
mysql> show tables;
mysql> create table studb.stuinfo(name char(10),age int); //如果在库里面可以直接写表名stuinfo
mysql> show tables;
mysql> desc studb.stuinfo;
mysql> select * from studb.stuinfo;
mysql> insert into studb.stuinfo values("bob",21),("tom",23);
mysql> select * from studb.stuinfo;
mysql> update studb.stuinfo set age=19 where name="bob";
mysql> select * from studb.stuinfo;
mysql> update studb.stuinfo set age=18;
mysql> select * from studb.stuinfo;
mysql> delete from studb.stuinfo where name="tom";
mysql> select * from studb.stuinfo;
mysql> delete from studb.stuinfo;
mysql> select * from studb.stuinfo;
mysql> drop tables studb.stuinfo;
mysql> show tables;
设置表使用的字符集
在MySQL表内存储中文数据时,需要更改字符集(默认为latin1不支持中文),以便MySQL支持存储中文数据记录;比如,可以在创建库或表的时候,手动添加“DEFAULT CHARSET=utf8”来更改字符集
例:
mysql> create database studb;
mysql> use studb;
mysql> show tables;
mysql> create table 学生表(姓名 char(3),年龄 int)
-> DEFAULT CHARSET=utf8; //手工指定字符集,采用utf8
mysql> insert into 学生表 values ("张三丰",19);
mysql> select * from 学生表;
MySQL 数据类型
整数型:
浮点型:
例:
mysql> create database db1;
mysql> use db1;
mysql> create table t1(
-> age tinyint unsigned,
-> pay float(7,2)
-> );
mysql> insert into t1 values(19,28000);
mysql> select * from t1;
字符类型:
1.定长:char(字符数) 确定多少个字符,用char
最大长度255字符
2.变长:varchar(字符数) 不确定多少个字符,用varchar
按数据实际大小分配存储空间
3.大文本类型:text/blob
字符数大于65535存储时使用
定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,尽管如此,char的存取速度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的
例:
mysql> use db1;
mysql> create table t3(
-> name char(3),
-> homedir varchar(15),
-> email varchar(30)
-> );
mysql> insert into t3 values
-> ("bob","beijing","[email protected]");
mysql> select * from t3;
日期时间类型
日期时间,DATETIME
占用8个字节
范围:1000-01-01 00:00:00.000000~9999-12-31 23:59:59.999999
日期时间,TIMESTAMP
占用4个字节
范围:1970-01-01 00:00:00.000000~2038-01-19 03:14:07.999999
日期,DATE
占用4个字节
范围:0001-01-01~9999-12-30
年份,YEAR
占用1个字节
范围:1901~2155
时间,TIME
占用3个字节 格式:HH:MM:SS
例:
mysql> use db1;
mysql> create table t4(
-> name char(10),
-> birthday date,
-> start year,
-> upwork time,
-> party datetime
-> );
mysql> desc t4;
mysql> insert into t4 values(
-> "bob",20181120,1990,083000,20181118203000);
mysql> select * from t4;
时间函数:
关于日期时间字段:当未给TIMESTAMP字段赋值时,自动以当前系统时间赋值,
而DATETIME字段默认赋值为NULL
YEAR年份处理:默认用4位数字表示,当只用2位数字赋值时,
01~69视为2001~2069
70~99视为1970~1999
例:
mysql> use db1;
mysql> create table t6(meeting datetime,party timestamp);
mysql> desc t6;
mysql> insert into t6(meeting) values(20181117095010);
可以在表名后面加只为哪一个条件赋值,其他的条件就会变成默认的
mysql> select * from t6;
枚举类型
1.从给定值集合中选择单个值,ENUM
定义格式:enum(值1,值2,值N)
从给定值集合中选择一个或多个值,SET
定义格式:set(值1,值2,值N)
例:
mysql> use db1;
mysql> create table t5;
mysql> create table t5(
-> name char(10),
-> hobby set("eat","sleep","game","film"),
-> sex enum("boy","girl","no")
-> );
mysql> desc t5;
mysql> insert into t5 values("bob","sleep","boy");
mysql> select * from t5;