数据库简介

  概念:电子化的文件库,储存电子文件的场所,户可以对文件中的数据运行新增、截取、更新、删除等操作.

  用途:用于存储生活中的一切数据.

  分类:

    关系型数据库:MySql (1.MariaDB:mysql的替代品2.Percona Server:mysql的替代品),Oracle,SQL Server....

    非关系型数据库:MongoDB,Redis...

    SQL:Structured Query Language,结构化查询语言

    命令:

      数据定义语言(DDL):创建、删除、修改库或表

      数据操作语言(DML):增、删、改

      数据查询语言(DQL):查

      数据控制语言(DCL):授权、取消授权

      数据事务语言(DTL):开启事务、提交事务、操作回滚

MySql安装

  安装过程

    双击MySQL安装程序:mysql-installer-community-5.7.20.0.msi  链接:https://pan.baidu.com/s/1zExALDR_n7xH3Y_-iNTW8Q 密码:wq8b

    选择自定义安装:custom

    选择安装的版本:MySQL Server5.7.20 -X64

    点击Excute执行安装

    设置root密码

    点击Excute执行配置

    点击Finish完成安装

  成功测试

    查看系统服务:services.msc

    连接测试:mysql -h host -u root -p

      -h:指定主机

      -u:指定用户

      -p:指定密码,建议输入密码时分两步,这样可以隐藏密码

      示例:mysql [-h127.0.0.1] -uroot -p,敲回车,然后根据提示输入密码即可

        端口:3306

        退出:exit

        帮助:help\h

        说明:几乎所有命令都是以';'结束

  敲mysql命令无反应

    说明:那是因为没有将该命令所在目录添加到系统环境变量Path下

    添加:

      打开系统环境变量设置页面

      将mysql命令所在的目录添加到系统环境变量Path下

      保存即可

      新添加的环境变量在已经启动的终端是无效,重启一个新的终端即可

数据定义语言:

  查看库: show databases; 会显示当前所有数据库.

  创建库:create database test;创建数据库test.

  删除库:drop database test;删除数据库test.

  选择库:use test;选择数据库test.

    查看当前使用的数据库

      show tables;(至少该数据库中有一个数据表时才能查看到)

      select database();

  查看表:show tables; 查看当前数据库中的所有表.

  创建表:create table students(

                id int unsigned auto_increment not null primary key,

                name varchar(20) not null,

                age tinyint not null

               );

  查看表结构:desc students;

  查看创建方式:

    查看库:show create database test;

    查看表:show create table students;

  删除表:drop table students;

  指定字符集:

    创建时指定:create table xxx()engine=Innodb charset=utf8;

    修改配置文件:

      win:C:\ProgramData\MySQL\MySQL Server 5.7\my.ini

      linux:/etc/mysql/mysql.conf.d/mysqld.conf

      字符集:charactert-set-server=utf8

      存储引擎:default-storage-engine=INNODB

 

    重启配置服务才生效

  修改字段:

    alter table students modify name varchar(30);不能修改字段名

    alter table students change name username varchar(25);可以修改字段名

  添加字段

    默认在末尾添加:alter table students add birthday date;

    在指定字段后添加,alter table students add address varchar(50) after id;

    在开头添加字段:alter table students add teacher varchar(20) first;

  删除字段

    alter table students drop teacher;

  修改字段位置及名称:add/modify/change

    alter table students modify age tingint first;

  修改表名

    alter table students rename stu;

数据类型

  整形:

    int:4个字节 范围(-2147483648~2147483647)

    tinyint:1个字节 范围(-128~127)

    smallint:2个字节 范围(-32768~32767)

    mediumint:3个字节 范围(-8388608~8388607)

    bigint:8个字节 范围(+-9.22*10的18次方) 

    xxint unsigned:取值范围变成0~最大值的两倍

  浮点型:

    float(m,d):单精度浮点型 8位精度(4字节)m表示总个数,d表示小数个数

    double(m,d):双精度浮点型 16位精度(8字节)m表示总个数,d表示小数个数

    补充:

      1.浮点数存在误差,

      2、对货币等对精度敏感的数据,应该用定点数表示或存储

      3、编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较

      4、要注意浮点数中一些特殊值的处理。

  定点数: 

    浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。

    decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。

  字符串

    char(n):固定长度,最多255个字符

    varchar(n):固定长度,最多65535个字符

    tinytext:可变长度,最多255个字符

    text:可变长度,最多65535个字符

    mediumtext:可变长度,最多2的24次方-1个字符

    longtext:可变长度,最多2的32次方-1个字符

    char和varchar:

      1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。

      2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),

      所以varchar(4),存入3个字符将占用4个字节。3.char类型的字符串检索速度要比varchar类型的快。

    varchar和text:    

      1.varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字

      节。

      2.text类型不能有默认值。

      3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。

    二进制数据(_Blob):

      1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。

      2._BLOB存储的数据只能整体读出。

      3._TEXT可以指定字符集,_BLO不用指定字符集。

    日期时间类型:

      date:日期,格式2018-11-05

      time:时间,格式20:37:38

      datetime:日期时间,格式2018-11-05 20:37:38

      timestamp:时间戳

      year:年,只占用一个字节,年份:1901~2155

    复合类型:

      set:集合类型,格式:set(s1,s2,...,s63),最多63种可能

      enum:枚举类型,格式:enum(e1,e2,...,e65535),最多65535种可能

    字段修饰:

      unsigned:无符号数

      zerofill:高位0填充,防止出现负数

      auto_increment:自动增加(1),用于整数,多与主键共用

      defalt:默认

      not null:不能为空

  字符集:

    查看系统字符集:show character set;通常我们只用utf8.

  存储引擎

    查看系统支持存储引擎:show engines;

    常用存储引擎InnoDB和MyISAM

  索引

    说明:简单理解就是一本书最前面的目录,可以提高读取效率,但也不是说越多越好。

    分类:

      普通索引(index):最基本的索引

      唯一索引(unique):修改的字段不能重复

      主键索引(primary key):是一种特殊的唯一索引,一张表中最多只能由一个字段设置.

      全局索引(fulltext):对全局数据进行添加索引

    示例:

      alter table stu add index(age);            给age字段添加普通索引

      alter table stu add unique(username);给username字段添加唯一索引

      alter table stu drop index age;   删除age字段的普通索引

      当删除主键索引时,应先取消其自增,再删除索引;

      例如:alter table stu modify id int;

        alter table stu drop primary key;

      alter table stu add primary key(id);   给id添加主键索引

    创建表时直接指定:

      create table user(

              id int auto_increment,

              name varchar(20),

              primary key(key),

              unique(name)

              )engine=innodb default charset=utf8;

数据操作语言(DML):

  说明:在大多数的操作中,使用的都是增删改查(CURD)

  准备:一张用于测试的表

    create table star(

            id int auto_increment,

            name varchar(20) not null,

            money float not null,

            province varchar(40) default null.

            age tinyint unsigned not null,

            sex tinyint not null,

            primary key(id)

            )engine=innodb default charset=utf8;

  插入数据

    方式1:不指定字段,添加数据时需要写完整所有的字段

    insert into star values(1,"刘亦菲",8888888,'武汉',20,1);

    可以一次插入多条数据,一条数据需要使用一个()包括起来

    方式2:指定字段,只需要传递指定字段的值,

    insert into star(name,money,age,sex,province) values("赵丽颖",77777777,30,"河北");

    插入数据的顺序要与前面指定的字段名一致

    注意:

      插入数据时可以不传值的字段

        自增的字段

        有默认值的字段

        可以为空的

    说明:插入数据时,第二种较常用

  查询数据:select * from star;

  修改数据:update star set age=31,money=999999999 where id=1;

  警告:修改数据时,一定不要忘了指定条件.

  删除数据:delete from star where id=1;

  警告:删除数据时,一定不要忘了指定条件.