什么是数据库?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢
所以,我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据
RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
1. 数据以表格的形式出现
2. 每行为各种记录名称
3. 每列为记录名称所对应的数据域
4. 许多的行和列组成一张表单
5. 若干的表单组成database
RDBMS术语
在学习前,先了解RDBMS(关系型数据库管理系统)的一些术语
MySql为关系型数据库(Relational Database Management System),这种所谓的“关系型”可以理解为表格的概念,一个关系型数据库由一个或数个表格组成,表格如图所示
MySql安装
这里以Windows安装MySql为例,这里附上MySQL的Windows版下载地址:https://dev.mysql.com/downloads/mysql/
选择合适自己的版本,直接下载即可
下载完成后,将压缩包解压到相应的目录下
具体的安装流程可以参考这篇博客:https://blog.csdn.net/qq_53381910/article/details/131277067
MySql连接
win+r,打开运行窗口,输入cmd,接着就会打开命令行窗口,在命令行窗口中输入对应的命令就可以进入mysql
cmd
mysql -u 你的用户名 -p
参数说明:
敲完按回车,接着输入你的密码,密码是不可见的,正常输入完成后,就会弹出MySQL的欢迎提示了
成功连接到MySql后,你可以在命令行中执行执行SQL查询。
列出所有可用的数据库:
SQL
SHOW DATABASES
选择要使用的数据库
sql
USE 你的数据库名
列出所选数据库中的所有表
SQL
SHOW TABLES
退出`mysql>`命令提示窗口可以使用`exit`命令
cmd
EXIT;
MySql创建数据库
我们可以在登录MySql服务后,使用`create`命令创建数据库,语法如下:
sql
CREATE DATABASE 数据库名
假设我们想创建一个eastwind的数据库
sql
CREATE DATABASE eastwind
建数据库的基本语法如下:
sql
CREATE DATABASE [IF NOT EXISTS] database_name
[CHARACTER SET charset_name]
[COLLATE collation_name]
这里的中括号是可选项,可填可不填,`IF NOT EXISTS`是说,如果不存在,才对该数据库进行创建
MySql删除数据库
使用普通用户登录MySql服务器,需要特定的权限才能创建或者删除数据库,所以通过root用户登录,root用户拥有最高权限
在删除数据库过程中,务必要十分谨慎,因为在执行删除命令后,所有的数据将会消失。
drop命令删除数据库
drop命令格式:
sql
DROP DATABASE <database_name>; -- 直接删除数据库,不检查是否存在
或
DROP DATABASE [IF EXISTS] <database_name>;
参数说明:
假设要删除的数据库是eastwind
sql
DROP DATABASE IF EXISTS eastwind
MySql选择数据库
在你连接到MySql数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库
使用`USE`命令选择使用的数据库
sql
USE database_name
参数说明:
选择数据库后,后续的操作在你选择的数据库上执行。
数据类型
MySql中定义数据字段的类型对你数据库的优化是非常重要的。
MySql支持多种类型,大致分为三类:数据、日期/时间和字符串(字符)类型
MySql支持所有标准SQL数值数据类型
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)
数值类型
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR
每个时间类型有一个有效值范围和一个零值,当指定不合法的MySql不能表示的值时使用零值
TIMESTAMP类型有专有的自动更新特性
字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
注意:char(n)和varchar(n)中的n代表字符的个数,并不代表字节个数,比如CHAR(30)就可以存储30个字符
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储和检索过程中不进行大小写转换
BINARY和VARBINARY类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。也说明它们没有字符集,并且排序和比较基于列值字节的数值值
BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们在区别在于可容纳存储范围不同
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,对应着存储不同最大长度
枚举和集合类型(Enumeration and Set Typres)
MySql创建数据表
创建数据表需要以下信息:
语法
sql
CREATE TABLE table_name(
column1 datatype,
column2 datatype
)
参数说明:
这里看一个全面的实例
SQL
CREATE TABLE IF NOT EXISTS `EASTWIND`(
`ID` INT PRIMARY KEY AUTO_INCREMENT,
`TITLE` VARCHAR(100) NOT NULL,
`AUTHOR` VARCHAR(40) NOT NULL,
`DATE` DATE
)ENGINE=INNODB DEFAULT CHARSET = UTF8;
CREATE TABLE IF EXISTS `EASTWIND`:如果EASTWIND这个表不存在,就进行创建
sql
`ID` INT PRIMARY KEY AUTO_INCREMENT,
`TITLE` VARCHAR(100) NOT NULL,
`AUTHOR` VARCHAR(40) NOT NULL,
`DATE` DATE
ID、TITLE、AUTHOR、DATE这些是column
VARCHAR、DATE这些是datatype
而datatype后面跟的PRIMARY KEY、NOT NULL这些,就是给出一些条件
AUTO_INCREMENT:定义列为自增的属性,一般用于主键,数值会自动加1
PRIMARY KEY:用于定义列为主键
ENGINE=INNODB DEFAULT CHARSET = UTF8:指定存储引擎为INNODB,CHARSE设置编码
MySql删除数据表
和删除数据库基本一致
语法
sql
DROP TABLE 表名 -- 直接删除表,不检查是否存在
或
DROP TABLE [IF EXISTS] table_name;
MySql插入数据
MySql表中使用`insert into`语句来插入数据
语法
SQL
INSERT INTO TABLE_NAME (COLUMN1,COLUMN2,COLUMN3,...)
VALUES(VALUE1,VALUE2,VALUE3,...)
参数说明:
如果数据是字符型,必须使用单引号`'`或者双引号`"`,如:'value1'、'value2'
假如我们想插入一行数据到eastwind表中
sql
INSERT INTO eastwind(id,name,age)
values(1,"zhangsan",18)
如果是插入所有列的数据,可以省略列名
SQL
INSERT INTO eastwind
values(NULL,"zhangsan",18)
这里,`NULL`是用于自增长列的占位符,表示系统将为id列生成一个唯一的值
如果要插入多行数据,可以在VALUES子句中指定多组数值
sql
INSERT INTO eastwind
values
(NULL,"zhangsan",18),
(NULL,"zhangsan",19),
(NULL,"zhangsan",17)
MySql查询数据
MySql数据库使用`SELECT`语句来查询数据
语法
SQL
SELECT COLUMN1,COLUMN2,...
FROM TABLE_NAME
[WHERE CONDITION]
[ORDER BY COLUMN_NAME [ASC | DESC]]
[LIMIT NUMBER]
参数说明:
SQL
-- 选择所有列的行
SELECT * FROM EASTWIND;
-- 选择特定列的所有行
SELECT ID,NAME FROM EASTWIND;
-- 添加Where子句,选择满足条件的行
SELECT * FROM EASTWIND WHERE NAME = 'zhangsan';
-- 添加ORDER BY子句,按照某列的升序进行排序
SELECT * FROM EASTWIND ORDER BY NAME;
-- 添加ORDER BY子句,按照某列的降序进行排序
SELECT * FROM EASTWIND ORDER BY NAME DESC;
-- 添加LIMIT 子句,限制返回的行数
SELECT * FROM EASTWIND LIMIT 5
Where子句
我们知道从MySql表中使用`SELECT`语句来读取数据
如果想要带条件从表中筛选数据,可以将WHERE子句添加到SELECT语句中
WHERE子句用于在MySql中过滤查询结果,只返回满足特定条件的行
语法
SQL
SELECT COLUMN1,COLUMN2,...
FROM TABLE_NAME
WHERE CONDITION;
参数说明:
更多说明:
等于条件
SQL
SELECT * FROM EASTWIND WHERE XXX = XXX
不等于条件
sql
SELECT * FROM EASTWIND WHERE XXX != XXX
SELECT * FROM EASTWIND WHERE XXX <> XXX
大于、大于等于条件
sql
SELECT * FROM EASTWIND WHERE XXX > XXX
SELECT * FROM EASTWIND WHERE XXX >= XXX
小于、小于等于条件
sql
SELECT * FROM EASTWIND WHERE XXX < XXX
SELECT * FROM EASTWIND WHERE XXX <= XXX
组合条件(AND、OR)
SQL
SELECT * FROM EASTWIND WHERE XXX = XXX AND XXX = XXX
SELECT * FROM EASTWIND WHERE XXX = XXX OR XXX = XXX
模糊匹配条件(LIKE)
LIKE是正则匹配内容
`%`表示匹配任意,`_`表示匹配单个
SQL
SELECT * FROM EASTWIND WHERE XXX LIKE 'X%'
IN条件
比如说1 in (1,2,3),这会返回满足条件的行数据
SQL
SELECT * FROM EASTWIND WHERE XXX IN (XXX,XXX)
NOT条件
跟取反是一个意义的,比如1=1是true,NOT 1=1就是false
SQL
SELECT * FROM EASTWIND WHERE NOT 1 = 1
BETWEEN条件
BETWEEN...AND 从字面上翻译过来是从...到...,所以意为XXX由1到3
SQL
SELECT * FROM EASTWIND WHERE XXX BETWEEN 1 AND 3
ISNULL条件
判断xxx是否为空
SQL
SELECT * FROM EASTWIND WHERE XXX IS NULL
IS NOT NULL条件
判断xxx是否不为空
SQL
SELECT * FROM EASTWIND WHERE XXX IS NOT NULL
MySQL Update更新数据
如果需要更新或修改MySql中的数据,我们可以使用`UPDATE`命令来操作
语法
SQL
UPDATE TABLE_NAME
SET COLUMN1 = XXX,COLUMN2 = XXX,COLUMN3 = ...
[WHERE CONDITION]
更新某一列的值
SQL
UPDATE EASTWIND
SET XXX = XXX
WHERE CONDITION = XXX
更新多个列的值
SQL
UPDATE EASTWIND
SET XXX = XXX,XXX = XXX
WHERE CONDITION = XXX
使用表达式更新值
SQL
UPDATE EASTWIND
SET XXX = XXX * 2
WHERE XXX = CONDITION
MySQL DELETE语句
如果想删除数据表中的记录,可以使用`DELETE FROM`来删除MySQL数据表中的记录
语法
SQL
DELETE FROM TABLE_NAME
WHERE CONDITION
参数说明:
更多说明:
当你想删除指定记录时,请使用WHERE子句
删除符合条件的行
SQL
DELETE FROM EASTWIND
WHERE XXX = XXX;
删除所有行
SQL
DELETE FROM TABLE_NAME;