数据库管理系统
Database Management System
是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS
接收客户端指令(语法检查,编译指令,执行)
一言以蔽之:“第一范式的数据表必须是二维数据表”,第一范式是指数据库的每一列都是不可分割的基本数据项,强调列的原子性。
第二范式建立在第一范式的基础上,即满足第二范式一定满足第一范式,第二范式要求数据表每一个实例或者行必须被唯一标识。除满足第一范式外还有两个条件,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。
举例来说:当数据表中是联合主键,但是有的列只依赖联合主键中的一个或一部分属性组成的联合主键,此时需要拆表才能复合第二范式。
没有传递依赖
举例来说:
– student和class之间存在多对一的关系 (存在外键)
外键的作用很重要,最好在数据库中使用。举一个例子比较明白。
DROP table if
create TABLE studeng(
stuid int,
stuname varchar,
-- 外键 class表中的classid必须是主键
classid int
primary key(stuid),
constraint FK_classid foreigh key(classid) reference class(classid)
)
create TABLE class(
classid INT,
classname varchar(20),
Primary key(classid)
)
满足第二范式 ,不满足第三范式,
create TABLE studeng(
stuid int,
stuname varchar,
classid int,
classname int
)
第三范式,不允许传递依赖,即创建外键
create TABLE studeng(
stuid int,
stuname varchar,
classid int
primary key(stuid),
constraint FK_classid foreigh key(classid) reference class(classid)
)
create TABLE class(
classid INT,
classname varchar(20),
Primary key(classid)
)
-- constraint 约束 FK——CLASSID主键关系 约束名称
-- reference 引用 class(classid) 外键引用的表 以及表里的主键
reate TABLE studeng(
stuid int,
stuname varchar,
cid int
primary key(stuid)
)
ALTER table studeng add constraint FK_classname foreign key(cid) reference class(classid)
-- 唯一性约束的创建
-- 1.修改表添加唯一性约束
alter table student ADD constraint UQ_STUNAME UNIQUE(stuname)
-- 2.
create TABLE studeng(
stuid int,
stuname varchar(20) UNIQUE ,
cid int
primary key(stuid)
)
– 自增长的列 列必须是数值型 是主键
– 主键不允许重复 主键有时需要递增1
create TABLE studeng(
stuid int auto_increment,
stuname varchar(20) UNIQUE ,
cid int
primary key(stuid)
)
– insert into student values(default,xx,xx)
– insert into student values(default,xx,xx)
– 修改自增长种子值
create TABLE studeng(
stuid int auto_increment,
stuname varchar(20) UNIQUE ,
cid int
primary key(stuid)
)AUTO_INCREMENT=100
– 删除列
alter table student drop column stuaddress
– 添加列 并指定添加列的结构
alter table student add stuaddress text after stuname
– 修改名
alter table xx rename xx
数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。
InnoDB 是事务型数据库的首选引擎,
update account set money=money-1000 where accountName='张三'
update account set money=money+1000 where accountName='李四'
视图是一张虚拟表,不写入磁盘
仅仅提供查询
CREATE VIEW 视图名(列1,列2…) AS SELECT (列1,列2…) FROM …;
create VIEW stu_class_teacher_view
AS
select S.'stuid',S.'stuname',S.'stusex'
FROM atudent S INNER JOIN class C
想要理解索引原理必须清楚一种数据结构「平衡树」(非二叉),也就是b tree或者 b+ tree,重要的事情说三遍:“平衡树,平衡树,平衡树”。当然, 有的数据库也使用哈希桶作用索引的数据结构 , 然而, 主流的RDBMS都是把平衡树当做数据表默认的索引数据结构的。
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
非当前表添加唯一性约束的方式
alter table student ass constraint uq_name unique(stuname)
show index from student
create unique index uq_name on student(stuname)
ALTER TABLE student ADD INDEX suoyin (stuname(10),age);
索引页 把存储索引的空间称为页
数据页(数据(内容占用的空间))
聚集索引在一张数据表中只能存在一个
不要求索引排序和数据排序保持一致
定位快,hash算法 ,O(1),所以索引不能应用到排序上,不能做范围查询。
执行效率比较高
函数优点:
选择函数,自定义函数
create function myfun() return int
begin
return 10;
end
sql默认的结束符号是; 分号
delimiter 修改当前sql的结束符号
delimiter $$
create function myfun() return int
begin
return 10;
end$$
drop function if exists fun
create function myfun(i int) returns varchar(20)
begin
return concat('张三',i);
END $$
select myfun()