人工智能(mysql)—— mysql基础知识

一、MySQL概述

    1、数据库定义

                数据库是一个存储数据的仓库

    2、数据库应用领域

                金融机构、游戏网站、购物网站、论坛网站 ...

    3、提供数据库服务的软件

            a、软件分类
                    MySQL、Mariadb、SQL_Server、Oracle、DB2、MongoDB ...
            b、生产环境中,如何选择使用哪个数据库
                 1)是否开源
                        开源软件:MySQL、Mariadb、MongoDB
                        商业软件:Oracle、DB2、SQL_Server
                 2)是否跨平台
                        跨平台:MySQL、Oracle、Mariadb、DB2、MingoDB
                        不跨平台:SQL_Server(Windows)
                 3)公司的类型
                        商业软件:政府部门、金融机构
                        开源软件:游戏网站、购物网站、论坛网站 ...

    4、MySQL特点

            a、关系型数据库
                1)关系型数据库的特点
                        数据是以行和列的形式去存储的
                        这一系列的行和列称为表
                        表中每一行叫一条记录
                        表中的每一列叫一个字段
                        表和表之间的逻辑关联叫关系
                2)示例
                    I、关系型数据库存储
                    
表1、学生信息表
姓名 年龄 班级
小白 10 六二班
小明 11 六一班

表2、班级信息表
班级 班主任
六二班 孔子
六一班 老子

                    II、非关系型数据库存储
                        以键值对形式存储
                            {"姓名":"小白","年龄":10,"班级":"六二班","班主任":"孔子"}
                            {"姓名":"小明","年龄":11,"班级":"六一班","班主任":"老子"}
            b、跨平台
                    可以在Unix、Linux、Windows上运行数据库服务
            c、支持多种编程语言
                    Python、Java、php ...

    5、数据库软件、数据库、数据仓库

            a、数据库软件
                    是一种软件,可以看得见,可操作,来实现数据库逻辑功能
            b、数据库
                    是一种逻辑概念,用来存放数据的仓库,通过数据库软件来实现,侧重存储
            c、数据仓库
                    数据仓库主要用于数据挖掘和数据分析

                    eg:网购
                        数据库: user --> 用户名和密码
                        数据仓库:哪个时间段用户登录量最多,哪个用户一年购物最多...

二、MySQL安装

    1、Ubuntu安装MySQL服务

        a、安装服务端
            sudo apt-get install mysql-server
        b、安装客户端    
            sudo apt-get install mysql-client
                依赖关系:
                    sudo apt-get update
                    sudo apt-get -f install   # 修复依赖关系
                    sudo apt-get install 软件包

    2、Windows安装MySQL服务

        a、下载MySQL安装包(windows)
                mysql-installer***5.7.***.msi
        b、双击、按照教程安装

    3、启动和连接MySQL服务

        a、服务端启动
                sudo /etc/init.d/mysql start         # 启动
                sudo /etc/init.d/mysql stop         # 停止
                sudo /etc/init.d/mysql restart      # 重启
                sudo /etc/init.d/mysql status       #查看当前状态
                sudo /etc/init.d/mysql reload      #重新加载配置文件
        b、客户端连接
             1)、命令格式
                    mysql -h主机地址 -u用户名 -p密码
                    mysql -hlocalhost -uroot -p123456
            2)、本地连接可省略 -h 选项

                    mysql -uroot -p123456

三、配置:更改库、表的默认字符集

    1、方法

            通过更改MySQL服务的配置文件来实现

    2、步骤

        a、获取root权限

                sudo  -i

        b、切换到配置文件所在路径

                cd  /etc/mysql/mysql.conf.d

        c、备份

                cp  mysqld.cnf  mysqld.cnf.bak

        d、用vi打开mysqld.cnf,在[musqld]下修改如下,并保存退出

                [musqld]
                character_set_server = utf8

        e、重启mysql服务

                /etc/init.d/mysql  restart

        f、退出超级用户   

                exit

        g、登录到mysql验证
                mysql  -uroot  -p123456
                create  datavase  库名;
                show  create  database  库名;

四、术语

    1、DB(database)

            DB就是数据库,存储数据的仓库

    2、DBMS(database  management  system)

            数据库管理系统
            管理数据库的软件:MySQL、Oracle、MongoDB ... ...

    3、DBS(database  system)

            数据库系统
            DBS = DB(存储) + DBMS(数据库软件) + 数据库应用(财务管理系统、认识管理系统) + 用户

五、数据类型

    1、数值类型

        a、整型(有符号signed  和 无符号unsigned)

            1)int 大整型(4个字节)
                    字段名 int
                    字段名 int  unsigned
                    取值范围:0~2**32 -1(42亿多)
            2)tinyint 微小整型(1个字节)
                    I、有符号(signed默认):-128 ~ 127
                    II、无符号(unsigned) : 0~255
            3)bigint 极大整型(8个字节)
                    取值范围:0 ~ 2**64 - 1
            4)smallint    小整型(2个字节)
                    取值范围(0 ~ 65535)

        b、浮点型

            1)float(4个字节,最多显示7个有效位)
                    I、用法
                            字段名 float(m,n)  m:总位数  n:小数位位数
                            float(5,2) 取值范围 -999.99 ~ 999.99
                    II、注意
                            浮点型插入整数时会自动补全小数位位数
                            小数位如果多余指定的位数,会对指定位的下一位进行四舍五入
            2)double(8个字节,最多显示15个有效位)
                    字段名 double(m,n)    m:表示总位数    n:小说位位数
            3)decimal(最多显示28个有效位)
                    I、用法
                            字段名 decimal(m,n)
                    II、存储空间(整数部分和小数部分分开存储)
                            规则:将9的倍数包装成4个字节                        
                                余数   字节
                                 1-2     1
                                 3-4     2
                                 5-6     3
                                 7-8     4

                        decimal(19,9)
                            整数部分:10/9=商1余1 4字节+1字节=5字节
                            小数部分:9/9=商1余0  4字节+0字节=4字节
                        decimal(43,11)
                            整数部分:32/9=商3余5  4字节+3字节=7字节
                            小数部分:11/9=商1余3  4字节+2字节=6字节

    2、字符类型

        a、char(定长)

                1)取值范围:1 ~ 255
                2)不给定宽度,默认为1

        b、varchar(变长)

                1)取值范围:1 ~ 65535
                2)注意:varchar没有默认宽度,必须给定一个宽度值

        c、char和varchar的特点

                1)char :     浪费存储空间,性能高
                2)varchar :节省存储空间,性能低

        d、text / longtext(4G)(存储大文本)

    3、数值类型的宽度和字符类型的宽度区别

            a、数值类型宽度为显示宽度,只用于select查询显示,和占用存储空间大小无关,用 zerofill 来显示效果
                    id int(3) zerofill
            b、字符类型的宽度超过则无法存储

    4、枚举类型

            a、定义
                    字段值只能在列举的范围内选择
            b、enum(... ) 单选(最多有65535个不同的值)

                    字段名  enum(值1,值2,... ,值N)

		create table info(sex enum("man","woman","secret"));
		insert into info values("man");
		select * from info;

            c、set(... )多选(最多有64个不同的值)
                    字段名  set(值1,值2,... ,值N)
                    插入记录时:“Python,boy,Mysql”

create table hobby(sex set("play","eat","python"));
insert into hobby values("play,python");
select * from hobby;

    5、日期时间类型

            a、year:年         YYYY
            b、date:日期     YYYY-MM-DD
            c、time:时间     HH:MM:SS
            d、datetime:   日期时间    YYYY-MM-DD HH:MM:SS
            e、timestamp:日期时间    YYYY-MM-DD HH:MM:SS
            f、注意:
                    插入记录时datetime字段不给值,默认返回NULL
                    插入记录时timestamp字段不给值,默认返回系统当前时间
            g、示例
create table infos( 
id int, name varchar(15) ,
age tinyint unsigned,  
birth_year year,
birthday date,
class time, 
meetting datetime 
);
insert into infos values (1,"大宝",40,1979,19790520,090000,20180609120933);
insert into infos values (2,"小爱",23,"1979","1979-05-20","09:00:00","2018-06-09 12:09:33");
select * from infos;

六、日期时间函数

        NOW()           返回服务器当前时间
        CURDATE()    返回当前日期
        CURTIME()     返回当前时间
insert into infos values(2,"小宝",25,"2001",CURDATE(),CURTIME(),NOW());
select * from infos;

    1、日期时间运算

        a、语法格式
            select ... from 表名
            where 字段名 运算符 (时间 - interval 时间间隔单位);
                    时间间隔单位:
                            1 day | 2 hour | 1 minute | 1 year | 3 month


            where meeting > (now() - interval 1 day);
                                            现在时间 - 1天的时间 = 1天前的时间点

        b、示例
            1、查询1天以内的记录
                select * from infos where meeting>(now()-interval 1 day);
            2、查询1年以前的记录
                select * from infos
                where meeting<(now()-interval 1 year);
            3、查询1天以前,3天以内的记录
                select * from infos where
                meeting<(now()-interval 1 day) and
                meeting>(now()-interval 3 day);

七、运算符操作(查询、修改、删除)    

    1、数值比较&字符比较&逻辑比较

            数值:= 、!= 、> 、>= 、< 、<=
            字符:= 、!=
            逻辑:and 、or

    2、范围内比较

            between 值1 and 值2
            in(值1,值2,...)
            not in(值1,值2,...)

    3、匹配空、非空

            a、空 :is null
            b、非空 :is not null
            注意:
                    1)NULL :空值,必须用 is 或者 is not 去匹配
                    2)""   :空字符串,只能用 = 或者 != 去匹配

    4、模糊比较

        a、where 字段名 like 表达式
        b、表达式
                1)_ :匹配单个字符
                2)% :匹配0到多个字符
        c、示例
1、名字中至少有2个字符的记录
	select * from sanguo where name like "_%_";
2、匹配名字为非空NULL的记录
	select * from sanguo where name like "%";
3、匹配名字中只有三个字符的记录
	select * from sanguo where name like "___";
4、匹配姓赵的记录
	select * from sanguo where name like "赵%";

    5、正则匹配查询regexp

            where  字段名  regexp “正则表达式”;
        a、正则表达式符号
                ^ :以 ... 开头
                $ :以 ... 结尾
                . :匹配任意一个字符
                [] :包含 ... 内容
                        [0-9]:匹配带数字的
                        [a-z]:匹配带小写字母的
                        [A-Z]:匹配带大写字母的
                * :星号前面的字符出现0个或多次
                          .:    :任意一个字符出现0次或多次
                        “^赵.*”:赵姓
        b、示例
1)select name from sanguo where name regexp "[0-9]";
# 匹配名字中带数字的的记录
2)select name from sanguo where name regexp "^[0-9]";
# 匹配名字中以数字开头的记录
3)select name from sanguo where name regexp "[0-9]$";
# 匹配名字中以数字结尾的记录
4)select name from sanguo where name regexp "^司.*懿$";
# 匹配名字中以司开头,以懿结尾的记录
5)select name from sanguo where name regexp " ...";
        c、说明
                mysql 5.7.21版本中,正则表达式中 . 匹配的是字节
                mysql 8.0... 版本中,正则表达式中 . 匹配的是字符

                5.7 版本: ^...$   "aaa" "貂"  "666"    #一个汉字 3个字节
                8.0 版本: ^...$   "司马懿"  "aaa"

八、附录1:数据库数据创建

为了方便,建立直接复制、黏贴一下代码,快速创建数据库和表。

create database MOSHOU;
use MOSHOU;
create table hero(
id int,
name char(15),
sex enum("男","女"),
country char(10)
)default charset=utf8;
insert into hero values
(1,"曹操","男","魏国"),
(2,"小乔","女","吴国"),
(3,"诸葛亮","男","蜀国"),
(4,"貂蝉","女","东汉"),
(5,"赵子龙","男","蜀国"),
(6,"魏延","男","蜀国");

use MOSHOU;
create table sanguo(
id int,
name char(20),
gongji int,
fangyu tinyint unsigned,
sex enum("男","女"),
country varchar(20)
)default charset=utf8;
insert into sanguo values
(1,'诸葛亮',120,20,'男','蜀国'),
(2,'司马懿',119,25,'男','魏国'),
(3,'关6羽',188,60,'男','蜀国'),
(4,'赵云666',200,66,'男','魏国'),
(5,'8孙权',110,20,'男','吴国'),
(6,'貂蝉',666,10,'女','魏国'),
(7,null,1000,99,'男','蜀国'),
(8,'',1005,88,'女','蜀国');

九、附录

        人工智能(mysql)—— 目录汇总





猜你喜欢

转载自blog.csdn.net/qq_27297393/article/details/80903076