zoukankan      html  css  js  c++  java
  • mysql数据库的基本操作(增删改查、字符集、校对集)

    录:
    1.数据库课程体系
    2.数据库基础知识
    3.关系型数据库
    4.关系型数据库的一些关键字
    5.SQL 语言
    6.mysql数据库
    7.mysql服务器数据对象---mysql的结构
    8.SQL基本操作 增删改查CRUD--库操作
    9.表操作
    10.数据操作
    11.中文数据问题(字符集问题)
    12.校对集
        

    MySQL数据库概述  

      MySQL数据库是经典的关系型数据库管理系统,MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。MySQL是一款由C和C++编写的开放源码的小型数据库,它为多种编程语言提供了API。
      关系型数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体和实体之间的各种联系均用关系模型来表示。标准数据查询语言SQL(Standard Query Lanague)就是一种基于关系数据的语言,这种语言执行对关系数据库中的数据的检索和操作。关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。简单来说,关系型数据库,就是由多张能互相连接的二维行列表格组成的数据库。
      数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
      简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。

    关系模型中常用的概念

      关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名
      元组:可以理解为二维表中的一行,在数据库中经常被称为记录
      属性:可以理解为二维表中的一列,在数据库中经常被称为字段
      域:属性的取值范围,也就是数据库中某一列的取值限制
      关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成
      关系模式:指对关系的描述。其格式为:关系名(属性1,属性2, ... ... ,属性N),在数据库中称为表结构。

    数据库事务

      事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。可以认为事物就是一组不可分割的SQL语句。
      事务的特性:也称为ACID特性。即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
          1.原子性:原子性是指事务中包含的所有操作要么都做,要么都不做,保证数据库是一致的。
          2.一致性:一致性是指数据库在事务操作前和事务处理后,其中的数据必须都满足业务规则约束。
          3.隔离性:隔离性是数据库允许多个并发事务同时对齐数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
          4.持久性:持久性表示为,事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
      事务有三种模型:
          1.隐式事务是指每一条数据操作语句都自动地成为一个事务,事务的开始是隐式的,事务的结束有明确的标记。
          2.显式事务是指有显式的开始和结束标记的事务,每个事务都有显式的开始和结束标记。
          3.自动事务是系统自动默认的,开始和结束不用标记。

      注:数据库事务必须具备ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性。

    数据库系统、数据库管理系统和数据库

      数据库系统(DataBase System)简称DBS,包括数据库(DataBase)简称DB、数据库管理系统(DataBase Management System)简称DBMS、应用系统、数据库管理员(DataBase Administrator)简称DBA 。所以DBS是个大的概念 ,DB是专门存数据的集合 ,DBMS是由DBA对DB的查询、更新、删除、修改操作的。DBMS用来操纵和管理DB的软件,用于建立、使用和维护DB。它对DB进行统一的管理和控制,以保证DB的安全性和完整性,用户可以通过DBMS访问DB中的数据,DBA也可以通过DBMS进行DB的维护工作,它可使多个应用程序和用户拥有不同的方法在同时或不同时刻去建立、修改和询问DB(也就是说DBMS可以将控制权发挥到极致(也就是所说的安全性))。 DB是长期存储在计算机内的有组织、可共享的大量的数据集合。它可以供各种用户共享,具有最小冗余度和较高的数据独立性。DB(数据库)是保存数据的容器,通常是一个文件或者一组文件,从SQL的角度看数据库就是一个以某种有组织的方式存储的数据集合。数据库通常是保存在硬盘上的文件,但也可以不是,至于数据库到底是什么其实并不重要,因为你并不直接访问数据库,你使用的是DBMS(数据库管理系统),诸如Oracle、MySQL等,它替你访问数据库。
      DBS中的"系统"是指能够提供一系列数据库相关服务组件的有机结合体。它应该包括:DB、DBMS(以及开发工具)、应用系统、DBA和用户构成。所以联系就是DBS包括DBMS和DB。Oracle就是数据库管理系统,也称之为关系型数据库管理系统(Relation Database Manager System),简称RDBMS。


    1.数据库课程体系    <--返回目录
        * 基础阶段: mysql数据库的基本操作,以及一些高级操作(视图、触发器、函数、存储过程等)和PHP操作mysql数据库
        * 优化阶段: 如何提高数据库效率,如索引,分表等
        * 部署阶段: 如何搭建真实的环境系统,如服务器集群,负载均衡
        
    2.数据库基础知识    <--返回目录
        * 什么是数据库?
            数据库:database,存储数据的仓库;高效地存储和处理数据的介质(磁盘和内存)
        * 数据库的分类
            基于存储介质的不同:分为关系型数据库(SQL)和非关系型数据库(NoSQL,Not only SQL)

        * 数据库产品:
            关系型:
                大型:oracle,DB2
                中型:SQL server,MySQL等
                小型:access等
            非关系型:
                memcached,mongodb,redis

        * 两种数据库阵营的区别?
            关系型数据库:安全(保存磁盘基本不可能丢失),容易理解,比较浪费空间(二维表存储)
            非关系型数据库:效率高,不安全(断电丢失)

    3.关系型数据库        <--返回目录
        * 定义:是一种建立在关系模型(数学模型)上的数据库
        * 关系模型:一种所谓建立在关系上的模型。关系模型包含三个方面:
            数据结构:数据存储的问题,二维表(有行和列)
            操作指令集合:SQL语句
            完整性约束:表内数据约束,表与表之间约束(外键)

        * 关系型数据库的设计:

        关系型数据库:从需要存储的数据需求中分析,如果是一类数据(实体)应该设计成一张二维表:表是由表头(字段名:用来规定数据的名字)和数据部分组成(实际存储的数据单元)

        二维表:行和列

      表头   字段名1 字段名2  
    数据单元   数据1   数据2   

      以实际案例来进行处理:分析一个教学系统,讲师负责教学,教学生,在教室教学生

    (1)找出系统中所有存在的实体:讲师表、学生表、班级表

    (2)找出实体中应该存在的数据信息

      讲师:姓名,性别,年龄,工资

      学生:姓名,性别,学号,学科

      班级:班级名称,教室编号

      关系型数据库:维护实体内部,实体与实体之间的联系

      实体内部联系:每个学生由姓名,性别,学号,学科信息

    姓名 性别 学号 学科 年龄
    张三 001 java 20
    李四 007 java 21

      第二行的所有字段,都是在描述张三这个学生(内部联系);第二列只能存储性别(内部约束)

      关系型数据库的特点之一:如果表中对应的某个字段没有值,但是系统依然要分配空间。所以关系型数据库比较浪费空间。

      实体与实体之间的联系:每个学生肯定属于某个班级,每个班级一定由多个学生(一对多)

      班级表

    班级编号 班级名称
    A001 java教学一班
    A002 java教学二班

      学生表(在学生表中添加一个班级字段来指向班级)

    姓名 性别 学号 学科 年龄 班级编号
    张三 001 java 20 A001
    李四 007 java 21 A002


    4.关系型数据库的一些关键字    <--返回目录
        * 数据库:database
        * 数据库系统:DBS(Database System):是一种虚拟系统,将多种内容关联起来的称呼
            DBS = DBMS +DB
        * DBMS(Database Management System)数据库管理系统
        * DBA(Database Administrator)数据库管理员

        * 行/记录 row/record,本质是一个东西,都是指表中一行(一条记录);
        * 列/字段:column/field

    5.SQL语言    <--返回目录
        * SQL:Structured Query Language,结构化查询语言(数据以查询为主,99%都是在进行查询操作)
        * SQL分为三个部分:
            - DDL:Data Definition Language,数据定义语言,用来维护存储数据的结构(数据库和表),
              代表指令:create,drop,alter等    【操作数据库和表结构】
            - DML:Data Manipulation Language,数据操作语言,用来对数据进行操作【操作表记录】
              代表指令:insert,delete,update等;
              DML内部又单独有一个分类DQL,Data Query Language数据查询语言,如select
            - DCL:Data Control Language,数据控制语言,主要负责权限管理,代表指令:grant,revoke等

    6.mysql数据库        <--返回目录
        * mysql数据库是一种c/s(客户端/服务器)结构的软件
        * 交互方式:
            1)客户端连接  mysql[.exe] [-hlocalhost] [-p3306] -uroot -p123
            2)发送SQL指令
            3)服务器接收SQL指令,处理SQL指令,返回操作结果
            4)客户端接收结果,显示结果
            5)断开连接  (exit  quit  q)

    7.mysql服务器数据对象---mysql的结构    <--返回目录
        * 将mysql服务器内部对象分成了四层:
            系统 DBMS --> 数据库 DB --> 表 table --> 字段 field

    8.SQL基本操作 增删改查CRUD create read update delete    <--返回目录
        * 将SQL的基本操作根据操作对象进行分类,分为三类:库操作,表操作(字段),数据操作

        * -- 双中划线+空格:单行注释,也可以使用 #

        * 库操作:对数据库的增删改查
    ==================新增数据库====================
        - 新增数据库 create database [if not exists] 数据库名 [库选项];
            ** 库选项:用来约束数据库
            ** 字符集设定:charset/character set 具体字符集
            ** 校对集设定:collate 具体校对集(数据比较的规则)
            ** 例子:create database mydb1 charset utf8;
            ** 创建中文数据库(建议不要使用中文命名数据库名)
                set names gbk;
                create database 中文 charset utf8;
            ** 如果数据库名字和关键字(或保留字)重复,使用反引号
                create database `database` charset utf8;

        - 创建新的数据库后,会在mysql安装目录的data文件夹下创建一个文件夹,名字就是数据库名
            每个数据库下,有一个db.opt文件,保存了库选项
                default-character-set=utf8     ==> 字符集
                default-collation=utf8_general_ci   ==>校对集,依赖字符集

    ==================查询数据库====================        
        - 查看所有数据库 show databases;
        - 查看指定部分的数据库:模糊查询
            show databases like 'mydb_';  下划线_匹配一个字符
            show databases like 'my%';     %匹配任意个字符
            show databases like 'information\_%';     使用转义
        - 查看数据库的创建语句
            show create database 数据库名;

    ==================修改数据库====================        
        - 数据库名字不可以修改
        - 可以修改数据库的库选项:字符集和校对集(校对集依赖字符集)
            alter database 数据库名 charset [=] utf8;
            alter database 数据库名 [default] character set [=] utf8;

    ==================删除数据库====================        
        - 删除数据库 drop database [if exists] 数据库名;


    9.表操作(操作表结构)    <--返回目录
    ==================新增数据表====================
        * 新增数据表
            create table [if not exists] [数据库名.]表名(
                字段名字 数据类型,
                字段名字 数据类型
            )[表选项];    

            - if not exists:如果表不存在,创建之;如果已经存在,不创建;
            -  表选项:
                字符集:charset/character set 具体字符集;
                校对集:collate 具体校对集;
                存储引擎:engine 集体引擎;
            - 例子:显示指定表所属的数据库
                CREATE TABLE [IF NOT EXISTS] test1.`tb_stu` (
                  `username` varchar(20) DEFAULT NULL,
                  `age` int DEFAULT NULL,
                  `password` varchar(50) DEFAULT NULL
                ) [ENGINE=MyISAM DEFAULT CHARSET=utf8];
            - 例子:先进入某个数据库环境,即隐式指定表所属数据库
                use test1;
                create table tb_stu1 (
                    username varchar(20),
                    age int
                )charset utf8;

    ==================查看数据表====================            
        * 查看所有表 show tables;
        * 模糊查询 show tables like '%s';
        * 查看表创建语句 show create table 表名;
            show create table 表名g
            show create table 表名G   将查到的结果旋转90度变成纵向

        * 查看表结构
            desc/describe 表名;
            show columns from 表名;        

    ==================修改数据表====================    
        * 修改表名 rename table tb_student  to tb_stu

        * 修改表选项
            alter table tb_stu charset [=] utf8;

        * 新增字段
            alter table tb_stu add [column] (字段名 数据类型) [列属性][位置];
                - 位置:
                    first:第一个位置
                    after 字段名:

                alter table tb_stu add (
                    sid int
                )first;

        * 修改字段类型 alter table 表名 modify 字段 数据类型 [列属性][位置];
            alter table tb_stu modify id varchar(32) after username;

        * 修改列名和列类型  alter table 表名 change 原列名 新列名 列类型 [列属性][位置];   可以同时修改列名和列类型        

        * 删除字段
            alter table 表名 drop 字段名;

    ==================删除数据表====================
        * drop table [if exists] 表名1[,表名2...];

    10.数据操作(操作表记录)    <--返回目录
        * 新增数据
            insert into tb_stu(username,password) values('zhangsan','123'),('lisi','123');
            insert into tb_stu values('zhangsan','123'),('lisi','123');

        * 查看数据     
            select * from tb_stu;
            select username, password from tb_stu;
            select * from tb_stu where username = 'zhangsan';

        * 更新数据
            update tb_stu set password = '456' where username = 'zhangsan';

        * 删除数据
            delete from tb_stu [where ...];

    11.中文数据问题(字符集问题)    <--返回目录
        * show character set; 查看服务器识别哪些字符集
        * 查看mysql数据库编码:show variables like 'char%';

        * set names gbk; 相当与下面三句 ===>
            SET character_set_client='utf8';
            SET character_set_connection='utf8';  
            SET character_set_results ='utf8';

        * character_set_connection ;连接层字符集,是字符集转变的中间者,如果统一了效率更高,不统一也没问题

    12.校对集    <--返回目录
        * 校对集:数据比较的方式
        * 校对集有三种格式:
            _bin:binary二进制比较,取出二进制位,一位一位比较,区分大小写
            _cs:case sensitive 大小写敏感
            _ci:case insensitive 大小写不敏感

        * 查看所有校对集 show collation;

        * 校对集应用:只有当数据产生比较的时候,校对集才会生效
            对比:使用utf_bin和utf8_general_ci两种不同校对集的效果

            -- 创建表,使用不同的校对集
            create table tb_collate_bin(
                name varchar(20)
            )charset utf8 collate utf8_bin;
            create table tb_collate_ci(
                name varchar(20)
            )charset utf8 collate utf8_general_ci;

            -- 插入数据
            insert into tb_collate_bin values('a'),('A'),('B'),('b');
            insert into tb_collate_ci values('a'),('A'),('B'),('b');

            -- 排序查找
            select * from tb_collate_bin order by name;  ABab 区分大小写
            select * from tb_collate_ci order by name;  aABb  不区分大小写

        * 当表已经有数据了,那么校对集修改无效
    --- 

  • 相关阅读:
    python学习:字符编码与转码
    python学习:文件操作
    python学习:基本运算符
    python学习:列表、元组、字典、集合
    python学习:基础知识
    linux常用命令
    hadoop手动安全模式
    System.getProperty("user.dir")的理解
    如何获取SpringBoot项目的applicationContext对象
    spring无法注入bean
  • 原文地址:https://www.cnblogs.com/xy-ouyang/p/13281987.html
Copyright © 2011-2022 走看看