MySql数据库基础使用

142 阅读7分钟

54eb8d07b826d03c.webp

这是一篇很全面的MySql基础扫盲文章,不论是重温经典,还是初次掌握,皆可配着五香瓜子慢慢食用

数据库基础

  • 数据库 : database,高效的存储和处理数据的介质(介质主要是两种:磁盘和内存)
  • 数据库基于存储介质的不同:进行的分类,分为两类:关系型数据库(SQL)和非关系型数据库(NoSQL:not only sql)
  • 不同的数据库阵营中的产品有哪些?
    • 关系型数据库 :
      • 大型的 :oracle ,DB2
      • 中型 :SQL-SERVER , MySql
      • 小型 : access
    • 非关系型数据库:memcached,mongodb,redis
  • 两种阵营的区别:
    • 关系型数据库: 安全,(保存磁盘基本不可能丢失,)
    • 非关系型数据库 : 效率高 不安全(断电丢失)

当然本文是依托关系型数据库来完成的,下面以mysql5.7 介绍基础使用

常用命令

  • 查看数据库:show databases
  • 查看数据库创建语句:show create database 数据库名
  • 更新数据库
    • 数据库名字不可以修改。
    • 数据库修改的仅限库选项 :字符集和校对集
    • alter database landmanage charset GBK
    • 删除数据库: drop database 数据库名字
    • 新增数据表: create table 表名( 字段名字 数据类型, )
    • 删除数据表: drop table 表名
    • 查看表: desc 表名
    • 修改表名字 : rename table 老表明 to 新表名
    • 添加字段 : alter table 表名 add column 字段
    • 修改字段 : alter table 表名 modify 字段名 数据类型
    • 重命名字段: alter table 表名 change 旧字段 新字段名 数据类型
    • 删除字段 : alter table 表名 drop 字段名
    • 查看所有字符集: show character set
    • 查看数据库默认的对外处理的字符集: show variables like 'character_set%'
    • 修改字符集: character_set_client,character_set_connection,character_set_results set names gbk

基础概念

校对集

  • 有三种格式
  • _bin binary 二进制比较,取出二进制位,一位一位比较,区分大小写
  • _cs case sensitive 大小写敏感,区分‘大小写
  • _ci case insensitice 大小写不敏感,不区分大小写

列类型

  • 数值型: 分为整数型和小数型
  • 整型:
    • Tinyint : 迷你整型,使用一个字节存储。
    • Smallint : 小整型,使用2个字节存储
    • Mediumint : 中整型,使用3个字节存储
    • Int : 标准整型 使用4个字节存储
    • Bigint : 大整型,使用8个字节存储
  • 其中整型在创建表时类型后面跟的小括号是显示长度,不是指定的长度。
  • 小数型 :
    • mysql中将小数型细分为两种 一种是浮点型,一种是定点型
    • 其中浮点型 :小数点浮动,精度有限,而且会丢失精度
    • 定点型:小数点固定,精度固定,不会丢失精度
    • 其中小数型在创建表时后面跟的小括号中指定的(M,D) 是指定长度
    • M为一共多少位,D为小数多少位
  • 浮点型 :
    • float 单精度 占用4个字节 3.402823466E+38 精度大约7位左右

    • double 双精度 占用8个字节1.797693134862E+308 精度大约15位左右

    • 浮点型数据的插入:整型部分是不能超出长度的,但是小数部分可以超出长度(系统会自动四舍五入)

  • 定点型 : decimal
  • 定点的精度高
  • 日期类型
    • datetime : YYYY-mm-dd HH : ii : ss
    • date : datetime 中的 date部分
    • time :HH : ii : ss
  • timestamp : 时间戳 是指从1970年开始的YYYY-mm-dd HH:ii:ss ,该列可设置自动填充,默认值是当前时间,如果执行update,insert操作时会自动更新该列
    • year: YYYY
    • now()函数以`'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。
    • curdate()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。
    • curtime()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。
  • 字符串类型
    • 定长字符串 char ,磁盘在定义结构的时候,就已经确定了最终的数据存储长度 最长 可以为255
    • 变长字符串 varchar , 在分配空间的时候,根据最大的空间分配,但是实际上最终用了多少,是根据具体的数据来确定 理论上可以存65536个字符,如果长度超出255,既不用定长也不用变长,用text
    • 文本字符串 text ,如果数据量非常大,通常超过255个字符就会使用文本字符串    text不可以写默认值,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入。文本字符串根据存储的数据的格式进行分类 : text 和blob
      • tex: 文字
      • blob : 存储二进制数据
    • 枚举字符串 enum 事先将所有可能出现的结果都设计好,实际上存储的数据必须是规定好的数据其中一个
      • 例 enum('哈','哈哈') 则该字段只能存 哈,或者哈哈,别的存不进去
      • 其中的类型都有一个key,
      • insert into ..values (1); 插入的是‘哈’
      • insert into ..values (2); 插入的是‘哈哈’
      • 所以在插入时要加单引号
    • 集合字符串 set
    • 集合和枚举很类似,实际存储的是数值,而不是字符串,(集合是多选) set('丽江','成都','山海关') insert into ..values('丽江,成都')

列的属性

  • unsigned 无符号
  • zerofill 零填充(当设置零填充的时候,自动加上无符号)例: alter table xx add xx int(2) unsigned zerofile显示位 2位,不够零填充

image.png

  • not null 不能为空,如果不写,默认是可以为空,
  • comment 列描述 用来描述字段的
  • default 默认值
  • collate 指定字段的校对集 例如 COLLATE utf8mb4_unicode_ci
  • 主键 : primary key
    • 增加主键的3种方式:
      • 建表的时候添加 create table 表名 ( name varchar(20) primary key )
      • 直接添加个主键 alter table 表名 add primary key(字段名)
      • 修改表的时候添加 alter table 表名 modify 字段名 varchar(5) primary key
    • 复合主键的时候,都相同才存不进去
    • 更新主键和删除主键
      • 不能更新 主键,只能先删除,再增加。
      • alter table 表名 drop primary key
  • 外键(foreign key):如果一张表中有一个字段(非主键)指向另外一张表的主键,那么将该字段称之为外键。一张表可以有多个外键
    • 增加外键 : 可以在新建表的时候建立外键,也可以在建表之后新增外键
      • 创建表的时候创建外键:在所有的表字段之后,使用`foreign key(字段名)references 外部表(主键字段)`` ;外键要求字段本身必须先是一个索引(普通索引),如果字段本身没有索引,则会先创建索引 在创建外键
      • 创建表之后新增外键:
        • alter table 表名 add constraint 外建名 foreign key(字段名) references 父表名(主键名)
    • 删除外键: 外键不能修改,只能先删除在新增
      • alter table 表名 drop foreign key 外键名
      • 删除之后 因为没有索引而创建的索引还存在
    • 外键条件
      • 外键要存在:数据库的存储引擎innodb(默认)如果不是 外键创建会成功 但是没有约束效应。
      • 外键的字段类型,必须与父表主键类型完全一致。
      • 一张表中的外键名字不能重复
    • 外键约束:
      • restrict:严格模式,父表不能删除一个已经被子表引用的数据。
      • cascade :级联模式,父表的操作,子表关联的数据也跟着改变(update父表 子表外键字段跟着改变,delete父表,子表对应数据跟着删除)
      • set null : 父表操作之后,子表子表对应的数据(外键字段) 被置空
      • 指定模式的语法:foreign key(字段名) references 父表(主键名) on delete 模式 on update 模式
  • 自增长 : auto_increment
    • 任何一个字段要做自增长,前提他的本身是一个主键
    • 自增长字段必须是数字(整型)
    • 一张表只能有一个自增长
    • 修改自增长 : alter table auto_increment = 值 ;只能比最大的值大,不能比最大的值小,小的时候也不报错,只是无效果
    • 查看自增长变量:
      • show variables like 'auto_increment%' auto_increment_increment ‘步长’ auto_increment_offset ‘起始值’
    • 可以修改变量,实现不同的效果,但是是对整个数据库修改,不是对单张表修改 (修改是会话级别): set auto_increment_increment = 5;
    • 删除自增长
      • alter table 表名 modify 字段名 类型 -- 就是修改字段属性,不写auto_increment了
  • 唯一键 : unique key
    • 唯一键和主键的区别,1.唯一键可以为空,且可以多个为空,因为空不参与比较
    • 删除唯一键: alter table 表名 drop index 索引名字