1 数据库基础概念
- Data数据
对客观事物的符号表示,如图形符号、数字、字母等,数据是数据库中存储的基本对象。
2. DB数据库
数据库(Database,简称DB)的定义:“按照数据结构来组织、存储和管理数据的仓库”
3. DBMS数据库管理系统
概念:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库,简称DBMS。
DBMS的作用:它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
两大功能:DDL数据定义语言和DML数据操作语言(掌握)
4. 数据库系统功能
数据定义功能:
提供数据定义语言(DDL)
定义数据库中的数据对象
数据操纵功能:
** 提供数据操纵语言(DML)**
操纵数据实现对数据库的基本操作
(查询、插入、删除和修改)
5. 常见DBMS数据库管理系统软件
关系型数据库:MySQL、Oracle、SQL Server、PostgreSQL、DB2…
NO SQL数据库:Redis、Mongodb
6. 关系型数据库
数据库由一批数据构成的有序集合,这些数据被分门别类地存放在一些结构化的数据表(table)里,而数据表之间又往往存在交叉引用的关系,这种关系使数据库又被称为关系型数据库。
2 数据库基本知识
2.1 表
数据库由一批数据构成的有序集合,这些数据被分门别类地存放在一些结构化的数据表(table)里,而数据表之间又往往存在交叉引用的关系,这种关系使数据库又被称为关系型数据库。
数据库—>表—>数据
表包含列和行,列表示表的字段,行表示表的记录
2.2 MySQL数据类型
MySQL中定义数据字段的类型很重要,对于数据库的优化非常重要。
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
数值列类型:整数和浮点数
MySQL支持所有标准SQL数值数据类型。
decimal(M,D)表示更精确的小数值
_decimal(_6,2)表示该参数精度6位,其中整数部分4位,小数部分2位,取值范围为-9999.99~9999.99
字符串类型:
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
CHAR类型和VARCHAR类型长度范围都是0~255之间的大小。
char(长度): 表示固定长度的字符,char(5)该列的数据必须5个长度
varchar(长度): 表示可变长度的字符,varchar(5)该列的数据长度可以在1-5个字符之间。
text:表示长文本数据
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP
时间戳列类型以YYYYMMDDhhmmss的格式来表示值,其取值范围是19700101000000到2037年的某个时间,主要用于记录更改或创建某个记录
2.3列的特殊属性
NULL值
NULL是一种无类型的值,表示”空,什么也没有”
缺省为NULL,即插入值时可以不在此字段插入值,默认NULL值。
如果指定了NOT NULL,则必须在插入值时在此字段添入值。
自增AUTO_INCREMENT
针对数值型的列, 在需要产生唯一标志符号或者顺序值时候,可用此属性。
值一般从1开始,每行增加1,在插入NULL到一个AUTO_INCREMENT列时,MySQL会插入一个比该列中当前最大值大1 的值,
一个表中最多能有一个有此属性的列。
对于想使用此属性的列应该定义为NOT NULL,并定义为PRIMARY KEY 或者定义为UNIQUE键。
举例:create table a(i int auto_increment not null primary key);
默认值DEFAULT
可以通过此属性来指定一个缺省值,即如果没有在此列添加值,那么默认添加此值。
主键Primary Key(PK)
数据库主键,指的是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。
主键主要是用与其他表的外键关联,以及本记录的修改与删除。
主键的选择原则: 该列值唯一,并基本固定。
如果由多个列同时设置成主键称为”联合主键”。
外键Foreign Key(FK)
数据库外键,表示了两个表之间的关系, 通过它可以强制表的参照完整性。
例如A表和B表存在关系:
A表中有一个非主键列1指向B表的主键列,此时A表中的列1就称为A表的外键。
A表中列1的值必须来源于B表的主键列的值。
B表为主表,A表为从表。
3 创建数据库和创建表结构
3.1创建数据库
方式1:通过DDL语句数据库
create database 数据库名;
方式2:通过可视化工具创建数据库
3.2 创建表结构
方式1:通过DDL语句表结构
方式2:通过可视化工具创建数据库
3.3 删除表结构
drop table 表名;
3.3 通过可视化工具对表进行操作
4 SQL基础CRUD操作
4.1 插入语句
insert into 表名(字段名,字段名, … ) values(字段值,字段值,…);
单条插入
批量插入
insert into 表名(字段名,字段名, … ) values(字段值,字段值,…),(字段值,字段值,…)(字段值,字段值,…),…;
4.2 MySQL重置自增序列的初始值
可以先清空表中的数据,并重置自增序列值:
不能使用delete语句删除表中的数据,只是删除数据,并不会重置自增序列值。
需要使用truncate语句删除表中的所有数据,才会重置自增序列值,
// 删除表内的所有数据
truncate table student;
4.3 MySQL创建表时设置自增序列的初始值
create table 表名(
id int auto_increment primary key not null comment ‘编号’
)auto_increment=初始值
4.4 更新语句
update 表名 set 列名=新值,列名=新值 where子句;
说明:
where 子句是判断语句,用来设定条件,限制只更新匹配的行
where 可以省略
4.5 删除语句
delete from 表名 where子句;
说明:
此语句表示删除表中的行, where 子句是判断语句,用来设定条件,限制只删除匹配的行
带where子句,删除匹配的行
不带where子句,删除表中的所有行,表不被删除
where 可以省略
4.6 drop、truncate、delete区别
4.7 关于MySQL的CURRENT_TIMESTAMP
在前面的表示例中,我们创建表时,”创建时间”和”修改时间”字段用来记录 添加记录时间和更新记录的时间,是需要我们自己维护的
表示每一次执行insert语句时,需要为create_time列,插入current_timestamp值
表示每一次执行update语句时,需要为update_time列,插入current_timestamp值
解决方式:
在创建时间字段的时候,为列设置default默认值属性:
**DEFAULT CURRENT_TIMESTAMP **表示当插入数据的时候,该字段默认值为当前时间
ON UPDATE CURRENT_TIMESTAMP表示每次更新这条数据的时候,该字段都会更新成当前时间
这两个操作是MySQL数据库本身在维护,所以可以根据这个特性来生成【创建时间】和【更新时间】两个字段,且不需要代码来维护
可以通过设计表,看看默认值的效果
4.8 查询语句
SELECT语句用于从一个或多个表中查询出需要的信息。
select列名1,列名2,… from表名 where 子句 group by子句 having子句 order by desc/asc limit a,b
4.9 where子句
一般而言,表中的记录总是远远多于我们想查询的记录数,这就需要我们在查询是通过一系列的条件来选择出我们想要获取的记录。设置记录应该满足的条件使用WHERE子句。
WHERE 列名或表达式 谓词 列名或表达式
常见条件
当对要搜索的内容不确定时,可以考虑使用LIKE进行模糊搜索
Navicat执行SQL语句有一个异常信息
解决方式:修改一下当前数据库的SQL_MODE
– 查看SQL_MODE
SELECT @@sql_mode;
– 修改SQL_MODE
SET sql_mode=(SELECT REPLACE(@@sql_mode,‘ONLY_FULL_GROUP_BY’,‘’));