数据库MySQL

1.MySQL介绍

1.1数据库概述

  • 什么是数据库(DataBase,DB)

  • 数据库就是存储数据的仓库 ,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。

  • 什么是数据库管理系统

  • 数据库管理系统(DataBase Management System,DBMS):操作和管理数据库文件的软件。

  • 数据库与数据库管理系统的关系

1.2 常见的数据库管理系统

  • MYSQL :开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。

  • MariaDB:数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品

  • Oracle :收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。

  • DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.

  • SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。

  • SyBase :已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。

  • SQLite : 嵌入式的小型数据库,应用在手机端。

1.3 数据表

  • 数据库与数据表的关系:一个数据库中可以有若干张表
  • 数据表是一种结构化的文件,类似于我们日常看到的表格。

我们可以把数据的信息按照表的格式依次存储构成一条表记录。

多个数据可以写成多行表记录 。

每张表中存储的是同一种类型的数据。

  • 表记录与java类对象的对应关系

类----------表

类中属性----------表中字段

对象----------记录

2.SQL语句

2.1 SQL概述

2.1.1 SQL语句介绍

  • 数据库是不认识JAVA语言的,但是我们同样要与数据库交互,这时需要使用到数据库认识的语言SQL语句,它是数据库的代码。
  • 结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。

普通话:各数据库厂商都遵循的ISO标准。

方言:数据库特有的语法。

2.1.2 SQL语句分类

  • 数据定义语言:简称==DDL==(Data Definition Language),用来定义数据库对象,也就是创建,修改,删除:数据库,表,列等。关键字:create,alter,drop等

  • 数据操作语言:简称==DML==(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等

  • 数据查询语言:简称==DQL==(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等

  • 数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。

2.2 DDL之数据库操作:database

2.2.1 创建数据库

--格式:
create database 数据库名;
create database 数据库名 character set 字符集;

2.2.2 查看数据库

show databases;

2.2.3 删除数据库

--drop database 数据库名称;

2.2.4 切换数据库

--查看正在使用的数据库:
select database();

--切换数据库:
use 数据库名;

2.3 DDL之表操作:table

2.3.1 创建表

CREATE TABLE 表名
(
字段名1 数据类型(长度),
字段名2 数据类型(长度),
字段名3 数据类型(长度),
....
);

  • 详细的数据类型如下:

整数类型

类型 描述
tinyInt 很小的整数
smallint 小的整数
mediumint 中等大小的整数
int(integer) 普通大小的整数

小数类型

类型 描述
float 单精度浮点数
double 双精度浮点数
decimal(m,d) 压缩严格的定点数 decimal(10,2)

日期类型

类型 描述
year YYYY 1901~2155
time HH:MM:SS -838:59:59~838:59:59
date YYYY-MM-DD 1000-01-01~9999-12-3
datetime YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59
timestamp YYYY-MM-DD HH:MM:SS 1970~01~01 00:00:01 UTC~2038-01-19 03:14:07UTC

文本、二进制类型

类型 描述
CHAR(M) M为0~255之间的整数定长 char(10),保存时在右侧填充空格
VARCHAR(M) M为0~65535之间的整数变长 varchar(10)
TINYBLOB 允许长度0~255字节
BLOB 允许长度0~65535字节
MEDIUMBLOB 允许长度0~167772150字节
LONGBLOB 允许长度0~4294967295字节
TINYTEXT 允许长度0~255字节
TEXT 允许长度0~65535字节
MEDIUMTEXT 允许长度0~167772150字节
LONGTEXT 允许长度0~4294967295字节
VARBINARY(M) 允许长度0~M个字节的变长字节字符串
BINARY(M) 允许长度0~M个字节的定长字节字符串

2.3.2 查看表

--查看数据库中的所有表:
show tables;
--查看表结构:
--desc 表名;
desc sort;

2.3.3 删除表

drop table 表名;

2.4 DML数据操作语言

2.4.1 插入表记录:insert

  • 语法

--向表中插入某些字段
insert into 表 (字段1,字段2,字段3..) values (值1,值2,值3..);
--向表中插入所有字段,字段的顺序为创建表时的顺序
insert into 表 values (值1,值2,值3..);

  • 注意:

值与字段必须对应,个数相同,类型相同

值的数据大小必须在字段的长度范围内

除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)

如果要插入空值,可以不写字段,或者插入 null

2.4.2 更新表记录:update

  • 用来修改指定条件的数据,将满足条件的记录指定列修改为指定值
  • 语法:

--更新所有记录的指定字段

update 表名 set 字段名=值,字段名=值,...;

--更新符号条件记录的指定字段

update 表名 set 字段名=值,字段名=值,... where 条件;

2.4.3 删除记录:delete

  • 语法:

delete from 表名 [where 条件];//删除表,但是计数器会增加,也就是说删除的是内容,表格还在
或者
truncate table 表名;//删除表,但是会重新创建一个

2.5 DQL数据查询

2.5.1 语法

SELECT column1, column2, ...
FROM table_name
WHERE condition
GROUP BY column1, column2, ...
HAVING group_condition
ORDER BY column1 ASC/DESC, column2 ASC/DESC, ...
LIMIT number;

2.5.2 单表查询

  • 比较运算符
符号 含义
> < <= >= = <> != 大于、小于、大于(小于)等于、不等于
BETWEEN ...AND... 显示在某一区间的值(含头含尾)
IN(set) 显示在in列表中的值,例:in(100,200)
LIKE '张pattern' 模糊查询,Like语句中, %代表零个或多个任意字符, *代表一个字符, 例如:first_name like '*a%';
IS NULL 判断是否为空
  • 逻辑运算符
符号 含义
and 多个条件同时成立
or 多个条件任一成立
not 不成立,例:where not(salary>100);
  • 通配符
符号 含义
% 表示0个和多个字符,与like一同使用
_ 表示1个字符,与like一同使用

2.6 SQL约束

2.6.1 概述

  • SQL约束是用于确保数据完整性和一致性的一种机制,通过限制表中的数据类型和关联关系来维护数据库的准确性。
  • SQL约束通过强制执行规则来限制表中的数据,常见约束如下:
    • ‌外键约束(FOREIGN KEY)维护表间关联数据的完整性;

    • 唯一约束‌(UNIQUE)保证某列的值在表中唯一;

    • 非空约束‌(NOT NULL)确保某列的值不能为空;

    • 主键约束‌(PRIMARY KEY)确保每行数据有唯一标识;

2.6.2 主键约束

  • PRIMARY KEY 约束唯一标识数据库表中的每条记录。

主键必须包含唯一的值。

主键列不能包含 NULL 值。

每个表都应该有且只能有一个主键。

  • 语法:

CREATE TABLE `edu_teacher` (
`id` int(19) PRIMARY KEY AUTO_INCREMENT COMMENT '讲师ID',
`name` varchar(20) COMMENT '讲师姓名',
...
)

2.6.3 自动增长

  • 我们通常希望在每次插入新记录时,数据库自动生成字段的值。

  • 我们可以在表中使用 auto_increment(自动增长列)关键字,自动增长列类型必须是整数类型,自动增长列必须为键(一般是主键)。

  • 语法:

CREATE TABLE `edu_teacher` (
`id` int(19) PRIMARY KEY AUTO_INCREMENT COMMENT '讲师ID',
`name` varchar(20) COMMENT '讲师姓名',
...
)

2.6.4 默认值和注释

  • 默认值:在添加数据中,如果该字段不指定值,采用默认值处理
  • 注释:对字段或表解释性的文字
  • 语法:

CREATE TABLE 表名 (
`字段` 类型 default 默认值 COMMENT '注释',
...
)

老师表

CREATE TABLE `edu_teacher` (
`id` int(19) PRIMARY KEY AUTO_INCREMENT COMMENT '讲师ID',
`name` varchar(20) COMMENT '讲师姓名',
`intro` varchar(255) COMMENT '讲师资历,一句话说明讲师',
`career` text COMMENT '讲师简介',
`level` int(10) COMMENT '头衔 1高级讲师 2首席讲师',
`avatar` varchar(255) COMMENT '讲师头像',
`sort` int(10) DEFAULT 0 COMMENT '排序',
`is_deleted` tinyint(10) DEFAULT 0 COMMENT '逻辑删除 1(true)已删除, 0(false)未删除',
`gmt_create` datetime COMMENT '创建时间',
`gmt_modified` datetime COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_name`(`name`) USING BTREE
) COMMENT = '讲师';

2.6.5 非空约束

  • NOT NULL 约束强制列 不接受 NULL 值。
  • NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

用户表

CREATE TABLE `edu_user` (
`id` INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL COMMENT '用户名',
`password` VARCHAR(255) NOT NULL COMMENT '用户密码',
`phone` CHAR(11) DEFAULT NULL COMMENT '电话',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
`roles` VARCHAR(30) DEFAULT NULL COMMENT '角色,多个值使用逗号分隔,例如:admin,editor',
`created` DATE DEFAULT NULL,
`status` CHAR(2) COMMENT '状态:0 未激活、1已激活'
) ;

2.6.6 唯一约束

  • UNIQUE 约束唯一标识数据库表中的每条记录。

UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

PRIMARY KEY 拥有自动定义的 UNIQUE 约束。

请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

CREATE TABLE Persons
(
Id_P int UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

相关推荐
哈__1 小时前
告别复杂 SQL 性能瓶颈!金仓智能下推技术的实战解析
数据库·sql
源远流长jerry1 小时前
dpdk19.08编译问题解决方案
数据库·postgresql·sqlserver
微学AI2 小时前
复杂查询中 JOIN 条件下推失败导致的性能瓶颈-金仓数据库
数据库
cyforkk2 小时前
数据库里的隐形守卫:通俗易懂理解 RLS(行级安全)
数据库·安全
zxrhhm2 小时前
Oracle一般而言standby redo日志文件组数要比primary数据库的online redo日志文件组数至少多一个,为什么?
数据库·oracle
小鸡脚来咯2 小时前
SQL常用函数
数据库·sql
道长没有道观2 小时前
mysql database learn
数据库·mysql
code_li2 小时前
多数据高性能 同步 到本地数据库表里
数据库
一个天蝎座 白勺 程序猿2 小时前
Apache IoTDB(18):IoTDB时序数据库的数据同步之Pipe机制与插件同步指南
数据库·apache·时序数据库·iotdb