目录
一. MySQL简介
1. 什么是数据库?
1.1 概念
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统来存储和管理大数据量。
1.2 数据库分类
1)关系型数据库SQL(Structured Query Language):
如MySQL、Oracle、Sql Server、DB2、SQLlite等;
通过表和表之间,行和列之间的关系进行数据的存储,通过外键关联来建立表与表之间的关系。
2)非关系型数据库:NoSQL(Not Only SQL)
如Redis、MongoDB等
指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定
2. MySQL数据库
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
2.1 MySQL的优点
1)简单易学,具有很强的操作性
2)开源:隶属于 Oracle 旗下产品
3)应用广泛:可以运行于多个系统上,并且支持多种语言(如C、C++、Python、Java、PHP等)
4)可以定制:采用了 GPL 协议,任何人都修改源码来开发自己的 MySQL 系统。
2.2 常见的图形可视化工具
1)WorkBeach:免费、官方、有付费软件才有的重型功能
2)Navicat:付费,是一个强大的MySQL数据库管理和开发工具。
3)SQLyog:是一个易用的、快速而简洁的图形化管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库,而且完全免费的!
4)DataGrip:付费,由JetBrains公司推出的管理数据库的产品,对于JetBrains公司,开发者肯定都不陌生,IDEA和ReSharper都是这个公司的产品,用户体验非常不错。
二. 数据库的基本操作
1. 数据库操作
1.1 创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名;
-- 注释:"[]"中的内容可加可不加,建议加上
1.2 查看数据库
SHOW DATABASES;
1.3 选择数据库
use 数据库名;
1.4 删除数据库
DROP DATABASE [if EXISTS] 数据库名;
1.5 综合运用(案例)
2. 数据库表操作
2.1 创建数据表
CREATE TABLE [IF NOT EXISTS] 表名(
列名1 数据类型1,
列名2 数据类型2,
......
);
2.2 查看数据表
SHOW TABLES;
2.3 修改数据表
-- 修改数据表名称
ALTER TABLE 旧表名 RENAME TO 新表名;
-- 修改表选项(字符集、储存引擎、等)
ALTER TABLE 表名 表选项[=]值;
2.4 查看表结构
-- 1.查看数据表的字段信息
DESC 数据表名; -- 查看所有字段信息
DESC 数据表名 字段名; -- 查看指定字段的信息
-- 2.查看数据表的创建语句
SHOW CREATE TABLE 表名;
-- 3.查看数据表结构(在不加FULL选项查看时,查询结果和DESC的结果相同)
SHOW [FULL] COLUMNS FROM 数据表名;
2.5 修改表结构
-- 修改字段名
ALTER TABLE 数据表名 CHANGE 旧字段名 新字段名 字段类型[字段属性];
-- 修改字段类型
ALTER TABLE 数据表名 MODIFY 字段名 新类型[字段属性];
-- 修改字段位置
ALTER TABLE 数据表名 MODIFY 字段1 数据类型[字段属性] FIRST; -- 将字段1调整为数据表的第1个字段
ALTER TABLE 数据表名 MODIFY 字段1 数据类型[字段属性] AFTER 字段2; -- 将字段1插入到字段2的后面
-- 新增字段
ALTER TABLE 数据表名 ADD 新字段1 字段类型1 [FIRST | AFTER 字段名]; -- 新增一个字段并指定其位置
ALTER TABLE 数据表名 ADD (新字段1 字段类型1,新字段2 字段类型2,...); -- 同时新增多个字段
-- 删除字段
ALTER TABLE 数据表名 DROP 字段名;
2.6 删除数据表
-- 删除数据表
DROP TABLE [IF EXISTS] 数据表; -- 删除单个表
DROP TABLE [IF EXISTS] 数据表1,数据表2,...; -- 删除多个表
2.7 综合运用(案例*附源码)
源码:
-- 创建一个students表
CREATE table students(
ID INT,
NAME VARCHAR(20),
SEX VARCHAR(5),
AGE VARCHAR(5)
);
-- 查看数据表
SHOW TABLES ;
-- 将表名修改为stu,字符集修改为UTF-8(注意:在修改语句中不要加“-”)
ALTER TABLE students RENAME TO stu;
ALTER TABLE students CHARACTER SET =UTF8;
-- 查询stu表的字段信息及创建语句
DESC stu;
SHOW CREATE table stu;
-- 修改SEX的字段为GENDER VARCHAR(10)
ALTER TABLE stu CHANGE SEX GENDER VARCHAR(10);
-- 添加HOBBY VARCHAR(30)字段到NAME字段的后面
ALTER TABLE stu ADD HOBBY VARCHAR(30) AFTER NAME;
-- 删除AGE字段
ALTER TABLE stu DROP AGE;
-- 删除stu表
DROP TABLE IF EXISTS stu;
3. 数据操作
3.1 添加数据
-- 1.为所有字段添加一条数据
INSERT INTO 表名 VALUES (值 1,值 2,...);
-- 1.1为所有字段添加多行数据
INSERT INTO 表名 VALUES (值 1,值 2,…),(值 1,值 2,…),...;
-- 2为部分字段添加一条数据
INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...);
-- 2.1为部分字段添加多行数据
INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,…),(值 1,值 2,…),...;
3.2 查询数据
-- 查询表中全部数据
SELECT*FROM 数据表名;
-- 查询表中部分字段
SELECT(字段1,字段2...) FROM 数据表名;
-- 简单的条件查询(WHERE关键字)
SELECT*FROM 数据表名 WHERE 字段名=值;
SELECT(字段1,字段2...) FROM 数据表名 WHERE 字段名=值;
3.3 修改数据
-- 常规修改数据
UPDATA 数据表名 SET 字段名1=值1;
UPDATA 数据表名 SET 字段名1=值1,字段名2=值2...;
-- 加上条件判断
UPDATA 数据表名 SET 字段名1=值1 WHERE 条件表达式;
UPDATA 数据表名 SET 字段名1=值1[,字段名2=值2...] WHERE 条件表达式;
3.4 删除数据
-- 删除所有数据
DELETE FROM 数据表名;
-- 删除符合条件的数据
DELETE FROM 数据表名 WHERE 条件表达式;
3.4 综合运用
三. 数据类型与约束
使用MySQL数据库来存储数据时,不同的数据类型决定了MySQL存储方式的不同。MySQL提供了多种数据类型其中包括数字类型、时间和日期类型、字符串类型。
1. 数据类型
1.1 数字类型
整数类型
作用:用于保存整数,根据取值范围不同分为以下五种。
数据类型 | 字节数 | 无符号数的取值范围 | 有符号数的取值范围 |
---|---|---|---|
TINYINT | 1 | 0~255 | -128~127 |
SMALLINT | 2 | 0~65535 | -32768~32768 |
MEDIUMINT | 3 | 0~16777215 | -8388608~8388608 |
INT | 4 | 0~4294967295 | -2147483648~ 2147483648 |
BIGINT | 8 | 0~18446744073709551615 | -9223372036854775808~9223372036854775808 |
浮点数类型
作用:用于存储小数,分为单精度浮点数类型FLOAT和双精度浮点数类型DOUBLE
数据类型 | 字节数 | 有符号的取值范围 | 无符号的取值范围 |
---|---|---|---|
FLOAT | 4 | -3.402823466E+38~-1.175494351E-38 | 0和1.175494351E-38~3.402823466E+38 |
DOUBLE | 8 | -1.7976931348623157E+308~2.2250738585072014E-308 | 0和2.2250738585072014E-308~1.7976931348623157E+308 |
定点数类型
数据类型 | 字节数 | 有符号的取值范围 | 无符号的取值范围 |
---|---|---|---|
DECIMAL(M,D) | M+2 | -1.7976931348623157E+308~2.2250738585072014E-308 | 0和2.2250738585072014E-308~1.7976931348623157E+308 |
M:表示数字总位数不包括“.”和“—”最大值位65,默认值位10;
D:表示小数点后的位数,最大值为30默认值位0;
例如DECIMAL(5,2)表示的取值范围是"—999.99~999.99"
BIT类型
BIT(位)类型用于存储二进制数据,语法为BIT(M);
M:表示位数,范围位1~64
1.2 时间和日期类型
作用:方便在数据库中存储日期和时间分为以下五种
数据类型 | 字节数 | 取值范围 | 日期格式 | 零值 |
---|---|---|---|---|
YEAR | 1 | 1901~2155 | YYYY | 0000 |
DATE | 4 | 1000-01-01~9999-12-31 | YYYY-MM-DD | 0000-00-00 |
TIME | 3 | -838:59:59~ 838:59:59 | HH:MM:SS | 00:00:00 |
DATETIME | 8 | 1000-01-01 00:00:00~9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
TIMESTAMP | 4 | 1970-01-01 00:00:01~2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
1.3字符串类型
数据类型 | 类型说明 |
CHAR | 固定长度字符串 |
VARCHAR | 可变长度字符串 |
TEXT | 大文本对象 |
ENUM | 枚举对象 |
SET | 字符串对象 |
BINARY | 固定长度的二进制数据 |
VARBINARY | 可变长度的二进制数据 |
BLOB | 二进制大对象 |
2. 表的约束
为了防止数据表中输入错误的数据,MySQL定义了一些维护数据库完整的规则,即表的约束。常见的约束分为5种,分别是默认约束、非空约束、主键约束、唯一约束和外键约束。外键约束比较复杂,涉及多表操作,将在后面学习。
2.1 默认约束
默认约束用于为数据表中的字段指定默认值,即当在表中插入一条新记录时,如果没有给这个字段赋值,那么,数据库系统就会为这个字段插入默认值。
语法格式:字段名 字段类型 DEFAULT 默认值
示例
在上述示例中,由于name和age字段没有设置非空约束,在插入记录时省略这两个字段的的值,则分别使用默认值NULL和18。为age字段设置默认值18后,插入NULL值,则保存结果为null,不使用默认值,在为有默认值的字段指定数据时,可以通过default关键字直接指定其使用默认值。
在为现有表添加或删除默认约束,具体如下
通过使用alter table 修改列属性即可添加或删除默认约束
2.2 非空约束
非空约束指字段的值不能为null
语法格式:字段名 字段类型 NOT NULL
注:非空约束与值为null的默认约束(default null)不能同时存在
示例
删除非空约束
alter table 表名 modify 字段名 字段类型 属性
通过使用alter table 修改列属性即可添加或删除非空约束
2.3 唯一约束
唯一约束用于确保数据表中字段的唯一性,即表中字段的值不能重复出现
为现有表添加和删除唯一约束
注:为现有表添加或删除唯一约束不能通过修改字段属性的方式操作,而是按照索引的方式来操作。关于什么时索引后续将会学习到,在这只需记住如何操作即可。下面通过示例的方式
示例
2.4 主键约束
在MySQL中,为了快速查找表中的某条信息,可以通过设置主键来实现。主键可以唯一标识表中的数据,类似于我们的指纹、身份证用于标识人的身份一样。
主键约束其实相当于唯一约束和非空约束的组合,要求字段被约束的字段不允许重复、也不允许出现NULL值,并且每个表最多只能含有一个主键。
语法格式
1.列级约束
字段名 数据类型 PRIMARY KEY
2.表级约束
PRIMARY KEY(字段名1,字段名2~~~)
若表级约束的字段只有一个,则和列级约束效果相同;若有多个则为复合主键。复合主键需要用多个字段来确定一条记录的唯一性,类似于复合唯一键
示例
为现有表添加和删除唯一约束
2.5 自动增长
在为数据表设置主键约束后,每次插入记录时,都需要检查主键的值防止插入的值重复导致插入失败,这会给数据库的使用带来很多麻烦,为此可以利用MySQL提供的自动增长功能生成主键的值。
语法格式
字段名 数据类型 auto_increment
1)一个表中只能有一个自动增长字段,该字段的数据类型是整数类型,且必须定义为键(如:unique key、primary key);
2)若为自动增长的插入NULL、0、DEFAULT或在插入时省略该字段,则该字段就会使用自动增长值;若插入的是一个具体的值,则不会使用自动增长值。
3)自动增长值从1开始自增,每次加1。若插入的值大于自动增长的值,则下次插入的自动增长值会使用最大值加1;若插入的值小于自动增长的值,则不会对自动增长值产生影响;
4)使用DELETE删除记录时,自动增长值不会减小或填补空缺。
示例