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)
)