数据库的基本概念
数据库:用于存储和管理数据的仓库
特点:
- 数据结构化
- 方便存储和管理数据
- 使用统一的方式操作数据库
常见的数据库软件:
Oracle Database:甲骨文公司的RDBMS(通常简称为Oracle)
SQL Server :微软公司的RDBMS
DB2:IBM 公司的RDBMS
PostgreSQL:开源的RDBMS
MySQL :开源的RDBMS
SQL
概念:结构化查询语言,一种ANSI的标准计算机语言
(定义了操作所有关系型数据库的规则)
语法:
- SQL语句可以单行或多行书写,并以分号结尾
- SQL对大小写不敏感
- 注释:
(1)单行注释: -- 注释内容 或 # 注释内容(mysql 特有)
(2)多行注释: /* 注释 */
分类:
(1)DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等 关键字:create, drop,alter 等
(2) DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改 关键字:insert, delete, update 等
(3) DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据) 关键字:select, where 等
DDL(操作数据库和表)
DDL一些重要语句:
(操作库)
1)创建:创建数据库:create database 数据库名称;
2)查询:
查询所有数据库的名称: show databases;
查询某个数据库的字符集:show create database 数据库名称;
3)删除:删除数据库:drop database 数据库名称;
4)使用:
查询当前正在使用的数据库名称:select database();
使用数据库:use 数据库名称;
(操作表)
1)创建:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
....
列名n 数据类型n
);
另:最后一列,不需要加逗号(,)
复制表:create table 表名 like 被复制的表名;
2)查询:
查询某个数据库中所有的表名称:show tables;
查询表结构:desc 表名;
3)修改:
修改表名:alter table 表名 rename to 新的表名;
添加一列:alter table 表名 add 列名 数据类型;
修改列名称 类型:alter table 表名 change 列名 新列别 新数据类型;
alter table 表名 modify 列名 新数据类型;
删除列:alter table 表名 drop 列名;
4)删除:drop table 表名;
DML(增删改表中数据)
DML重要语法:
1)添加数据:insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
另:列名和值要相互对应,除数字类型,其他类型需要用单引号或双引号
2)删除数据:delete from 表名 [where 条件]
另:若不加条件会删除表中的所有记录,可使用TRUNCATE TABLE 表名;来代替
3)修改数据:update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];
DQL(数据查询语言)
查询表中的记录:select * from 表名;
语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
1)条件查询:
(1)where子句后加条件
(2)运算符:
BETWEEN...AND
IN( 集合)
LIKE:模糊查询
占位符:
_(单个任意字符)
%(多个任意字符)
IS NULL
2)排列查询:order by 排序字段1 排序方式1 , 排序字段2 排序方式2...(ASC升序,DESC 降序)
另:如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
3)聚合函数:将一列数据作为一个整体,进行纵向的计算。
(1)count:计算个数(一般选择非空的列:主键)
(2)max,min:计算最大和最小值
(3)sum:计算和
另:其计算需要排除null值,可选择不包含非空的列进行计算或者使用IFNULL函数
4)分页查询:limit 开始的索引,每页查询的条数;(limit是MySQL特有的)
另:开始的索引 = (当前的页码 - 1) * 每页显示的条数
约束
概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性。
分类:
(1)主键约束:primary key
(2)非空约束:not null
(3)唯一约束:unique
(4)外键约束:foreign key
1)非空约束:not null,某一列的值不能为null
(1)创建表时添加约束
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) NOT NULL -- name为非空
);
(2)创建表完后,添加非空约束:
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
(3)删除name的非空约束:ALTER TABLE stu MODIFY NAME VARCHAR(20);
2)唯一约束:unique,某一列的值不能重复
(1)在创建表时,添加唯一约束:
CREATE TABLE stu(
id INT,
phone_number VARCHAR(20) UNIQUE -- 手机号
);
(2)删除唯一约束:ALTER TABLE stu DROP INDEX phone_number;
(3)在表创建完后,添加唯一约束:
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
- 主键约束:primary key(非空且唯一)
(1)在创建表时,添加主键约束
create table stu(
id int primary key,-- 给id添加主键约束
name varchar(20)
);
(2)删除主键:ALTER TABLE stu DROP PRIMARY KEY;
(3)创建完表后,添加主键:ALTER TABLE stu MODIFY id INT PRIMARY KEY;
另:一张表只能有一个字段为主键,主键见识表中记录的唯一标识
4)外键约束:foreign key,让表于表产生关系,从而保证数据的正确性
(1)添加外键:
create table 表名(
. ...
外键列
constraint 外键名称 foreign key (外键列名称) references 主表名称 (主表列名称)
);
(2)删除外键:ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
(3)创建表之后,添加外键:ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
另:级联操作
(1)添加级联操作:ALTER TABLE 表名 ADD CONSTRAINT 外键名称
FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名 称) ON UPDATE CASCADE ON DELETE CASCADE ;
(2) 分类:
级联更新:ON UPDATE CASCADE
级联删除:ON DELETE CASCADE
多表之间的关系
1)一对一(实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键)[了解即可]
2)一对多 (在多的一方建立外键,指向一的一方的主键)
3)多对多(实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键)
数据库的备份和还原:
备份:在cmd上mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
还原:登录,创建,使用数据库,然后再执行文件,source 文件路径