简介
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
DDL(数据定义语言)
操作数据库
-- 查询
show databases;
-- 创建数据库
create database 数据库名称;
-- 创建数据库(判断,如果不存在则创建)
create database if not exists 数据库名称;
-- 删除数据库
drop database 数据库名称;
-- 删除数据库(判断,如果存在则删除)
drop database if exists 数据库名称;
-- 查看当前使用的数据库
select database();
-- 使用数据库
use 数据库名称;
操作表
-- 查询表
show tables;
-- 查询表结构
desc 表名称;
-- 创建表
create table 表名称(
字段名1 数据类型1,
字段名2 数据类型2,
字段名3 数据类型3,
...
字段名n 数据类型n
);
-- 删除表
drop table 表名;
-- 删除表时判断表是否存在
drop table if exists 表名;
-- 修改表
alter table 表名 rename to 新的表名;
-- 添加一列
alter table 表名 add 列名 数据类型;
-- 修改数据类型
alter table 表名 modify 列名 新数据类型;
-- 修改列名和数据类型
alter table 表名 change 列名 新列名 新数据类型;
-- 删除列
alter table 表名 drop 列名;
数据类型
数据类型 | 大小 | 描述 |
---|---|---|
MEDIUNINT | 3 bytes | 大整数值 |
INT或INTEGER | 4 bytes | 大整数值 |
BIGINT | 8 bytes | 极大整数值 |
FLOAT | 4 bytes | 单精度浮点数值 |
DOUBLE | 8 bytes | 双精度浮点数值 |
DECIMAL | 小数值 | |
DATE | 3 | 日期值 |
TIME | 3 | 时间值或持续时间 |
YEAR | 1 | 年份值 |
DATETIME | 8 | 混合日期和时间值 |
TIMESTAMP | 4 | 混合日期和时间值、时间戳 |
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过255个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16777215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16777215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4294967295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4294967295 bytes | 极大文本数据 |
DML(数据操纵语言)
添加数据
-- 给指定列添加数据
insert into 表名(列名1,列名2,...) values (值1,值2,...);
-- 给全部列添加数据
insert into 表名 values (值1,值2,...);
-- 批量添加数据
insert into 表名(列名1,列名2,...) values (值1,值2,...),(值1,值2,...),(值1,值2,...)...;
insert into 表名 values (值1,值2,...),(值1,值2,...),(值1,值2,...)...;
更新数据
-- 更新数据
update 表名 set 列名1=值1, 列名2=值2;
删除数据
-- 删除数据
delete from 表名 where 列名1=值1;
DQL(数据查询语言)
条件查询
select 字段列表 from 表名 where 条件列表;
分页查询
select 字段列表 from 表名 limit 起始索引, 查询条目数;
-- 起始索引:从0开始
-- 计算公式:起始索引=(当前页码-1)*每页显示条数
约束
概念
约束是作用于表中列上的规则,用于限制加入表的数据
约束的存在保证了数据库中数据的正确性、有效性和完整性
分类
约束名称 | 描述 | 关键字 |
---|---|---|
非空约束 | 保证列中所有数据不能有null值 | NOT NULL |
唯一约束 | 保证列中所有数据各不相同 | UNIQUE |
主键约束 | 主键是一行数据的唯一标识,要求非空白唯一 | PRIMARY KEY |
检查约束 | 保证列中的值满足某一条件 | CHECK |
默认约束 | 保存数据时,未指定值则采用默认值 | DEFAULT |
外键约束 | 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性 | FOREIGN KEY |
🔔MySql不支持检查约束
以外键约束为例
-- 创建表时添加外键约束
create table 表名(
列名 数据类型,
...
[CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
);
-- 建完表后添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名称) REFERENCES 主表名称(主表列名称);
-- 删除约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
数据库设计
一对多
一对多关系是建立在两张表之间的关系。一个表中的一条数据可以对应另一个表中的多条数据。记住:外键永远在多方。外键允许重复,允许含有空值。
多对多
需要建立一个中间表,中间表里建立两个列,然后需要用这两个列作为这个表的联合主键,然后每个列在作为外键参照各自的表的主键。
一对一
一对一关系多用于表拆分,将一个实体中经常使用的字段放在一张表,不经常使用的字段放另一个表,用于提升查询性能
实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)
多表查询
连接查询
-
内连接:相当于查询A B交集数据
-- 隐式内连接 SELECT 字段列表 FROM 表1,表2... WHERE 条件; -- 显示内连接 SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;
-
外连接:
-
左外连接:相当于查询A表所有数据和交集部分数据
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
-
右外连接:相当于查询B表所有数据的交集部分数据
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
-
子查询
-
概念:
- 查询中嵌套查询,称嵌套查询为子查询
-
根据查询结果不同,作用不同:
-
单行单列
SELECT 字段列表 FROM 表 WHERE 字段名=(子查询);
-
多行单列
SELECT 字段列表 FROM 表 WHERE 字段名 IN (子查询);
-
多行多列
SELECT 字段列表 FROM (子查询) WHERE 条件;
-
事务
简介
- 数据库的事务是一种机制、一个操作序列,包含了一组数据库操作命令
- 事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败
- 事务是一个不可分割的工作逻辑单元
四大特征
- 原子性(Atomicity):事务是不可分割的最小操作单元,要么同时成功,要么同时失败
- 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态
- 隔离性(Isolation):多个事务之间,操作的可见性
- 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
用法
-- 开启事务
START TRANSACTION 或者 BEGIN;
-- 提交事务
COMMIT;
-- 回滚事务
ROLLBACK;
mysql 事务默认自动提交
-- 查看事务的默认提交方式
SELECT @autocommit;
-- 1. 自动提交 0.手动提交
-- 修改事务提交方式
set @@autocommit = 0;
案例:
MySQL事务 - 万般自然 - 博客园 (cnblogs.com)
来源:https://www.cnblogs.com/xiao-sq/p/16139136.html
本站部分图文来源于网络,如有侵权请联系删除。