(1)数据的保存:大量程序产生的数据在程序运行时和程序结束后对数据进行保存。
(2)数据的完整性:连接数据和数据之间的结构,连接数据和程序之间的依赖关系。
(3)数据的读取:为了使写入的数据更方便的进行读取。
(4)数据的安全性:防止因为外界因素所造成的数据丢失。
(5)结构化:数据在数据库中的储存可以依靠二维表结构的逻辑来储存数据,可以参考数据原有的依赖关系和机构关系去储存数据。
(6)独立性:储存在数据库的数据和应用程序之间相互独立,互不影响。
(7)共享性:多个用户可以共同分析计算机数据库中的数据资源,同一数据可以同时被多人使用,从而实现数据库高效共享性.
(8)安全性:访问数据库时对用户的口令,用户的权限进行限制,或者对数据的储存进行限制。
长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据“仓库”。
作用:存放、管理数据。
分类:关系型数据库、NoSQL数据库
(1)操作便捷
(2)小巧,功能齐全
(3)免费,开源的数据库
(4)可运行与windows或linux系统
数据库(Database) |
以文件的形式存放在磁盘上,即对应于一个或多个物理文件。
|
字段(Field) |
也称域。表中的每一列称为一个字段。每个字段都有相应的描述信息。
|
索引(Index) | 索引实际上是一种特殊类型的表,其中含有关键字的值和指向实际记录位置的指针,可以提高访问数据库的效率。 |
数据表(Table) |
简称表,由一组数据记录组成,数据库中的数据是以表为单位进行组织的。一个表是一组相关的按行排列的数据;每个表中都含有相同类型的信息。
|
记录(Record) |
表中的每一行称为一个记录,它由若干个字段组成。
|
SQL语句 |
结构化查询语句命令,用来从一个或多个表中获取一组指定的记录,或者对某个表执行指定的操作。
|
名称 | 解释 | 命令 | |
DDL (数据定义语言) | 定义和管理数据对象,如数据库,数据表等。 | CREATE | 创建 |
DROP | 删除 | ||
ALTER | 修改 | ||
DML (数据操作语言) | 操作数据库对象中所包含的数据。 | INSERT | 插入数据 |
UPDATE | 更新数据 | ||
DELETE | 删除数据 | ||
DQL (数据查询语言) | 用于查询数据库数据 |
SELECT
| 查询 |
DCL (数据控制语言) |
用来管理数据库的语言,包括管理权限及数据更改
| GRANT | 授权 |
COMMIT | 提交 | ||
ROLLBACK | 回滚 |
(1)创建数据库 CREATE DATABASE 数据库名称;
(2)删除数据库 DROP DATABASE 数据库名称;
(3)查看数据库 SHOW DATABASES;
(4)选择数据库 USE 数据库名称;
-- 创建数据库
CREATE DATABASE day001;
-- 删除数据库
DROP DATABASE day001;
-- 查看数据库
SHOW DATABASES;
-- 选择数据库
USE day001;
语法:
字符处类型
类型 | 说明 | 取值范围 | 储存需求 |
---|---|---|---|
char[(M)] |
固定长字符串,检索快但费空间, 0 <= M <= 255
|
M字符
|
char[(M)]
|
varchar[(M)]
|
可变字符串,0 <= M <= 65535
| 可变长度 | varchar[(M)] |
tinytext | 微型文本串 |
16777215长度+3个字节
| tinytext |
text |
文本串(4个G左右大小)
|
4294967295长度+4个字节
| text |
char和varchar比较
类型 | 特点 | 空间上 | 时间上 | 使用场景 |
---|---|---|---|---|
char(M) | 固定长度 | 浪费储存空间 | 效率高 | 储存不大,速度要求高 |
varchar(M) | 可变长度 | 节省储存空间 | 效率低 | 非CHAR的情况 |
数值类型
tinyint
|
非常小的数据
|
有符值: -2 ^7 ~ 2^7-1,无符号值:0 ~ 28-1
|
1字节
|
smallint
|
较小的数据
|
有符值: -2 15 ~ 215 -1 ,无符号值: 0 ~ 216 -1
|
2字节
|
mediumin
|
中等大小的数据
|
有符值: -2 23 ~ 223 -1 ,无符号值: 0 ~ 224 -1
| |
int
|
整数
|
有符值: -2^31 ~ 2^31-1,无符号值:0 ~ 2^32-1
|
4字节
|
bigint
|
较大的整数
|
有符值: -2^63 ~2^63-1,无符号值:0 ~2^64-1
|
8字节
|
float
|
单精度浮点数
|
±1.1754351e -38
|
4字节
|
double
|
双精度浮点数
|
±2.2250738585072014e -308
|
8字节
|
Decimal
|
字符串形式的浮点数
|
decimal(m, d)
|
m个字节
|
日期和时间类型
类型 | 说明 | 取值范围 | 储存需求 |
---|---|---|---|
DATE |
YYYY-MM-DD,日期格式
|
1000-01-01~ 9999-12-31
|
DATE
|
TIME
|
Hh:mm:ss ,时间格式
|
-838:59:59~838:59:59
|
TIME
|
DATETIME
|
YY-MM-DD hh:mm:ss
|
1000-01-01 00:00:00 至 9999-12-31 23:59:59
|
DATETIM
|
TIMESTAMP
|
YYYYMMDDhhmmss格式表示的时间
|
197010101000000 ~2037年的某个时刻
|
TIMESTAMP
|
YEAR
|
YYYY格式的年份值
|
1901~2155
|
YEAR
|
DESCRIBE teacher;
DESC teacher;
方式二:show create table 表名
SHOW CREATE TABLE teacher;
(1)修改表名 ALTER TABLE 旧表名 RENAME AS 新表名;
(2)添加字段 ALTER TABLE 表名 ADD 字段名 列类型 [属性];
(3)删除字段 ALTER TABLE 表名 DROP 字段名;
(4)修改字段
方式一:ALTER TABLE 表名 MODIFY 字段名 列类型 [属性];
方式二:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型 属性;
(5)删除表 DROP TABLE 表名;
-- 修改表名
ALTER TABLE teacher RENAME AS laoshi;
-- 添加字段
ALTER TABLE teacher ADD t_phone CHAR(11) COMMENT '老师电话';
-- 删除字段(危险操作)
ALTER TABLE teacher DROP tea_name;
-- 修改字段 替换式,不写就会使用默认值
-- 满足数据可以转换为修改的数据类型,长度满足修改的长度。
-- 方式1:modify
ALTER TABLE teacher MODIFY t_phone CHAR(20);
-- 方式2:change
-- alter table teacher change 旧字段名 新字段名 数据类型 属性;
ALTER TABLE teacher CHANGE t_phone dianhua CHAR(11) COMMENT '电话';
-- 删除表(危险操作)
DROP TABLE teacher;
概念:约束实际上就是表中数据的限制条件
作用:表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效
种类:
非空约束(not null)
唯一性约束(unique)
主键约束(primary key) PK
外键约束(foreign key) FK
检查约束(目前MySQL不支持、Oracle支持)
概念:用not null约束的字段不能为null值,必须给定具体的数据
-- 非空约束
CREATE TABLE teacher2(
t_name VARCHAR(10) NOT NULL DEFAULT '路人甲',
t_age TINYINT
);
若字段为空则报错
概念:unique约束的字段,具有唯一性,不可重复,但可以为null
-- 唯一约束
-- 方式一:行级唯一约束
CREATE TABLE teacher3(
t_name VARCHAR(10) UNIQUE,
t_age TINYINT
);
-- 方式二:表级唯一约束
CREATE TABLE teacher4(
t_name VARCHAR(10),
t_age TINYINT,
-- 表级约束给约束起名字
CONSTRAINT uniqu_tname_tage UNIQUE(t_name,t_age) -- 联合唯一约束(一模一样,才算违反唯一约束)
);
如果字段相同则报错
概念:主键(primary key)是表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录
-- 主键约束
-- 1,所有的表都必须有一个主键
-- 2,每张表只允许有一个主键
-- 3,被设置的主键的列不允许重复(唯一性)
-- 4,不允许为空(不能为null)
-- 5,一般作为主键的类型 INT,BIGINT,依次递增(auto_increment)
CREATE TABLE teacher5(
t_name VARCHAR(10) PRIMARY KEY,
t_age TINYINT
);
CREATE TABLE teacher6(
t_no INT PRIMARY KEY auto_increment,
t_name VARCHAR(10),
t_age TINYINT
);
-- 表级主键
CREATE TABLE teacher7(
t_email VARCHAR(20),
t_passwd VARCHAR(10),
t_name VARCHAR(10),
PRIMARY KEY(t_email,t_name), -- 只能有一个
UNIQUE(t_email),
UNIQUE(t_passwd),
UNIQUE(t_email,t_name)
);
外键:外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。 若有两个表A、B,id是A的主键,而B中也有id字段,则id就是表B的外键。
A为基本表或父标,主表,B为信息表,子表,副表
定义:foreign key(表的字段名) references 父表表名(父表的字段名)
-- 外键约束
-- 先创建父表,再创建子表
-- 外键数据是可以为空的
-- 添加数据的时候,先要添加父表的数据,再添加子表
-- 删除数据的时候,先要删除子表的数据,再删除父表的数据
-- 什么样的(父表)可以作为(子表)的外键(要么主键,要么唯一)
CREATE TABLE A(
id INT PRIMARY KEY auto_increment,
a_name VARCHAR(10)
);
CREATE TABLE B(
bid INT PRIMARY KEY auto_increment,
b_name VARCHAR(10),
id INT,
FOREIGN KEY(id) REFERENCES A(id)
);
若添加外键数据的值主键不存在
17,约束的添加
添加非空约束 | alter table 表名 modify 字段名 not null |
添加唯一约束 | alter table 表名 add unique(字段名) |
添加主键约束 | alter table 表名 add primary key(字段名) |
添加外键约束 | alter table 表名 add constraint N1 foreign key(字段名) references 父表(父表字段名) |
SHOW CREATE TABLE teacher;
CREATE TABLE `teacher` (
`tea_age` int(11) DEFAULT NULL,
`dianhua` char(11) DEFAULT NULL COMMENT '电话'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
-- 给tea_age添加非空约束
ALTER TABLE teacher MODIFY tea_age INT(11) NOT NULL;
CREATE TABLE `teacher` (
`tea_name` varchar(10) DEFAULT NULL,
`tea_age` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
-- 给tea_name添加唯一约束
ALTER TABLE teacher MODIFY tea_name VARCHAR(20) UNIQUE;
CREATE TABLE `teacher` (
`tea_name` varchar(20) NOT NULL,
`tea_age` int(11) NOT NULL,
PRIMARY KEY (`tea_name`),
UNIQUE KEY `tea_name` (`tea_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
-- 给tea_name添加主键约束
ALTER TABLE teacher MODIFY tea_name VARCHAR(10) PRIMARY KEY;
CREATE TABLE `teacher` (
`tea_name` varchar(10) NOT NULL,
`tea_age` int(11) NOT NULL,
PRIMARY KEY (`tea_name`),
UNIQUE KEY `tea_age` (`tea_age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
18,约束的删除
删除not null约束
|
alter table 表名 modify 列名 类型;
|
删除unique约束
|
alter table 表名 drop index 唯一约束名;
|
删除primary key约束
|
alter table 表名 drop primary key;
|
删除foreign key约束
|
alter table 表名 drop foreign key 外键名;
|
-- 删除tea_age的非空约束
ALTER TABLE teacher MODIFY tea_age INT(11);
CREATE TABLE `teacher` (
`tea_name` varchar(20) NOT NULL,
`tea_age` int(11) DEFAULT NULL,
PRIMARY KEY (`tea_name`),
UNIQUE KEY `tea_name` (`tea_name`),
UNIQUE KEY `tea_name_2` (`tea_name`),
UNIQUE KEY `tea_age` (`tea_age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
-- 删除tea_age的唯一约束
ALTER TABLE teacher DROP INDEX tea_age;
CREATE TABLE `teacher` (
`tea_name` varchar(20) NOT NULL,
`tea_age` int(11) DEFAULT NULL,
PRIMARY KEY (`tea_name`),
UNIQUE KEY `tea_name` (`tea_name`),
UNIQUE KEY `tea_name_2` (`tea_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
-- 删除表的主键
ALTER TABLE teacher DROP PRIMARY KEY;
CREATE TABLE `teacher` (
`tea_name` varchar(20) NOT NULL,
`tea_age` int(11) DEFAULT NULL,
UNIQUE KEY `tea_name` (`tea_name`),
UNIQUE KEY `tea_name_2` (`tea_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci