数据库:
DB | 数据库 | 依照某个数据模型进行组织并存放到存储器中 |
DBMS | 数据库管理系统 | 用来控制和管理数据的服务软件 |
DBS | 数据库系统 | DB+DBMS=DBS,是一个计算机系统 |
MySQL (端口号3306)
特点
1. 适用于中小规模、关系数据库系统
2. 支持Linux和Windows等多操作系统
3. 支持C和C++编写,可移植性强
4. 通过API支持Python/Java/Perl/PHP等语言
主要应用环境 LAMP、LNMP、WNMP、WAMP ,再集群中用来存储检索数据
安装MySQL
1. 下载RPM包,前往官网下载,解压后,前往目录然后安装
yum -y install perl-JSON perl-Data-Dumper perl-Time-HiRes
rpm -Uvh mysql-community-*.rpm
2. 启动服务
systemctl restart mysql
3. 查看配置文件 /etc/my.cnf
数据存放目录 /var/lib/mysql
日志文件 /var/log/mysqld.log
4. 修改数据库管理密码
# 第一次进入刚刚创建的数据库
awk '/temporary password/{print $11}' /var/log/mysqld.log
mysql -hlocalhost -uroot -p'刚刚查看的密码'
# 这样就进入mysql操作界面,修改密码命令如下:
mysql>
set global validate_password_policy=0;
set global validate_password_length=6;
alter user root@"localhost" identified by "密码";
# 只检查密码的长度
# 密码长度不能小于6个字符
# 设置密码
数据库数据文件存放信息:
1. 数据库库文件存放位置 /var/lib/mysql/
2. 表文件就在对因的库文件目录下/var/lib/mysql/库名/。
3.可以用Linux系统命令在 /var/lib/mysql/ 创建一个目录,在mysql里面就会出现同名的库,而且可以在mysql界面中切换查看这个库,但是不能创建表,原因是权限,用mkdir创建的目录是root所有的,而不是mysql,所以mysql就没有权限创建表
管理库命令
查看有哪些数据库
show databases
查看库中有哪些表
show 库名.tables
进入某个数据库进行操作,下面命令中所有表前不写库名,默认是该库
use 库名
对库中的表 增删改查
创建一个表(如果写的库名就是当前所在库,那可以不写库名)
create table 库名.表名(
字段1 字段类型(宽度) 约束条件,
………………
字段n 字段类型(宽度) 约束条件
);
解释:
表后是一个括号,括号外分号结尾,这括号内所有数据就是一个完整表结构
括号内用 , (英文逗号) 分隔 每部分就是一个字段数据
一个字段就是数据中一列数据
字段表名可以是中文的,不过在 ) ; 中间加上 DEFAULT CHARSET=utf8 表中所有数据都支持中文。
删除某个表
drop 库名.表名;
查看当初创建某个表的信息
show create table 库名.表名;
查看表的结构信息
desc 库名.表名;
# 信息的字段含义如下
# 字段名 字段类型 是否为空 是否为主键 默认值 描述信息
附: 如果返回值是 Empty set (0.00 sec) 代表查找的表或者库中没有任何数据
对表内数据 增删改查(如果写的库名就是当前所在库,那可以不写库名)
增加新数据
insert into 库名.表名 values
("第一列值",……,"第n列值"),
…………
("第一列值",……,"第n列值");
解释:
这里一个括号内所有数据就是表中的一行数据,
括号中数据以 , (英文逗号) 分隔 每部分就是一行数据中对应列的值
所有数据添加完后,在最后一个括号外分号结尾
特: 只给具体的几列值进行赋值,其他列值使用默认,不过列名间用逗号隔开,但是不能有空格
insert into 表名(列名1,列名2……) values(数据1,数据2……);
删除某行数据
delete from 表 where 匹配条件;
# 如果没有where匹配限制,就会删除表中所有的数据信息
修改某行的某些字段的信息
update 库名.表名 set 字段1=值1,……,字段n=值n where 匹配条件;
# 如果没有where匹配限制,就会修改表中所有的行中对应字段的值
查看表中符合要求的字段信息,以及如何设置别名
select 字段 from 库名.表名 where 匹配条件;
# 如果没有where匹配限制,就会显示表中所有要求字段的值
# 如果想输入所有字段,就用*代替就可
select 字段1 相应别名1,字端2 相应别名2 …………
# 注意,别名不能时SQL语言的关键字
# 修改数据的时候,新数据不能和 约束、字段数据类型 有冲突,否则会导致无法添加!
字段类型
数值类型、字符型、时间型、枚举型
类型 | 范围(有符号) | 范围(没有符号) | 描述 |
整数类型 | |||
tinyint | -128 ~ 127 | 0 ~ 255 | 微小整数 |
smallint | -2^15 ~ 2^15-1 | 0 ~ 2^16-1 | 小整数 |
int | -2^23 ~ 2^23-1 | 0 ~ 2^24-1 | 整数 |
bigint | -2^31 ~ 2^31-1 | 0 ~ 2^32-1 | 整数 |
如果整数类型中存了一个小数,那么小数部分会四舍五入 | |||
小数类型 | |||
float | -2^23 ~ 2^23-1 | 0 ~ 2^24-1 | 单精度浮点数 |
double | -2^31 ~ 2^31-1 | 0 ~ 2^32-1 | 双精度浮点数 |
如果小数类型中存了一个整数,那么会自动在后面加上若干个0 | |||
如果数值超过范围,仅仅保存最大/最小值 |
注:
1. 在类型后面 空格+unsigned 就代表无符号存储,不写默认为有符号存储
2. 字符类型的宽度是限制存储多少,如果数据类型后面没有 (宽度) ,会报错
数值类型的宽度是控制显示长度,如果数据长度小于控制长度,会默认用0补齐,而存数据的多少取决于数据类型本身的设定,如果数据类型后面没有 (宽度) ,默认为显示11位的长度,最好把长度写成1,节约空间
字符类型
char(最多个数) (常用) | 最多存储存储个数最大写255个字符 |
每次定义的时候,固定了存储范围 | |
使用的时候不一定要写 (最大个数),不写默认为最多1个字符 | |
varchar(最多个数) | 最多存储65532个字符 |
会根据存储的具体多少分配空间,但是也不能超过规定范围 | |
必须写最多个数,不然报错 | |
text/blob 可以存超过65532个字符,用来存储大型数据信息 |
对比:
类型text和blob用于存放数据极大的数据,一般不用,所以主要对比char和varchar
不同点:
char执行效率比varchar高,varchar比char节约存储空间
所以现在用的最多的还是char,原因就是,相对于节约空间,人们现在更追求高效的速度。
相同点:
都不能超,char限定多少就是多少,varchar会根据实际存储,如果比原先定的小,分的空间也会小点
时间型 | 时间范围 | 数据书写格式 | 范例 |
datetime | 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999 | 年月日时分秒 | 20181015181615 |
timestamp | 1970-01-01 00:00:00.000000 ~ 2038-01-19 23:59:59.999999 | ||
date | 0001-01-01 ~ 9999-12-31 | 年月日 | 20181015 |
year | 1901-2155 | 年 | 2018 |
time | 00:00:00 ~ 23:59:59 | 时分秒 | 181615 |
然后用select查询结果就是:
+---------------------+------------+------+----------+
| 2018-10-15 18:16:15 | 2018-10-15 | 2018 | 18:16:15 |
+---------------------+------------+------+----------+
枚举类型
从给定的值中任选一个 | enum(值1,……值n) |
从给定的值中任选多个 | set(值1,……值n) |
在添加数据的时候,用 "" 标示出来,然后可以并且需要选多个的话,就在 "" 里面写多个然后用 , 分隔标示
属于一个整体的具体值,必须用' '引起来,不然系统会自动识别为字段名