zoukankan      html  css  js  c++  java
  • 26.mysql数据库基础

    数据库基本概念

    1.数据库是什么

    ​ 存储数据的仓库

    ​ 1.列表 字典....等等 都是内存中的 缺点:断电丢失 优点:速度快

    ​ 2.文件存储 缺点:速度慢 优点:可以实现永久保存

    ​ 本质就是一套基于CS结构的 客户端和服务器程序,最终的数据存储在服务器端的磁盘中

    2.为什么要使用数据库

    直接使用文件存储带来的问题

    1.速度慢

    2.我们的程序将来 可能后分布在不同的机器上

    ​ 单台机器 性能肯定有上限,如果一台机器不能够满足,你可以用多个机器共同完成任务

    ​ 分布式 每个服务器提供不同的服务,有时候某个业务流程可能会涉及到多个服务器

    ​ 优点: 耦合度降低 易维护,缺点:通讯繁琐,容灾性没有集群好

    ​ 集群 所有服务器提供的服务是一模一样的, 其优点:容灾性强,易扩展 可插拔

    ​ 问题:数据分布在不同机器上 如何访问? 通过网络 访问

    1. 用户权限管理

    2. 多个客户端并发访问 数据要保证安全

      数据库的分类

      分为

      1.关系型数据库

      ​ 数据之间可以村存在关联关系 数据库会帮我们维护这种关系

      ​ 通常存储介质都是磁盘

      ​ 常见的关系型:

      mysql

      ​ 是我们学习的重点: 是目前最流行的关系型数据库,因为其免费开源,性能不错

      ​ 目前已经被oracle收购了, 适用于中小型企业

      sqlserver

      ​ 是微软推出的, 因为其只能运行在windows平台所以发展不咋地

      oracle sun

      ​ 目前最强大的关系型数据库,主要是在集群,和用户管理上,非常适合大型企业

      db2

      ​ IBM的产品,主要面向企业级用户,不差钱的用户 捆绑硬件销售

      2.非关系型数据库

      ​ 没有能帮我们维护数据之间的关系,

      ​ 通常存储介质都是内存

      ​ 常见的非关系型:

      ​ mongoDB

      ​ redis

      ​ memcache

      数据库重要概念

      数据(Column) 文件中的某个字符串

      记录(Row) 文件中的某一行

      表(Table) 某个文件

      库(DataBase) 就是一个文件夹

      DBMS 数据库管理系统 (指的就是数据库软件)

      数据库服务器 运行DBMS的计算机

    3.安装数据库

    ​ 采用压缩包的方式来安装,解压到本地即可

    ​ bin 存储所有执行文件

    ​ data 存储数据的位置

    简单的使用步骤:

    ​ bin下有 mysqld.exe 是服务器端程序 mysql.exe是客户端程序

    ​ 需要先运行mysqld.exe

    ​ 运行客户端时,如果直接双击运行进入游客模式

    ​ 正确的运行方式 是在终端里指定 用户名密码等参数

    ​ 常见的参数 -h 主机名称 如果是本机 可以忽略

    ​ -P 指定端口 默认3306 可以不写

    ​ -u 指定用户名

    ​ -p 指定密码

    添加环境变量

    注册系统服务

    注册 mysqld --install

    删除 sc delete mysql (注意 是服务名称不是文件名称)

    启动服务 net start mysql;

    停止 服务 net stop mysql;

    查找某个进程

    tasklist | findstr mysqld

    杀死进程

    taskkill /f /pid 111111

    4.mysql 5.6管理员密码的设置

    1.知道原始密码

    ​ 1.1登录到mysql,进入到mysql数据库,执行更新语句来修改

    	update user  set password = password("123") where host="localhost" and  user="root";
    

    ​ 刷新全新 flush privileges; 或者重启mysqld

    ​ 2.2 mysqladmin小工具

    ​ mysqladmin -uroot -p123 password 321

    ​ -p是原始密码

    2.不知道原始密码

    ​ 2.1删除权限相关的文件 (容易挨打)

    ​ 2.2 跳过授权表

    ​ 手动启动mysqld 指定参数

    ​ mysqld --skip-grant-tables

    ​ update user set password = password("111") where host="localhost" and user="root";

    ​ 重启mysqld 即可

    5.简单的使用

    数据必须找个文件存起来 也就是表 , 表必须存在于库中也就是文件夹

    第一步应该创建数据库 创建表

    库的操作

    #切换数据库 
    use 数据库名称   可以不加分号
    
    #查看所有数据库
    show databases;
    show create databases; #查看数据库详细信息 
    
    #创建新的数据库 
    create database 数据库名称;   
    create database 数据库名称 charset utf8;     # 指定编码方式 
    
    # 删除数据库 
    drop database 数据库名称; 
    
    #修改数据库编码  可以进入到数据库文件夹中修改db.opt  
    #第一行是编码 第二行是排序规则 自己搜索一个
    
    
    #修改数据库名 可以直接修改对应的文件夹名称  
    

    命名规范:

    1.不区分大小写

    2.不要使用关键字 例如create select 等.....

    3.不能使用纯数字

    4.可以下滑线 通常字符下滑线数字的组合

    表的操作

    #创建表
    create table 表名称(列名称 列的数据类型,列名称2 类型2,....) charset gbk;
    # 指定编码
    create table 表名称(列名称 列的数据类型,列名称2 类型2,....) charset gbk;
    
    #查看当前库下所有表  
    show tables;
    
    #查看表结构  
    desc 表名称;
    #查看表的创建语句 
    show create table 表名称;
    
    
    # 删除表 
    drop table 名称;
    # 清空表数据   重建表
    truncate table 名称;
    
    
    # 修改表结构 
    # 添加字段 
    alter table 表名 add 列名称  数据类型;
    # 删除字段  
    alter table 表名 drop 列名称;
    # 修改数据类型 
    alter table 表名 modify 列名称 新的数据类型;
    # 修改列名
    alter table 表名 change 旧的列名  新的列名称 新的类型;
    
    
    # 修改表的名称
    rename table 旧名称 to 新名称;
    
    # 修改编码  
    alter table 表名 charset utf8;
    

    7.配置文件的使用

    配置文件需要放在 安装目录的根目录,bin同一级

    文件名称:my.ini

    内容和使用 cfg格式 即 section+option

    [mysqld] 分区服务器端配置 修改后需要重启服务器

    [mysql] 客户端配置 修改后需要重连

    统一编码方式 配置文件如下:

    # 客户端   除了mysql之外的     客户端的配置修改后  只需要退出重新连接即可
    [client]
    user = root
    password = 111
    default-character-set = utf8
    
    # 服务器端配置 需要重启服务器
    [mysqld]
    character-set-server = utf8
    

    8.表的分类 数据库引擎

    引擎是什么?

    引擎就是一个系统最核心的部分,比如汽车的发动机,人的心脏

    数据库引擎指的是真正的负责存储数据的模块:

    不同的引擎具备不同的特点: 需要根据实际需求来选择最合适的

    补充: SQL 全程是结构化查询语句,在关系型数据库中是通用的

    查看支持的引擎:

    show engines;

    创建表指定引擎

    create table 名称(字段 类型 ) engine = XXXX;

    默认的也是最常用的引擎是innodb

    简单的增删改查 CRUD *****

    插入数据   
    insert into   表名  values(v1,v2,....)  # 该方式必须保证 插入的数据个数与 表格字段一 一对应  
    insert into   表名(字段名称1,字段名称2)  values(v1,v2)  # 该方式必须保证 插入的数据个数与 必须与指定的字段一 一对应
    insert into   表名(字段名称1,字段名称2)  values(v1,v2),(v1,v2) # 同时插入多条记录
    
    查询  
    select * from 表名; # *表示全部字段     查询所有记录 
    select 字段 from 表名 where 条件;
    
    更新:
    update 表名  set 字段名称=新的值,字段名称2=值2;   #修改所有记录
    update 表名  set 字段名称=新的值,字段名称2=值2  where 条件 ;   #修改满足条件的记录
    
    删除数据 
    delete  from 表名 ;   #删除所有记录 
    delete  from 表名 where 条件;   #删除满足条件的记录 
    
    #### 练习
    创建 student表 包含  姓名 性别  年龄 三个字段
    把你周围的4个同学的数据插入表中   
    把你左边的同学的 性别改为 woman  
    删除右边的同学  
    查看所有 年龄 大于 20的 人员 
    
    
    补充: 修改数据库的语法  
        alter database  数据库名称 cahrset utf8;
        select database()  查看当前库
    

    符号必须用英文 插入多条 定义语句 不加符号 中文乱码在创建库的时候指定编码 无法结束 参数没有引号

    9.创建表的完整写法

    create table 表名称(字段名称 字段类型[(长度整数) 约束]) charset utf8;

    10.mysql中的数据类型

    1.整数

    ​ tinyint 1个字节 无符号的8bit 最大255 有符号7个bit 127 -128

    ​ smallint 2个

    ​ mediumint 3个

    ​ int 4个 最常用 如果你的数据超过10位 用bigint

    ​ bigint 8个

    注意:1.默认情况整数是有符号的

    ​ 设置为无符号 unsigned

    ​ alter table t2 modify age tinyint unsigned;

    ​ create table t2(age tinyint unsigned);

    1. mysql5.6 默认是非严格模式, 如果你的数据超出范围 会自动取最大值 一般不要这么搞 会丢失数据

      查看当前的sql模式:

      ​ select @@sql_mode; @表示全局变量 @@表示会话级变量(局部)

      临时设置sql_mode

      ​ set @@sql_mode = "xxxxx"

      建议直接修改配置文件:

      ​ [mysqld]

      ​ sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    指定长度

    ​ int(10) 如果你的数据不足10位 用0填充 (需要添加zerofill 这个约束)

    ​ 对于整数和小数而言 都是用控制 显示填充的最小长度

    2.浮点

    ​ 两种不精确的小数

    ​ float 可以精确到 大约5位

    ​ double 比float更精确

    ​ 如果对精确度要求比较高 需要使用decimal 类型

    ​ decimal 需要指定 位数如下: 位数不包括小数点

    ​ decimal(65,30) 总长最大65 小数30

    3.字符串

    char 定长字符串

    varchar 长度可变的字符串

    ​ char(10) 存储abc 占10个字符长度

    ​ 优点:读取存储速度快于 varchar

    ​ 缺点: 浪费与磁盘空间

    ​ varchar(10) abc 3个字符长度外加一个bit 存储字符长度

    ​ 优点:节省空间

    ​ 缺点:速度慢于char类型

    ​ 如果字符长度不大 建议使用char类型 反之则选择varchar

    ​ char 最大范围255

    ​ varchar最大 65535

    ​ 如果不够那就采用text 最大可以存储2的32次方

    text

    ​ 具备编码的大字符串

    blob

    ​ 没有编码的大二进制 可以用来存储 多媒体数据 视频 音频等..... 一般不会存这种数据

    ​ 都是建一个文件服务器 数据库只保存文件的地址信息

    ​ 字符串类型中 需要掌握的 char varchar text blob也不常用

    ​ 注意: mysql会自动将字符串后面的空格删掉 所以你的数据在存储前应该先把空格处理掉

    枚举和集合

    枚举是提前规定一个范围 你的值只能是其中之一 多选一

    集合是提前规定一个范围 你的值可以是其中的多个 多选多

    集合在插入数据时 ,多个值之前用逗号隔开 但他们必须包含在同一个字符串内!

    4.日期和时间

    ​ year

    ​ date

    ​ time

    ​ year date time 都可以用字符串或数字两种方式输入值

    ​ datetime

    ​ datestamp

    ​ datetime和datestamp 只能使用字符串输入

    上述所有类型的年份都可以是两位数

    0-69 翻译为 2000-2069 70-99 翻译为1790-1999

    ​ 时间相关的函数和常量

    ​ CURRENT_TIME 获取当前时间

    ​ now()获取当前时间

    11.小结

    1.创建表指定引擎 :create table t1(name char(10),age int) engine=innodb;
    
    2.插入数据:insert into t1 values('gg',18),('mm',17);
    
    3.查询:select *from t1;
    
    4.更新:update t1 set name='dd' where name='gg';
    
    5.删除列:delete from t1 where name='dd';
    
    6.测试整型是否有符号:create table t2(age tinyint);    
    
    7.测试严格模式:insert into t2 values(200);  #会超出范围
    
    8.设置为无符号:alter table t2 modify age tinyint unsigned;   
    
    9.测试指定宽度:create table t3(age int(10));
    
    10.浮点float:create table t4(bmi float);
    
    11.浮点decimal指定位数:create table t5(length decimal(20,10)); # 固定位20位,小数点后10位
    
    12.定长字符串:create table t6(name char(10));
    
    13.长度可变字符串:create table t7(name varchar(10));
    
    14.测试字符串后空格的影响: insert into t7 values('ww     '); #mysq会自动删除
    
    15.枚举:create table t8(name enum('a','b','c'));  insert into t9 values('a'); # 多选一
    
    16.集合:create table t9(name set('a','b','c'));   insert into t9 values('a,b'); # 多选多
    
    17.year:create table t10(ind year);   insert into t10 values(2019);
    
    18.date:create table t11(ind date);   insert into t11 values(20190711);
    
    19.time:create table t12(ind time);  insert into t12 values(102030);
    
    20.datetime: create table t13(ind datetime);  insert into t13 values(now());
    
    21.timestamp: create table t14(ind timestamp);  insert into t14 values(now());
    
  • 相关阅读:
    【git】强制覆盖本地代码(与git远程仓库保持一致)
    ffmpeg CLI常用命令
    旧机改造步骤
    macbook air 2012 mid 安装 windows10 双系统遇到错误 no bootable device insert boot disk and press any key
    window、Linux 文本文件转换
    phalcon bug: model的findFirst会自动忽略一些空格
    oss2罗列所有文件
    如何让linux的history命令显示时间记录
    nginx 常用配置
    shell脚本 切换用户
  • 原文地址:https://www.cnblogs.com/yellowcloud/p/11166323.html
Copyright © 2011-2022 走看看