数据库学习笔记

数据库

1. 基本概念

  1. 效据库( Database)是按照欻据结构来組织、存储和管理据的建立在计算机存储设备上的仓
    放据库;存储数据的仓库

  2. 分类:

    • 网络数据库
    • 层级数据库:层次结构模型实质上是一种有根结点的定向有序树(在数学中"树"被定义为一个无回的连通图)
    • 关系数据库:关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
    • 数据库的另外一种区分方式:基于存储介质
      • 存储介质分为两种:磁盘和内存
        • 关系型数据库:存储在磁盘中
        • 关系型数据库:存储在内存中
  3. 关系型数据库

    1. 关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理
      数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关
      系模型是由埃德加・科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此
      模型有一些批评意见,但它还是数据存储的传统标准。关系模型由关系数据结构关系操作集合关系完整性约束三部分组成。

    2. 关系数据结构:指的数据以什么方式来存储,是一种二维表的形式存储

      • 本质:二维表
      姓名年龄身高体重
      张三3018770
      李四4017560
    3. 关系操作集合:如何来关联和管理对应的存储数据,SQL指令

      • 获取张三的年级:已知条件为姓名

        Select 年龄 from 二维表 where 姓名=张三;

    4. 关系完整性约束: 数据内部有对应的关联关系,以及数据与数据之前也有对应的关联关系

      • 表内约束:对应的具体列只能放对应的数据(不能乱放)
      • 表间约束:自然界各实体都是有着对应的关联关系(外键)
  4. 经典关系数据库

    Oracle、DB2、 Microsoft SQL Server、 Microsoft Access、 MYSQL、 Sqlite.

    • 小型关系型数据库: Microsoft Access, SQLite
    • 中型关系型数据库: Spl Server ,Mysql
    • 大型关系型数据库: Oracle,DB2

2.SQL介绍

  1. 基本介绍:结构化查询语言( Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库査询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也
    是数据库脚本文件的扩展名。

    SQL就是专门为关系型数据库而设计出来的

  2. SQL分类:

    • 数据查询语言(DL: Data Query Language):
      • 其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。
        保留字 SELECT是DQL(也是所有SQL)用 得最多的动词,其他DQL常用的保留字有 WHERE
        ORDER BY, GROUP BY和 HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
        专门用于査询数据:代表指令 select/show
    • 数据操作语言(DML: Data Manipulation Language):
      • 其语句包括动词 INSERT, UPDATE和 DELETE。它们分别用于添加,修改和删刚除表中的行。也 称为动作查询语
        专门用于写数据:代表指令为insert,update,delete
    • 事务处理语言(TPL)
      • 它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括 BEGIN
        TRANSACTION, COMMIT和 ROLLBACK.(不是所有的关系型数据库都提供事务安全处理)
        专门用于事务安全处理:transaction
    • 数据控制语言(DCL):
      • 它的语句通过 GRANT或 REVOKE获得许可, 确定单个用户和用户组对数据库对象的访问。
        某些 RDBMS可用 GRANT或 REVOKE控制对表单个列的访问。
        专门用于权限管理:代表指令为 grant和 revoke.
    • 数据定义语言(DDL):
      其语句包括动词 CREATE和DROP。在数据库中创建新表或册除表( CREAT TABLE或DROP
      TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是
      动作查询的一部分
      专门用于结构管理:代表指令 create和drop(alter)

3.MySQL基本介绍

  1. MYSQL是一个关系型数据库管理系统,由瑞典 My SQL AB公司开发,目前属于 Oracle旗
    产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的
    RDBMS( Relational Database Management System,关系数据库管理系统)应用软件

  2. 特点:

    1. Mysql是一种开源免费的数据库产品
      Mysql对PHP的支持是最好(wamp或者lamp)
    2. Mysal中用到的操作指令就是SQL指令
  3. 登录和退出MySL系统

    • 通过客户端( mysql.exe)与服务器进行连接认证,就可以进行操作
      通常:服务端与客户端不在同一台电脑上

    • 登录

      1. 找到mysql.exe(通过cmd控制台:如果在安装的时侯指定了mysql.exe所在的路径为环
        境变量,就可以直接访;如果没有,那么就必须进入到mysql.exe所在路径)
      2. 输入对应的服务器地址:-h: host -h[IP地址/域名]
      3. 输入服务器中ys监听的端口:-P:port -P:3306
      4. 输入用户名:-u: username -u:root
      5. 输入密码:-p: password -p:root
      6. 连接认证基本语法:Mysql.exe/mysql -h 主机地址 - P端口 -u用户名 -p 密码
    • 退出

      断开与服务器的连接:通常Mysql提供的服务器数量有限,一旦客户端用完,建议就应该断
      开连接。
      建议方式:使用SOL提供的指令
      Exit; //exit带分号
      \q; //qut缩写
      Quit:

4.Mysql服务架构

  1. Mysql服务端架构有以下几层构成:

    • 数据库管理系统(最外层):DBMS,专门管理服务器端的所有内容
    • 数据库(第二层):DB,专门用于存储数据的仓库(可以有很多个)
    • 二维数据表(第三层): Table,专门用于存储具体实体的数据
    • 字段(第四层):Field,具体存储某种类型的数据(实际存储单元)
  2. 数据库中常用的几个关键字

    row(行)

    column(列->field)

5.SQL基本操作

1. 数据库基本操作:

1.库操作
  1. 创建数据库:

    基本语法:create database 数据库名字[库选项]

    --我是注释
    -- 创建数据库
    CREATE DATABASE mydatabase --创建数据库mydatabase
    

    库选项:数据库的相关属性

    字符集:charset 字符集,代表着当前数据库下的所有表储存的数据默认指定的字符集(如果当前不指定,那么采用DBMS默认的字符集)

    CREATE DATABASE mydatabase CHARSET gbk;
    
  2. 显示数据库

    • 每当用户通过SQL指令创建一个数据库,那么系统就会产生一个对应的存储数据的文件夹

      其实,每个数据库文件夹下都有一个opt文件,保存的是对应的数据库选项。

    • 显示所有数据库

      SHOW DATABASES;
      

      在这里插入图片描述

    • 显示部分

      基本语法:show databases like`匹配模式`;

      _ :匹配当前位置单个字符
      %:匹配指定位置多个字符

      获取以my开头的全部数据库:‘my%;
      获取m开头,后面第一个字母不确定,最后为 database的数据库;’ m_database;
      获取以 database结尾的数据库:’%database’,;

      -- 获取以my开头的数据库:
      SHOW DATABASES LIKE 'my%';
      
    • 显示数据库创建语句

      语法:```show create database 数据库名字

      -- 查看mydatabase数据库创建语句
      SHOW CREATE DATABASE mydatabase
      
  3. 选择数据库

    基本语法:use 数据库名字

    -- 选择mydatabase数据库
    USE mydatabase 
    
  4. 修改数据库

    • 修改数据库字符集(库选项)

      基本语法:alter database 数据库名字 charset =字符集

      -- 将mydatabse数据库的字符集设置为gbk
      ALTER DATABASE mydatabase CHARSET gbk;
      

      一旦修改成功,那么对应的opt文件中就会体现

    • 是否可以修改数据库名字?mysq15.5之前是可以修改的 rename命令;但是5.5之后就不可以了

  5. 删除数据库

    基本语法:drop database 数据库名字

    -- 删除一个名为a的数据库
    DROP DATABASE a
    

    刪除虽简单,但是切记要做好安全操作:确保里面数据没有间题。(重要)

    删除数据库之后:对应的存储数据库的文件夹也被会删除

2.表操作
  1. 创建数据表

    • 普通创建表

      基本语法:create table表名(字段名 字段类型 [字段属性],字段名 字段类型 [字段属性],…)[表选项]

      -- 创建一个班级表
      CREATE TABLE class(
      -- 字段名 字段类型
      -- 字段与表其实是分不开
      NAME VARCHAR(10) -- 10个字符(不能超过)
      );
      

      将表挂入到指定的数据库下的两种方法:

      • 在数据表名字前面加上数据库名字,用.链接 即数据库.数据表

        -- 将创建的表挂到mydatabase数据库
        create table mydatabase.class(
         name varchar(10);
      • 在创建数据表之前先进入到某个具体的数据库

        use mydatabase -- 先进入到mydatabase数据库
        -- 创建表
        CREATE TABLE class(
        NAME VARCHAR(10) -- 10个字符(不能超过)
        );
        

      表选项:

      • Engine:存储引擎,mysql提供的具体储存方式,默认有一个innodb(5.5以前默认是myisam)
      • Charset:字符集,只对当前自己表有效(级别比数据库高)
      • Collate:校对集
      CREATE TABLE class(
      -- 字段名 字段类型
      -- 字段与表其实是分不开
      NAME VARCHAR(10) -- 10个字符(不能超过)
      )engine [=] innodb/myisam charset gbk collate;
      
    • 复制已有表结构

      从已经存在的表复制一份(只复制结构:如果表中有数据不复制)
      基本语法: create table 新表名 Ilke 表名;

      只要使用数据库.表名就可以在任何数据库下访问其他数据库的表名

      -- 在 a数据库中创建一个与mydatabase数据库的class表结构相同的class2表
      USE a
      CREATE TABLE class2 LIKE mydatabase.class;
      
  2. 多维度显示数据表

    1. 显示数据表:

      • 每当一张数据表创建,那么就会在应的数据库下创建一些文件(与存储引擎有关)
        在这里插入图片描述

      • 显示所有表

        基本语法:show tables

      • 显示匹配表

        基本语法:show tables like ’匹配模式‘

        SHOW TABLES LIKE 'c%' --显示以c开头的表
        
    2. 显示表结构

      1. 本质含义:显示表中所包含的字段信息(名字,类型,属性等)

      2. 方式:

        • describe 表名
        • desc 表名
        • show columns for 表名

在这里插入图片描述

  • 查看表结构创建语句

       -- 查看数据表创建时的语句:此语句看到的结果已经不是用户之前自己输入的
       SHOW CREATE TABLE class
    
    1. 设置表属性

      表属性指的就是表选项: engine, charset 和 collate
      基本语法: alter table 表名 表选项 值;

      -- 将class表的字符集修改为gbk
      ALTER TABLE class CHARSET gbk
      
  1. 修改表结构

    • 修改表名字:rename table 旧表名 to 新表名

      RENAME TANLE class TO my_class;
      
    • 新增字段:alter table 表名 add column 新字段名 列类型 [列属性] [位置 first/after 字段名]

      ALTER TABLE my_class ADD id INT FIRST
      
      • 默认是加到表后面

      • 字段位置:字段想要存放的位置

        first:在某某之前(最前面),第一个字段

        after 字段名:放在某个具体的字段之后(默认的)

    • 修改字段名:alter table 表名 change 旧字段名 新字段名 字段类型【列属性】【新位置】

      ALTER TABLE my_class CHANGE NAME sex INT
      
      • 字段名的类型是必须的否则会报错
    • 修改字段类型(属性)alter table表名 modify 字段名 新类型【新属性】【新位置】

      ALTER TABLE my_class MODIFY sex VARCHAR(20)
      
    • 删除字段:alter table 表名 drop 字段名

      ALTER TABLE my_class DROP sex
      
    1. 删除表结构:

      drop table 表名 [,表名2…]

      DROP TABLE homan;
      -- 批量删除
      DROP TABLE homan,teacher;
      
3.数据操作
  1. 插入操作

    • 本质含义:将数据以SQL的形式存储到指定的数据表(字段)

    • 插入方式:

      • insert into 表名 (字段列表) values (对应字段列表)

        -- 向表中指定字段插入数据
        INSERT INTO my_teacher(NAME,age) VALUES('lihua',30);
        
        • 注意:后面( values中)对应的值列表只需要与前面的字段列表相对应即可(不一定与表结构完全一致)
        • 字段列表并不一定非要有所有的表中字段
      • insert into 表名 values (对应表结构)

        -- 向表中所有字段插入数据
        INSERT INTO my_teacher VALUES('xiaoming',20);
        
        • 值列表必须与字段列表一致
  2. 查询操作

    • 查询表中所有数据:select * from 表名 (* 表示匹配所有字段)

      SELECT * FROM my_teacher;
      
    • 查询表中部分字段:select 字段列表 from 表名

      -- 查询一个
      SELECT NAME FROM my_teacher;
      -- 查询多个
      SELECT NAME,age FROM my_teacher;
      
    • 简单条件查询数据:select 字段列表/* from 表名 where 字段名 = 值

      -- 获取年龄为30岁的人的名字
      SELECT NAME FROM my_teacher WHERE age = 30;
      
      • mysql 中没有==符号
  3. 删除操作

    • 基本语法:delete from 表名 [where 条件];

      -- 删除年龄为30的老师
      DELETE FROM my_teacher WHERE age=30;
      
      • 如果没有where 条件,意味着系统会自动删除该表所有数据(慎用)
  4. 更新操作(修改数据)

    • 基本语法:update 表名 set 字段名 = 新值 [where 条件];

      -- 更新xiaoming年龄为20
      UPDATE my_teacher SET age=20 WHERE NAME='xioaming';
      
      • 如果没有where 条件,那么所有的表中对应的那个字段都会被修改成统一值

2.字符集

1.字段集介绍
  1. 字符编码
    • 字符( Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等
      • 在计算机中所看到的任何内容都是字符构成的
    • 字符编码( character code)是计算机针对各种符号,在计算机中的一种二进制存储代号
  2. 字符集概念
    • 概念:字符集( Char acter set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同
    • 常见字符集名称: ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、 Unicode字符集等。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。中文文字数目大,而且还分为简体中文和繁体中文两种不同书写规则的文字,而计算机最初是按英语单字节字符设计的,因此,对中文字符进行编码,是中文信息交流的技术基础
2.mysql字符集设置
  • 如果直接通过cmd下的 mysql.exe进行中文数据插入,那么可能出错

  • 出错原因:

    1. 用户是通过 mysql.exe来操作 mysqld.exe
    2. 真正的SQL执行是 Mysqld. exe来执行
    3. mysql.exe将数据传入 mysqld.exe的时候,没有告知其对应的符号规则(字符集),而mysqld也没有能力自己判断
  • 解决方案:mysql.exe客户端在进行数据操作之前将自己所使用的字符集告诉 mysqld

    • cmd下的mysql.exe 默认只有一个字符集:GBK

    • Mysql. exe如果告知 Mysqld.exe对应的字符集类型为gbk?

      • 快捷方式: set names 字符集

        set names gbk;
        
      • 深层原理:客户端,服务端,连接层( show variables like ‘character_set_%’)

        Mysql.exe与 Mysqld.exe之间的处理关系一共分为三层
        客户端传入数据给服务端:client
        服务端返回数据给客户端: server

        客户端与服务端之间的连接:collection

        Set names字符集的本质。就是一次性打通三层关系的字符集,变得一致

  • 查看系统保存的三种关系处理字符集

    show variables like character set%
    
  • 查看一个新的客户端的对应的字符集

    show variables like 'cgaracter_set%'
    
  • 修改服务器端变量的名:set 变量名 = 值

    set character_set=gbk
    

3.列类型

1.整型
  1. 分类:整数类型,Tinyint(迷你整形,系统采用一个字节来保存的整形:一个字节=8位,最大能表示的数值是0-255),Smallint(小整形,系统采用两个字节来保存的整形;能表示0-6555之间),Mediumint(中整形,采用三个字节来保存数据),Int(整形(标准整形),采用四个字节来保存数据),Bigint(大整形,采用八个字节来保存数据),

  2. 无符号标识设定:

    基本语法:在类型后面加上一个 unsigned

  3. 显示长度:指数据(整型)在数据显示的时候,到底可以显示多长位。

    • 显示长度只是代表了数据是否可以达到指定的长度,但是不会自动满足到指定长度:如果想要数据显示的时侯,保持最高位(显示长度),那么还需要给字段増加一个 zerofill属性オ可
      以。
    • Zerofill:从左侧开始填充0(左侧不会改变数值大小),所以负数的时候就不能使用 zerofill
      旦使用 zerofill就相当于确定该字段为 unsigned
2.小数类型
  1. 分类:浮点型,定点型

  2. 浮点型:

    • 浮点型又称之为精度类型:是一种有可能丢失精度的数据类型,数据有可能不那么准确(由
      其是在超出范围的时候)
    • float:Float又称之为单精度类型:系统提供4个字节用来存储数据,但是能表示的数据范围比整
      型大的多,大概是10^438;只能保证大概7个左右的精度(如果数据在7位数以内,那么基
      本是准确的,但是如果超过7位数,那么就是不准确的)
    • double:Double又称之为双精度:系统用8个字节来存储数据,表示的范围更大,10^308次方,但
      是精度也只有15位左右。
  3. 定点数:

    • 定点数:能够保证数据精确的小数(小数部分可能不精确,超出长度会四舍五入)整数部分一定精确

    • Decimal:

      Decimal定点数:系统自动根据存储的数据来分配存储空间,每大概9个数就会分配四个字节来进行存储,同时小数和整数部分是分开的。

      • Decimal(M,D):M表示总长度,最大值不能超过65,D代表小数部分长度,最长不能超过30
3.时间日期类型
  1. 分类:Date,Time,Date,time,Timestamp,Year

  2. Date:

    日期类型:系统使用三个字节类存储数据,对应的格式为:YYY-mm-dd,能表示的范围是
    从1000-01-01到9999-12-12,初始值为0000-00-00

  3. Time:

    时间类型:能够表示某个指定的时间,但是系统同样是提供3个字节来存储,对应的格式为:
    HH:ii:ss,但是 mysql中的time类型能够表示时间范围要大的多,能表示从
    -838:59:59~838:59:59,在 mysql中具体的用处是用来描述时间段

  4. Datetime

    日期时间类型:就是将前面的date和time合并起来,表示的时间,使用8个字节存储数据,
    格式为 YYYY-mm-dd HH:ii:ss,,能表示的区间1000-01-01 00:00:00到9999-12-12 23:59:59,其
    可以为0值:00000-0000:00:00

  5. Timestamp:

    时间戳类型:mysql中的时间戬只是表示从格林威治事件开始,但是其格式依然是
    YYYY-mm-dd HH: ii: ss

  6. Year:

    年类型:占用一个字节来保存,能表示19002155年,但是year有两种数据插入方式:099
    和四位数的具体年

4.字符串类型
  1. 分类:Char,Varchar,Text,Enum

  2. Char:

    定长字符:指定长度之后,系统一定会分配指定的空间用于存储数据

    基本语法:char(L),L代表字符数(中文与英文字母一样),L长度为0到255

  3. Varchar:

    变长字符:指定长度之后,系统会根据实际存储的数据来计算长度,分配合适的长度(数据没有超出长度)

    基本语法: Varchar(L),L代表字符,L的长度理论值位0到65535

    • 因为 varchar I要记录数据长度(系统根据数据长度自动分配空间),所以每个 varchar数据产
      生后,系统都会在数据后面增加1-2个字节的额外开销:是用来保存数据所占用的空间长度
      如果数据本身小于127个字符:额外开销一个字节;如果大于127个,就开销两个字节
  4. Text

    • 文本类型:本质上mysql提供了两种文本类型:

      • Text:存储昔通的字符文本
      • Blob:存储二进制文本(图片,文件),一般都不会使用blob来存储文件本身,通常是使用一个链接来指向对应的文件本身。
    • Text:系统中提供的四种text

      • Intext:系统使用一个字节来保存,实际能够存储的数据为:2^8+1
      • Text:使用两个字节保存,实际存储为:2^16+2
      • Mediumtext:使用三个字节保存,实际存储为:2^24+3
      • Longtext:使用四个字节保存,实际存備为:2^32+4
    • 注意:

      1. 在选择对应的存储文本的时候,不用刻意去选择text类型,系统会自动根据存储的数据长度来选择合适的文本类型。
      2. 在选择字符存储的时候,如果数据超过255个字符,那么一定选择text存储
  5. Enum:

    • 枚举类型:在数据插入之前,先设定几个项,这几个项就是可能最终出现的数据结果。
      • 如果确定某个字段的数据只有那么几个值:如性别,男、女、保密,系统就可以在设定字段
        的时候规定当前字段只能存放固定的几个值:使用枚举
      • 基本语法:enum (效据值1,数据值2)
      • 系统提供了1到2个字节来存储枚举数据:通过计算enum列举的具体值来选择实际的存储
        空间:如果数据值列表在255个以内,那么一个字节就够,如果超过255但是小于65535,
        那么系统采用两个字节保存。
  6. Set

    集合:是一种将多个数据选项可以同时保存的数据类型,本质是将指定的项按照对应的二进制位来进行控制:1表示该选项被选中,0表示该选项没有被选中

    基本语法:基本语法:set(‘值1’,‘值2’,‘值3’…)

    • 系统为set提供了多个字节进行保存,但是系统会自动计算来选择具体的存储单元
      • 1个字节:set只能有8个选项
      • 2个字节:set只能有16个选项
      • 3个字节:set只能表示24个选项
      • 8个字节:set可以表示64个选项
    • set和enumー样,最终存储到数据字段中的依然是数字而不是真实的字符串
  7. Mysql 记录长度:

    • 在 mysql a中,有一项规定:mvsq인的记录长度( record=行row)总长度不能超过655355个字节。

    • Varchar I能够存储的理论值为65535个字符:字符在不同的字符集下可能占用多个字节。

      • Ut8最多只能存储21844个字符
      • GBK最多只能存储32766个字符
5.列属性:
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值