MySQL数据库入门知识点整理

数据库基本操作

1、创建数据库语句

create Database database_name

数据库名称有以下几点要求

  • 不能与已存在的数据库名称相同;
  • 由字母、数字、下划线、@、$和#符号组成;
  • 不能以数字及$符号开头;
  • 标识符不能使用MySQL的保留字;
  • 不能包含空格和特殊字符;
  • 长度不能超过128位;

2、查看数据库

SHOW DATABASE

此命令会显示MySQL中所有的数据库;

3、选择数据库

USE database_name

4、删除数据库

DROP DATABASE database_name

MySQL数据库存储引擎

存储引擎指定了表的类型,即如何存储和索引数据、是否支持事务等,同时存储引擎也决定了表在计算机中的存储方式。

SHOW ENGINES

此命令可以查看MySQL所支持的存储引擎;

MySQL5.5支持9种存储引擎:FEDERATED、MRG_MYISAM、MyISAM、BLACKHOLE、CSV、MEMORY、ARCHIVE和PERFORMANCE_SCHEMA

MySQL数据库数据类型

MySQL数据库管理系统提供了整数类型、浮点数类型、定点数类型和位类型、日期和时间类型、字符串类型。

整数类型

MySQL支持的整数类型有TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)、BIGINT;所占字节从左到右依次为1bit、2bit、3bit、4bit、8bit;

浮点数类型、定点数类型和位类型

MySQl数据库管理系统除了支持标准SQL中所有的浮点数类型、定点数类型外,还进行了相应的扩展,扩展后增加了位类型。

浮点数类型:FLOAT、DOUBLE;所占字节依次为4bit、8bit;

在具体使用MySQL数据库时,如果需要存储小数数据,则可以选择FLOAT类型和DOUBLE类型,具体选择两种类型中的哪一个,则需要判断存储小数数据需要精确到的小数位数,当需要精确到小数点后10位以上,就需要选择DOUBLE类型;

定点数类型:DEC和DECIMAL;该数据类型取值范围与DOUBLE类型相同;

在具体使用MySQL数据库时,如果需要存储小数数据,除了可以选择FLOAT和DOUBLE类型外,还可以选择DEC和DECIMAL类型,当要求小数数据精确度非常高时,则可以选择DEC和DECIMAL类型;

FLOAT、DOUBLE数据类型存储数据时存储的是近似值,而DECIMAL存储的是字符串,因此提供了更高的精确度,在需要表示金额等货币类型时优先选择DECIMAL数据类型。

位类型:BIT;

日期和时间类型

MySQL数据库管理系统支持的时间和日期类型:DATE、DATETIME、TIMESTAMP、TIME和YEAR;

在具体应用中,各种日期和时间类型应用场合如下:

  • 如果要表示年月日,一般会使用DATE类型;
  • 如果要表示年月日时分秒,一般会使用DATETIME类型;
  • 如果需要经常插入或更新日期为当前系统时间,一般会使用TIMESTAMP类型;
  • 如果要表示时分秒,一般会使用TIME类型;
  • 如果要表示年份,一般会使用YEAR类型;

字符串类型

MySQL数据库管理系统支持四种系列的字符串类型的数据,分别是CHAR系列、TEXT系列、BINARY系列及BLOB系列。

CHAR系列有两种:CHAR及VARCHAR。CAHR最大存储长度为255字节,VARCHAR最大存储长度为65535字节。

在具体应用中,如果需要存储少量字符串,则可以选择CHAR和VARCHAR,至于选择两者中的哪一个,则需要判断所存储字符串长度是否经常变化,如果经常发生变化,则可以选择VARCHAR类型,否则选择CHAR类型;

TEXT系列有四种:TINYTEXT、TEXT、MEDIUMTEXT及LONGTEXT。

在具体应用中,如果需要存储大量字符串(存储文章内容的纯文本),则可以选择TEXT系列字符串类型。至于选择这些类型的哪一个,则需要判断所存储字符串长度,根据存储字符串长度来决定是选择允许长度最小的TINYTEXT字符串类型,还是选择允许长度最大的LONGTEXT字符串类型。

BINARY系列有两种:BINARY及VARBINARY。

与CHAR系列字符串类型相似,不同的是BINARY系列可以存储二进制数据(例如图片、音乐或者视频文件)而CHAR系列只能存储字符数据。

在具体应用中,如果需要存储少量二进制数据,则可以选择BINARY系列字符串类型,至于是BINARY系列中的选择哪一个,则需要判断所存储二进制数据长度是否经常变化,如果经常发生变化,则选择VARBINARY类型,否则选择BINARY类型。

BLOB系列有四种:TINYBLOB、BLOB、MEDIUMBLOB及LONGBLOB。

与TEXT系列字符串类型相似,不同的是,BLOB系列可以存储二进制数据(例如图片、音乐或者视频文件),而TEXT系列只能存储字符数据。

在具体应用中,如果需要存储大量的二进制数据(存储电影等视频文件),则可以选择BLOB系列字符串型。至于选择这些类型中的哪一个,则需要判断所存储二进制数据的长度,根据存储二进制数据的长度来决定是选择允许长度最小的TINYBLOB字符串类型,还是选择允许长度最大的LONGBLOB字符串类型。

表的操作

表是包含数据库中所有数据的数据库对象。表中的数据库对象包含列【Columns】、索引[Indexes]和触发器【Triggers】。

  • 列【Colnmns】:也称属性列,在具体创建表时,必须指定列的名字和数据类型。
  • 索引【Indexes】:是指根据指定的数据库表列建立起来的顺序,提供了快速访问数据的途径且可监督表的数据,使其索引所指向的列中的数据不重复。
  • 触发器【Triggers】:是指用户定义的事务命令的集合,当对一个表中的数据进行插入、更新或删除时这组命令就会自动执行,可以用来确保数据的完整性和安全性。

创建表

语法形式

CREATE TABLE table_name(属性名 数据类型,属性名 数据类型, ...)

表明紧跟在关键字CREATE TABLE之后,表的具体内容定义在圆括号之中,各列之间用逗号(英文)隔开。表名的命名规则与数据库命名规则一样。

查看表

DESCRIBE table_name
SHOW CREATE TABLE table_name

删除表

DROP TABLE table_name

修改表名

ALTER TABLE old_table_name RENAME [TO] new_table_name

增加字段

在表的最后一个位置添加字段

ALTER TABLE table_name ADD 属性名 数据类型

在表的第一个位置增加字段

ALTER TABLE table_name ADD 属性名 数据类型 FIRST

在表的指定字段之后增加字段

ALTER TABLE table_name ADD 属性名 数据类型 AFTER 属性名

删除字段

ALTER TABLE table_name DROP 属性

修改字段

修改字段的数据类型

ALTER TABLE table_name MODIFY 要修改的属性名 修改之后的数据类型

修改字段的名字

ALTER TABLE table_name CHANGE 旧属性名 新属性名 旧数据类型 

同时修改字段的名字和数据类型

ALTER TABLE table_name CHANGE 旧属性名 新属性名 新数据类型

修改字段的顺序

ALTER TABLE table_name MODIFY 属性名1 数据类型 FIRST|AFTER 属性名2

操作表的约束

MySQL支持以下完整性约束

  • NOT NULL: 约束字段不能为空;
  • DEFAULT: 设置字段的默认值;
  • UNQUE KEY【UK】:约束字段的值时唯一;
  • PRIMARY KEY【PK】:约束字段为表的主键,可以作为该表的记录的唯一标识;
  • AUTO_INCREMENT:约束字段的值为自动增加;
  • FOREIGM KEY【FK】:约束字段为表的外键;

设置非空约束

当数据库表中的某个字段上的内容不希望设置为NULL时,则可以使用NK约束进行设置。即NK约束在创建数据库表时为某些字段加上“NOT NULL”约束条件,保证所有记录中该字段都有值。如果用户插入的记录中,该字段为空值,则数据库管理系统会报错。

语法形式如下

CREATE TABLE table_name ( 属性名 数据类型 NOT NULL, ...)

设置字段的默认值

当为数据库表中插入一条新纪录时,如果没有为某个字段赋值,那么数据库系统自动给为这个字段插入默认值。

语法形式如下

CREATE TABLE table_name ( 属性名 数据类型 DEFAULT 默认值, ...)

设置唯一约束

当数据库表中的某个字段上的内容不允许重复时,则可以使用UK约束进行设置。即UK约束在创建数据库表时为某些字段加上“UNIQUE”约束条件,保证所有记录中该字段上的值不重复。

语法形式如下:

CREATE TABLE table_name ( 属性名 数据类型 UNIQUE, ...)

设置主键约束

当想用数据库表中的某个字段来唯一标识所有记录时,则可以使用PK约束进行设置。即PK约束在创建数据库表时为某些字段加上“PRIMARY KEY”约束条件,则该字段可以唯一地标示所有记录。

在数据库表中之所以设置主键,是为了数据库管理系统快速地查找到表中的记录。在具体设置主键约束时,必须要满足主键字段的值是唯一、非空的。由于主键可以是单一字段,也可以是多个字段,因此分为单字段主键和多字段主键。

单字段主键

语法形式如下

CREATE TABLE table_name ( 属性名 数据类型 PRIMARY KEY, ...)

多字段主键

语法形式如下

CREATE TABLE table_name ( 属性名 数据类型, ... CONSTRAINT 约束名 PRIMARY KEY(属性名,...))

设置字段值自动增加

AUTO_INCREMENT是MySQL唯一扩展的完整性约束,当为数据库表中插入新纪录时,字段上的值会自动生成唯一的ID。在具体设置AUTO_INCREMENT约束时,一个数据库表中只能由一个字段使用该越是,该字段的数据类型必须是整数类型。由于设置AUTO_INCREMENT约束后的字段会生成唯一的ID,所以该字段也经常会设置成PK主键。

语法形式如下

CREATE TABLE table_name ( 属性名 数据类型 AUTO_INCREMENT, ...)

设置外键约束

外键约束保证多个表(通常为两个表)之间的参照完整性,即构建于两个表的两个字段之间的参照关系。

设置外键约束的两个表之间会具有父子关系,即子表中国某个字段的取值范围由父表所决定。

在具体设置FK约束时,设置FK约束的字段必须依赖于数据库中已经存在的父表的主键,同时外键可以为NULL。

语法形式如下

CREATE TABLE table_name ( 
属性名 数据类型, 
... 
CONSTRAINT 外键约束名 FOREIGN KEY(属性名【子表中外键的字段名】)
REFERENCES 表名(属性名【父表中设置主键约束的字段名】)
)

原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/mysql-introduction.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
上一篇 2020年7月3日
下一篇 2020年7月9日

相关推荐

  • 如何封装JDBC工具类读取properties配置文件连接数据库

    思路 之前已经写过一片《封装JDBC工具类,连接MySQL数据库》,讲解了如何封装JDBC工具类。但是在实际的应用中往往是把数据库连接的相关信息写在一个配置文件中,让程序自己去读取…

    2022年4月2日
    829
  • JAVA学习之多线程知识点整理

    1、什么是进程?什么是线程? 进程是一个应用程序。线程是一个进程中的执行场景或者执行单元。一个进程可以启动多个线程。进程之间内存独立不共享。同一个进程中的线程之间,堆内存和方法区内…

    2020年6月19日
    1.2K
  • 初识Spring Boot

    什么是Spring Boot Spring Boot是由Pivotal Software公司于2013年研发的全新Java开发框架。其设计目的是用来简化新Spring应用的初始搭建…

    2024年6月16日
    407
  • 网页布局之三栏网页宽度自适应布局

    在工作中经常遇到网页布局错乱的问题,往往引发的这种问题都是因为不同设备不同分辨率而导致。归根结底,是因为前端工程师经验不足,代码写得不够完好。以下是我总结及从网络搜集的一些网页布局…

    2018年10月8日
    2.9K
  • JavaWeb入门案例之用户注册

    前言 之前把Java的基础知识系统的过了一遍,目前总算可以看懂Java代码了,接下来就是要学习Java开发框架(主要是springMVC)。 下面用一个用户注册的小案例,来总结一下…

    2021年1月13日
    1.6K
  • MyBatis之MyBatis-Generator标签配置及意义

    DTD 标签 <generatorConfiguration/>: 根标签,所有的配置都必须在该标签内配置;没有属性 <properties/>: 主要引用外部的pro…

    2019年12月27日
    1.8K
  • Java自学之继承

    在面向对象的设计过程中,类是基本的逻辑单位。但是对于这些基本的逻辑单位需要考虑到重用的设计问题,所以在面向对象的设计里提供有继承,并利用这一特点实现类的可重用性定义。 类继承定义 …

    2020年12月3日
    1.3K
  • 如何搭建MyBatis开发环境

    进入一段时间的学习及温习,已经可以说是初步掌握了Javaweb入门开发,由于我的中心思想是抛弃JSP,做纯粹的前后端分离项目,所以接下来计划学习持久层开发,现在主流的持久层开发工具…

    2022年4月6日
    740
  • JavaScript基础知识八问

    JavaScript是前端开发中非常重要的一门语言,浏览器是他主要运行的地方。JavaScript是一个非常有意思的语言,但是他有很多一些概念,大家经常都会忽略。比如说,原型,闭包…

    2020年12月30日
    969
  • Webpack入门,自定义loader

    有时开发者会遇到现有loader无法很好满足需求的情况,这时就需要对其进行修改,或者编写新的loader。 下面以一个简单的示例,讲解以下如何实现一个loader。 需求 实现一个…

    2022年11月23日
    703

发表回复

登录后才能评论