0.前言
您好,这里是limou3434的一篇个人博文,感兴趣的话您也可以看看我的其他文章。本博文是借鉴于李小威前辈所著的书籍《SQL 基础教程》所成的博文笔记,这本书真的很适合新手学习数据库相关的内容。本次我想给您带来的是关于MySQL的一些基础知识和基本操作,比如:“何为数据库、何为字段、何为主键?怎么创建数据库/数据表/字段?”此类的问题。而关于如何下载和配置MySQL服务和环境,待我之后再出一篇博文给您端上罢。
1.数据库基础
数据库由一批数据构成的有序的集合,这些数据被存储在结构化的数据表里,数据表之间相互关联,反映了客观事物间的本质联系。数据库系统提供对数据的安全控制和完整性控制。
1.1.普通数据库
1.1.1.数据库概念
数据库(DataBase,DB)这个概念有两方面的理解:
- 是保存数据的仓库:数据库是一个长期存储在计算机内、有组织、有共享、统一管理的数据集合。
- 是数据管理的方法和技术:数据库是一个按数据结构来存储和管理数据的计算机软件系统。
1.1.2.数据库发展
人工管理阶段->文件系统阶段->数据库系统阶段->高级数据库阶段
1.1.3.数据库种类
不同种类的数据库需要按照不同的数据结构来联系和组织,数据库主要分为
- 层次式数据库
- 网络式数据库
- 关系式数据库(本次的学习重点)
1.1.4.数据库特点
- 实现数据共享
- 减少数据冗余
- 采用特定的数据类型
- 具有较高的数据独立性
- 具有统一的数据控制功能
1.2.关系数据库(本次学习重点)
1.2.1.关系数据库的重要特征:具有坚实的数学理论基础
- 包括“关系数据库设计的理论基础/数据依赖与规范化理论”
- 包括“数据库查询的实现与优化理论”
1.2.2.关系系统是何?和非关系系统有什么区别
- 关系数据库是基于关系系统的,关系系统有以下几个方面:
- 结构化方面,数据库中的数据对于用户来说是数据表,也只能是数据表
- 完整性方面,数据库中的额数据表需要满足一点的完整性约束
- 操作方面,用户可以使用操作符来进行数据表操作
- 关系系统与非关系系统区别
- 关系系统的用户把数据看作数据表,而且只能是数据表
- 非关系系统的用户则把数据看作其他数据结构,代替或拓展关系系统中的数据表结构
1.2.3.关系和属性的关系
- 关系是关系系统的核心,是汇集在表数据中的行和列的集合
- 每个关系由一个或者多个属性(列)组成,属性将类型相似的数据归纳在一起
- 属性和关系直接相关,数据以元组(行)的形式存储在关系中,每个元组代表相关数据的一个记录
1.3.数据表
数据表实际上是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构,由行和列构成
- 行叫做“记录”
- 列叫做“字段”
1.4.数据类型
每一个字段都指定某类属性
- 整数数据类型
- 浮点数数据类型
- 精确小数数据类型
- 二进制数据类型
- 日期/时间数据类型
- 字符串数据类型
1.5.主键/主码
用于唯一标识表中的每一个记录,可以定义一列或多列为主键,主键列上不能有两行相同的值,这将抛出错误,因此有些列天生就不适合当主键
2.数据库技术构成
2.1.数据库系统
- 有三个主要的组成部分
- 数据库:用于存储数据的地方
- 数据库管理系统:用于管理数据库的软件
- 数据库应用程序:为了提高数据库系统的处理能力所使用的管理数据库的软件补充
- 数据库系统图解
2.2.SQL语言
- 数据定义语言(DDL)
- 数据操作语言(DML)
- 数据查询语言(DQL)
- 数据控制语言(DCL)
2.3.数据库访问接口
不同的程序设计语言会有各自不同的数据库访问接口,程序语言会通过这些接口执行SQL语句,进行数据库管理,而主要的数据库访问接口有以下四个:
- ODBC
Open Database Connectivity(开发数据库互连)技术为访问不同的SQL数据库提供了一个共同的接口 - JDBC
Java Data Base Connectivity(Java数据库连接)用于Java应用程序连接数据库的标准方法,是一种用于执行SQL语句的Java API - ADO.NET
ADO.NET是微软在.NET框架下开发设计的一组用于数据源进行交互的面向对象类库 - PDO
PHP Data Object为PHP访问数据库定义了一个轻量级、一致性的接口 - 其他语言
MySQL也对其他语言提供了不同的数据库访问连接驱动,可以去其官网看看
3.数据库基本操作
3.1.查看
3.1.1.查看当前拥有的数据库
SHOW DATABASES;
3.1.2.查询当前数据库拥有的数据表
SHOW TABLES;
3.1.3.查询当前数据库支持的存储引擎
SHOW ENGINES;
3.2.创建
CREATE DATABASE 数据库名字;
创建数据库是在系统磁盘上划分一块区域,用于数据的存储和管理,如果管理员在设置权限的时候为用户创建了数据库,就可以直接使用,否则就需要自己创建数据库
3.3.删除
DROP DATABASE 数据库名字;
3.4.修改
RENAME DATABASE 旧数据库名 TO 新数据库名;
4.数据表基本操作
数据表是在数据库中创建的,数据表属于数据库,在使用数据表前,需要指明是哪一个数据库,使用以下语法
USE 已有的数据库名字; #然后显示database changed“数据库已更改”
4.1.查看
下指令可以查看数据表的字段
DESCRIBE 表名;//或者简写为DESC
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
- NULL表示该字段是否可以存储NULL值
- Key表示该字段是否已编制索引
- Default表示该字段是否有默认值,如果有则显示值
- Extra表示可以获取与给点字段有关的附加信息
4.2.创建
mysql> CREATE TABLE 表名
-> (
-> 字段名1 数据类型 列级别约束条件 默认值,
-> 字段名2 数据类型 列级别约束条件 默认值,
-> 字段名3 数据类型 列级别约束条件 默认值,
-> 字段名4 数据类型 列级别约束条件 默认值,
-> …
-> 表级别约束条件 #这个之后讲
-> );
4.3.删除
4.3.1.删除没有被关联的数据表
DROP TABLE 数据表名; #注意是永久删除数据表以及所有数据,且无法撤销该命令
DROP TABLE IF EXISTS 数据表名; #IF EXISTS的使用是可选的,可以帮助检查是否存在该数据表,避免尝试删除不存在的表并且导致出现错误
4.3.2.删除数据表的外键约束
ALTER TABLE 数据表名 DROP FOREIGE KEY 外键约束名
4.3.3.删除被其他表关联的主表
一般情况下,直接删除这个主表会出现错误,原因是:直接删除将会破坏表的参照完整性。因此要删除这个主表有两个办法:
- 先删除从表,再删除主表
- 先解除从表的外键约束,然后再删除主表
4.4.修改
4.4.1.修改数据表名字
这个仅仅是修改数据表名字,不改变数据表的结构,注意新数据表名要保证是唯一的
ALTER TABLE 旧表名 RENAME [TO] 新表名; #TO是可选的只是为了加强语法完整性。alter“修改”,rename“改变名字”
4.4.2.更改表的存储引擎
- MySQL支持的存储引擎(前面有这个指令可以查看)
- 更改表的存储结构
ALTER TABLE 表名 ENGINE=更改后的存储引擎名;
5.字段基本操作
5.1.创建(以及添加约束条件)
5.1.1.主键约束
5.1.1.1.单字段主键
- 直接再列表中定义主键
mysql> CREATE TABLE 表名
-> (
-> 字段名1 数据类型 PRIMARY KEY,
-> 字段名2 数据类型,
-> 字段名3 数据类型,
-> 字段名4 数据类型,
-> …
-> );
- 列末尾指定主键
mysql> CREATE TABLE 表名
-> (
-> 字段名1 数据类型,
-> 字段名2 数据类型,
-> 字段名3 数据类型,
-> 字段名4 数据类型,
-> …
-> PRIMARY KEY(上面定义的某个字段名)
-> );
mysql> 约束名 PRIMARY KEY 字段名
- 定义完所有列后再指定主键
mysql> CREATE TABLE 表名
-> (
-> 字段名1 数据类型,
-> 字段名2 数据类型,
-> 字段名3 数据类型,
-> 字段名4 数据类型,
-> …
-> );
mysql> ALTER TABLE 数据表名 ADD PRIMARY KEY (某个字段名字); #注意要加上括号
5.1.1.2.多字段联合主键
mysql> CREATE TABLE 表名
-> (
-> 字段名1 数据类型,
-> 字段名2 数据类型,
-> 字段名3 数据类型,
-> 字段名4 数据类型,
-> …
-> PRIMARY KEY(字段1, 字段2, 字段3, …)
-> );
5.1.2.外键约束
- 外键可以用来在两个表的数据之间建立连接,可以是一个字段或者多个字段
- 一个表可以有一个或多个外键,外键对应的是引用完整性
- 一个表的外键可以是空值,若不为空值,则每个外键值必须等于等于另外一个表中主键的某个值
- 定义外键后不允许删除另外一个表中具有关联关系的行,外键的作用是保持数据的一致性、完整性
- 对于两个具有关联关系的表,相关联字段中主键所在的那个表即主表(父表),外键所在的那个表即从表(子表)
- 一个外键还拥有一个外键名
mysql> CREATE TABLE 表名
-> (
-> 字段名1 数据类型 PRIMARY KEY,
-> 字段名2 数据类型,
-> 字段名3 数据类型,
-> 字段名4 数据类型,
-> …
-> );
mysql> CREATE TABLE 表名
-> (
-> 字段名1 数据类型,
-> 字段名2 数据类型,
-> 字段名3 数据类型,
-> CONSTRAINT 外键约束名 FOREIGN KEY(外键名) REFERENCES 父表(字段名1),
-> …
-> );
5.1.3.使用非空约束
值字段的值不能为空,对于设置了非空月约束的字段,如果用户在添加数据的时候没有指定值,那么数据库系统将会报错
mysql> CREATE TABLE 表名
-> (
-> 字段名1 数据类型 NOT NULL,
-> 字段名2 数据类型,
-> 字段名3 数据类型,
-> 字段名4 数据类型,
-> …
-> );
5.1.4.使用唯一性约束
要求该列唯一,并且允许为空,但是只能出现一个空值,唯一约束可以确保一列或者几列不出现重复值
- 在定义列的时候指定唯一约束
mysql> CREATE TABLE 表名
-> (
-> 字段名1 数据类型 UNIQUE,
-> 字段名2 数据类型,
-> 字段名3 数据类型,
-> 字段名4 数据类型,
-> …
-> );
- 在列的末尾指定唯一约束
mysql> CREATE TABLE 表名
-> (
-> 字段名1 数据类型,
-> 字段名2 数据类型,
-> 字段名3 数据类型,
-> 字段名4 数据类型,
-> …
-> CONSTRAINT STH UNIQUE(上面定义的某个字段)
-> );
5.1.5.使用默认约束
默认约束指定某列的默认值,在插入数据的时候即使没有为这个字段赋值,系统也会为这个字段赋默认值
mysql> CREATE TABLE 表名
-> (
-> 字段名1 数据类型 DEFAULT 要设置的默认值,
-> 字段名2 数据类型,
-> 字段名3 数据类型,
-> 字段名4 数据类型,
-> …
-> );
5.1.6.设置表的属性值自动增加
一个表只能有一个字段使用AUTO_INCREMENT约束,并且该字段必须为主键的一部分,而且该字段可以是任何整数类型(TINYINT、SMALLINT、INT、BIGINT等)
mysql> CREATE TABLE 表名
-> (
-> 字段名1 数据类型 PRIMARY KEY AUTO_INCREMENT, #这个属性值就会自动增加
-> 字段名2 数据类型,
-> 字段名3 数据类型,
-> 字段名4 数据类型,
-> …
-> );
5.2.添加
5.2.1.末尾添加字段
ALTER TABLE 表名 ADD 新字段名 数据类型 之前对单字段的约束语法; #最后一项必须有
5.2.2.第一列添加字段
ALTER TABLE 表名 ADD 新字段名 数据类型 之前对单字段的约束语法 FIRST; #最后一项可选
5.2.3.指定列添加字段
ALTER TABLE 表名 ADD 新字段名 数据类型 AFTER 数据表中已存在的数据段 #这个语句会在这个已存在的字段后面创建一个新的字段
5.3.删除
ALTER TABLE 表名 DROP 字段名; #一般在使用之前都会使用DESC指令查看要删除的字段
5.4.修改
5.4.1.修改字段名
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型; #后面的新数据类型可以省略,这条指令可以替代上一条指令
5.4.2.修改字段数据类型(包含字段名)
ALTER TABLE 表名 MODIFY 字段名 数据类型; #alter“修改”,modify“修改”
5.4.3.修改字段排列顺序
- 修改为表的第一个字段
ALTER TABLE 数据表 MODIFY 数据类型 FIRST; #数据类型必须加上
- 修改为表的指定列之后
ALTER TABLE 数据表 MODIFY 数据段1 数据类型 AFTER 数据段2; #数据类型必须加上(数据段1将被排到数据段2后面)
6.一些重要的提醒
6.1.删除“数据库/数据表/字段”要尤为注意
删除数据库命令要十分谨慎,执行这条命令时,存储在其中的数据表也会一同执行,MySQL不会有任何的提醒,一旦删除将不能被恢复,同理数据表或者字段的删除也是一样的(在数据删除之前最好进行备份,避免造成无法挽回的后果)
6.2.数据表的主键不是必须的
并不是每一个数据表中都需要主键,一般只有在多个表进行连接操作的时候才需要用到主键,因此并不需要为每个表建立主键,甚至有些情况最好不使用主键
6.3.数据表不能随意选取存储引擎
外键约束不能跨引擎使用,如果多个数据表之间指定了不同的存储引擎,那么这些表是不能创建外键约束关联的,所以存储引擎的选择不是随意的
6.4.数据表的属性值自动增加默认从1开始
但是这个默认可以修改,在一开始插入记录时可以指定值
7.总结归纳
最后总结一下这篇博文的内容吧
- 首先我总结了一些数据库的基础概念,尤其是关系数据库的概念,因为这是本系列(SQL系列)博文的重点,还归纳了一些关于数据技术的构成
- 然后我针对“数据库、数据表、字段”的增删查改进行了整理,您可以跟着目录试一下这些基础的命令
- 最后我还归纳了上述基础命令的一些提醒的要点
这就是本章博客的主要内容啦,望之后的SQL学习之路同君共勉