前言
上篇博客让我们了解了什么是数据库和我们为什么要学习MySQL数据库,如果没有看的兄弟可以先去看看那一篇然后再回来继续看本篇。
传送门:为什么要学习MySQL数据库呢?
本篇文章就来总结一下数据库与表的一些常见操作,由此为基础我们后面才能慢慢学习更加高级的操作。
逻辑库的相关操作
数据库可以说是存储数据库对象的容器。创建数据库是在系统磁盘上划分一块区域用于数据的存储和管理,如果管理员在设置权限时为用户创建了数据库,则可以直接使用,否则需要用户自己创建数据库。
MySQL中创建数据库的基本SQL语法格式为:
CREATE DATABASE 数据库名称;
如:CREATE DATABASE bai_test;
输出:
在创建完成后如果我们需要使用到这个逻辑空间,例如在这个逻辑空间中建表,或者对该逻辑空间中的表进行操作时我们就需要把逻辑空间切换到这个我们所用到的这个空间。
切换时使用的SQL语句为:
USE 数据库名称;
如:USE bai_test;
输出:
删除数据库是将已经存在的数据库从磁盘空间上清除。清除之后,数据库中的所有数据也将一同被清除。MySQL中删除数据库的语法格式如下:
DROP DATABASE 数据库名称;
如:DROP DATABASE bai_test;
输出:
MySQL中的数据类型
在学习表的操作之前我们来学习,MySQL中的数据类型。MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。
数值类型
下面没有说到的就是DEC和DECIMAL类型。当要求小数数据精度非常高的时候,则可以选择DEC和DECIMAL类型,他们的精度比DOUBLE类型还要高。它们的原理就是把数字转换为字符串进行存储,所以说不会有数据的丢失。
类型名称 说明 存储需求
TINYINT 很小的整数 1个字节
SMALLINT 小的整数 2个字节
MEDIUMINT 中等大小的整数 3个字节
INT 普通大小的整数 4个字节
BIGINT 大整数 8个字节
FLOAT 单精度浮点数 4个字节
DOUBLE 双精度浮点数 8个字节
时间类型
DATE 表示年月日,DATETIME 表示年月日时分秒,TIMESTAMP 经常插入或更新日期时使用,TIME 表示时分秒,YEAR 表示年。
类型名称 日期格式 存储需求
YEAR YYYY 1个字节
TIME HH:MM:SS 3个字节
DATE YYYY-MM-DD 3个字节
DATETIME YYYY-MM-DD HH:MM:SS 8个字节
TIMESTAMP YYYY-MM-DD HH:MM:SS 4个字节
字符串类型
CHAR(M)、VARCHAR(M),其中M表示字节数。VARCHAR类型的长度是可以改变的。如果所存储的字符串长度不会经常变化,可以选择CHAR类型,否则选择VARCHAR类型。BLOB类型,如果需要存储大量二进制数据的时候(存储电影等视频文件),可以选择BLOB类型数据。
类型名称 说明 存储需求
CHAR 固定长度字符串 M个字节,1<=M<=255
VARCHAR 可变长度字符串 M+1个字节,1<=M<=255
BLOB 字节类型 M+2个字节,M<2^16
ENUM 枚举类型 1或2个字节
表的相关操作
表是一种很重要的数据库对象,是组成数据库的基本元素,由若干个字段组成。主要用来存储数据记录。表的操作,包含创建表、删除表、修改表等。
创建表
数据表属于数据库,在创建数据表之前,应该使用语句“USE 数据库名称”切换到指定数据库中。如果没有选择数据库,会抛出“No database selected”的错误。
创建数据表的语法格式如下:
CREATE TABLE 表名 ( 字段名1 数据类型 [列级别约束条件][默认值], 字段名2 数据类型 [列级别约束条件][默认值], … … );
其中约束条件与默认值可有可无
建表示例:
我们创建了一个学生表,里面信息包括:姓名、学号、手机号和老师的编号,如下:
USE bai_test; CREATE TABLE student ( name VARCHAR(4) NOT NULL, id INT UNSIGNED NOT NULL, phone INT(11) UNSIGNED , teatch INT UNSIGNED );
输出:
修改表
修改表指的是修改数据库中已经存在的数据表的结构。MySQL使用ALTER TABLE语句修改表
1.修改表名
ALTER TABLE 原来表名 RENAME 新表名;
2.添加字段
#在表的最后一个位置增加一个字段 ALTER TABLE 表名 ADD 字段名 字段类型 #在表的第一个位置增加一个字段 ALTER TABLE 表名 ADD 字段名 字段类型 FIRST #在表的指定的字段之后增加字段 ALTER TABLE 表名 ADD 字段名 字段类型 AFTER 字段名
3.删除字段
#删除表中指定的字段 ALTER TABLE 表名 DROP 字段名
4.修改字段
修改某个字段的数据类型 ALTER TABLE 表名 MODIFY 字段名 字段类型 修改某个字段的名称 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新字段名的数据类型
5.修改字段的顺序
调整某个字段到表的第一个位置 ALTER TABLE 表名 MODIFY 字段名 字段类型 FIRST 调整某个字段到表的某个字段之后 #字段名1是要调整的字段,字段名2 是要调整到字段后面 ALTER TABLE 表名 MODIFY 字段名1 字段类型 AFTER 字段名2
示例:
我们对原来的表进行以下操作 ALTER TABLE student RENAME students; ALTER TABLE students ADD hight FLOAT; ALTER TABLE students CHANGE teatch teach_id INT UNSIGNED; ALTER TABLE students MODIFY id INT FIRST;
输出结果:
删除表
删除数据表就是将数据库已经存在的表从数据库中删除。需要注意的是,在删除表的同时,表的定义和所有数据都会被删除。使用DROP TABLE语句可以一次性删除一个数据表或者多个数据表,语法格式如下:
DROP TABLE [IF EXISTS] 表名1,表名2,... 表名n;
注:IF EXISTS 用于在删除前判断删除的表是否存在。加上该参数后再删除表时,如果表不存在,SQL语句也可以顺利执行,但是会发出警告
字段约束
在上面提到过,创建表的语法为:
CREATE TABLE 表名 ( 字段名1 数据类型 [列级别约束条件][默认值], 字段名2 数据类型 [列级别约束条件][默认值], … … );
这里面有 [列级别约束条件],这里就来说一下这个约束条件
为了防止往数据表中插入错误的数据,在MySQL中,定义了一些维护数据库完整性的规则,即表的约束
主键约束 Primary Key
主键的概念:记录的唯一标识,能够通过该标识确定唯一一条记录。如上表中唯一能够确定学生记录的只能是学号,因此学号是主键。主键是不允许为空,不允许出现重复。可以在定义数据表字段时给字段添加主键约束。语法结构为 :
字段名称 数据类型 PRIMARY KEY;
例如:
id INT UNSIGNED PRIMARY KEY;
如上表所示,定义学生学号字段名称为id ,数据类型为整型,设置其为主键
在定义主键时需要注意多字段组合形式主键的定义,在很多情况下我们的主键需要由多个字段所组成,如学生成绩信息表,主要字段包括学号、姓名、老师编号。针对该表主键为学号与老师编号组合。
PRIMARY KEY(id,teach_id);
外键约束 Foreign Key
外键约束主要针对多个表之间的关系进行描述,外键的定义描述如下:
对于字段F在表A中不是主键,但在另外一个表B中表示主键,这个时候字段F对于表A可称为外键,在定义过程中需指明F在哪个表中是主键。另外需要注意,两个表中并不需要都是用F作为字段名,只要两者存储数据含义与类型一致即可。
默认值约束 Default
默认值约束主要用于实现为字段提供统一的默认值,如学生信息表中,所有的班级编号字段都取值1,为简化操作,我们可以直接为班级编号定义默认值约束,取值为1,在后期录入数据时,可直接去掉对该字段的数据录入。在定义字段时可直接指明默认值,基本语法:
字段名称 数据类型 DEFAULT 默认值
#设置学生信息表中学生默认联系方式为:11112345678 phone INT(11) DEFAULT "11112345678";
唯一约束Unique
唯一约束主要用于约束字段取值的唯一性,有些情况下需要在录入数据时保存数据的唯一性,如在上表学生信息表中,需要学生的联系电话唯一,即该字段不允许输入重复的值。示例代码如下:
字段名称 数据类型 UNIQUE;
示例:
phone INT(11) UNIQUE;
空值约束 NULL
字段允许取空值则可使用空值约束,默认情况下,字段是允许为空的。如我们创建一个学生成绩表,在录入成绩之前需要将学号,课程编号写入数据表,但是允许成绩为空时,对成绩字段设置允许为空。代码说明如下:
字段名称 数据类型 NULL | NOT NULL;
自动增长约束 Auto_increment
自动增长可以理解为一种约束,也可以理解为一种数据类型。是指某一个字段值依次增长,且不重复,(序号)在这种情况下可以将其设置为自动增长类型。如我们可以将班级信息表中的班级编号设置为自动增长字段:
id INT AUTO_INCREMENT PRIMARY KEY;
索引
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。
拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。
创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。
实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
建立索引会占用磁盘空间的索引文件。
索引这部分大家可以去MySQL索引看看,我也是看这里的。
结语
这部分讲到的内容都是非常基础的东西,但是只有学好这部分东西后面的学习才能顺利,数据库大家还是多多练习为好。
大家学习数据库可以使用Navicat,这是将数据库图形界面化的一个软件,对新手也比较友好,坚持努力!