####################################################################################
什么是数据库:
DB,DataBase
--》数据库 :依照某种数据模型进行组织并存放到存储器的数据集合。
DBMS,DataBase Management System
--》数据库管理系统:用来操纵和管理数据库的大型服务软件。
DBS,DataBase System
--》数据库管理系统:即DB+DBMS,指带有数据库并整合了数据库管理软件的计算机系统。

常见的数据库软件?

关系型数据库软件服务软件(RDBMS):
Oracle(甲骨文):Oracle(商业软件),Mysql
Microsoft(微软):SQL Server(商业软件)
IBM:DB2(商业软件)
非关系型数据库服务软件(NoSQL):(key-values键值对类型)
redis     mongodb

mysql的特点:
--》适用于中小规模,关系型数据库
--》跨平台
--》通过API支持Python/Java/Perl/PHP等语言

应用环境:
LAMP LNMP

#####################################################################################################

一、搭建数据库服务器:
装包:Mysql
rpm -qa  | grep  -i  mysql

修改配置文件:
#ls /etc/my.cnf                    //主配置文件
#ls /var/lib/mysqld                //数据库的存储目录
#cat /var/log/mysqld.log          //日至文件

启动服务:
#systemctl start mysqld

查看服务运行状态:
#netstat -lnpt | grep :3306    //端口号:3306
#ps -C mysqld
#systemctl status mysqld

使用初始密码登陆数据库:
#grep  password  /var/log/mysqld.log
#mysql -hlocalhost -uroot -p密码                       //初始密码中如果含有特殊字符应该使用单引

二、进入数据库之后
修改登陆密码:
#show databases;                                    //提示需要修改密码才能使用
#alter user root@localhost identified by123456;          //提示密码不符合安全性要求
#set global validate_password_policy=0;                //设置只验证长度
#set global validate_password_length=6;                //设置长度默认值为8个字符
#alter user root@localhost identified by123456            //设置成功
#quit                                                //退出

验证:
#mysql -hlocalhost -uroot -p123456                    //登陆成功。

永久设置密码验证策略:
#vim /etc/my.cnf
[mysql]
validate_password_policy=0
validate_password_length=6

#####################################################################################

三、sql命令的使用规则:
--》命令不区分大小写(变量,密码除外)
--》每条命令以分号结尾
--》不支持Tab补齐
--》\c可废弃当前编辑错的操作命令

四、数据库基本管理:
库管理:
#mysql -uroot -p123456
#show databases;            //查看已有库
#create database 库名;        //创建库
#drop database 库名;        //删除库
#use 库名;                //使用库
#select database();        //查看当前所在库
#show tables;            //查看当前库里已有的表

建表:
create table 库名.表名(
字段名 类型(宽度) 约束条件,
字段名 类型(宽度) 约束条件,
...
);
create table gamedb.stuinfo(
name char(10),
age  int
);

查看表结构:
desc 库名.表名;

插入表记录:
insert into 库名.表名 values(值列表);
insert into gamedb.stuinfo values(“dcc”,23);

查看表记录:
select * from 库名.表名;

删除表记录:
delete from 库名.表名;            //删除所有表中记录,但表还在

删除表:
drop 库名.表名




#####################################################################################################

五、mysql数据类型

支持的数据类型有哪些?
数值类型 字符类型      日期时间类型    枚举型

1、数值类型:整型,浮点型
根据存储数值的范围整型类型分为:
tinyint    1字节     -128~127(有符号)    0~255(无符号)
smallint     2字节    -32768-32767        0~65535
mediumint     3字节
int         4字节
bigint    8字节
//规律:无符号范围为2的n次方-1,n表示位,1字节为8位
根据存储数值的范围浮点型分为:
单精度float(n,m)        4字节
双精度float(n,m)        8字节
//其中n代表总位数
//m代表小数位的位数

create table t1(
pay float(5,2)
);

inserte into t1 values(199.99);        //总位数为5位,小数点后2位

注意:
使用unsigned,表示使用无符号数
输入整数时,会自动补全小数位
宽度仅是显示宽度,存数值的大小由类型决定
数值超出范围,报错

¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

2、字符类型:
定长:char(字符数)
--》最大长度255
--》不够指定的字符数在右边用空格补齐
--》字符数超出设定,无法写入

变长:varchar(字符数)
--》按照实际大小分配存储空间
--》字符数超出设定,无法写入

大文本类型:text/blob
--》字符数大于65535存储时使用

¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

3、日期时间类型:   
年        year        YYYY               2017
日期      date         YYYYMMDD            20171220
时间      time         HHMMSS                155145
 
日期时间
datetime   YYYYMMDDHHMMSS
timestamp YYYYMMDDHHMMSS
 
datetime与timestamp区别?
当未给timestamp字段赋值时,自动以当前系统时间赋值
当未给datetime字段赋值时,默认赋值为null
 
使用2位数字给year字段赋值的规律?
01~69为2000~2069
70~99为1970~1999
 
使用时间函数给日期时间类型的字段赋值。
now():当前时间           year():当前时间的年份      month():当前时间的月份  
day():当前时间的天      date():当前时间的年月日      time():当前时间的时分秒

¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

4、枚举类型:
enum:从给定值集合中取单个值        格式:enum(值1,值2,值N)
set:从给定值集合中取一个或多个值    格式:set(值1,值2,值N)

#########################################################################################

六、约束条件:
null:    允许为空,默认设置
not null:    不允许位空
key:        索引类型
default:    设置默认值,缺省为null    

create table t3(
name char(10) not null,           //字段名为name,类型为字符类型,宽度为10,设置不能为空
age  tinyint unsigned default 23  //字段名为age,类型为微小整数,无符号(不能为负),默认值为23
);

desc t3;                        //查看表结构
insert into t3(name) values(“dcc”);    //插入,仅给name字段赋值
select * from t3;                    //结果,age字段会取默认值23

####################################################################################

七:修改表结构:
alter table 表名 执行动作;

1、添加新字段:
add   字段   类型(宽度);
add   字段   类型( 宽度) 约束条件;
add   字段   类型( 宽度) 约束条件  first;            //插入到第一列
add   字段   类型( 宽度) 约束条件  after 字段名;        //插入到指定字段后

2、删除字段:
drop 字段名;

3、修改字段类型:
modify 字段 类型(宽度) 约束条件;

4、修改字段名:
change 原字段  新字段 类型(宽度) 约束条件;        //修改时,保持原始的类型(宽度) 约束条件。

修改表名:
alter table 原表名 rename 新表名;

################################################################################################