一、数据库四大特性五大约束
数据库四大特性是指:原子性、一致性、隔离性和持久性,下文将根据这四大特性详细探讨五大约束。
1. 实体完整性约束
实体完整性约束用来保证每张表都有一个主键,而且不允许为空。它还可以用来防止出现重复的记录。
<create table students(
ID int PRIMARY KEY NOT NULL,
Name varchar(255) NOT NULL,
Age int NOT NULL,
Address varchar(255),
CLass varchar(255) NOT NULL,
Sex varchar(255) NOT NULL,
Phone varchar(255)
);>
2. 参照完整性约束
参照完整性约束用来保证在一个表中的外键使用的参照表中的主键是唯一的。它可以防止以后删除一些记录带来的问题。
<create table class(
Class varchar(255) PRIMARY KEY NOT NULL,
HeadTeacher varchar(255) NOT NULL
);
create table students(
ID int PRIMARY KEY NOT NULL,
Name varchar(255) NOT NULL,
Age int NOT NULL,
Address varchar(255),
CLass varchar(255) NOT NULL,
Sex varchar(255) NOT NULL,
Phone varchar(255),
foreign key(CLass) references class(Class)
);>
3. 域完整性约束
域完整性约束用来限制每一个属性的取值范围,比如年龄不能小于0。
<create table students(
ID int PRIMARY KEY NOT NULL,
Name varchar(255) NOT NULL,
Age int NOT NULL CHECK (Age > 0),
Address varchar(255),
CLass varchar(255) NOT NULL,
Sex varchar(255) NOT NULL,
Phone varchar(255)
);>
4. 用户定义完整性约束
用户定义完整性约束用来进行内容上的限制,比如手机号必须是11位纯数字。
<create table users(
Name varchar(255) PRIMARY KEY NOT NULL,
Password varchar(255) NOT NULL,
Email varchar(255) NOT NULL,
Phone varchar(11) NOT NULL CHECK (Phone LIKE '[0-9]%')
);>
5. 触发器约束
触发器约束在一张表上设置一个触发器,在该表中添加、修改或删除记录时,触发器会按照一定规则执行相应操作。
<CREATE TRIGGER update_salary
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF NEW.salary > OLD.salary THEN
INSERT INTO record VALUES(OLD.ID, OLD.salary, NEW.salary)
END IF;
END;>
二、数据库四大特性三大范式
三大范式是指:第一范式(1NF)、第二范式(2NF)和第三范式(3NF),它们属于逐步消除数据冗余的策略。下面我们分别简单介绍一下这三个范式。
1. 第一范式(1NF)
第一范式指每个属性都是原子性的,不可再分,这是消除重复数据的第一步。
<create table students(
ID int PRIMARY KEY NOT NULL,
Name varchar(255) NOT NULL,
Age int NOT NULL,
Address varchar(255),
CLass varchar(255) NOT NULL,
Sex varchar(255) NOT NULL,
Phone varchar(255)
);>
2. 第二范式(2NF)
第二范式指消除非主属性对主键的部分依赖,即表中任何非主属性都不能只依赖于主键的部分,而应该依赖于整个主键。
<create table orders(
OrderID int PRIMARY KEY NOT NULL,
CustomerID varchar(255) NOT NULL,
OrderDate date NOT NULL,
ProductID int NOT NULL,
Quantity int NOT NULL,
Price decimal(18,2) NOT NULL,
foreign key(CustomerID) references customers(CustomerID)
foreign key(ProductID) references products(ProductID)
);>
3. 第三范式(3NF)
第三范式指消除非主属性对主键的传递依赖,即当一个非主属性依赖于另一个非主属性时,应该将这些非主属性分别放到独立的关系中。
<create table orders(
OrderID int PRIMARY KEY NOT NULL,
CustomerID varchar(255) NOT NULL,
OrderDate date NOT NULL,
foreign key(CustomerID) references customers(CustomerID)
);
create table order_details(
OrderID int NOT NULL,
ProductID int NOT NULL,
Quantity int NOT NULL,
Price decimal(18,2) NOT NULL,
foreign key(OrderID) references orders(OrderID)
foreign key(ProductID) references products(ProductID)
);>
三、数据库四大特性及数据库隔离级别
数据库隔离级别用来解决多个事务之间产生的一致性问题,下面我们选择四种隔离级别来介绍。
1. 读未提交(read uncommitted)
事务中的改变会马上被其他事务所见,容易造成脏读、不可重复读和幻读等问题。优点是效率高,缺点是不安全不稳定。
2. 读已提交(read committed)
事务中的改变只有在提交以后其他事务才能看到,可以避免脏读,但仍然存在不可重复读和幻读的问题。
3. 可重复读(repeatable read)
在这种隔离级别下,读取过的数据会被缓存,直到事务结束,保证了事务中所读取的数据的一致性,同时可以避免脏读和不可重复读的问题,但仍然有可能发生幻读。
4. 序列化(serializable)
将所有事务串行执行,可以避免所有的并发问题,但同时也牺牲了系统的性能。
<SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
START TRANSACTION;
SELECT * FROM students WHERE Age < 20;
COMMIT;>
四、数据库四大类型
数据库类型指的是在关系模型中使用到的数据类型。下面我们介绍四种主要的数据库类型。
1. 数值类型
数值类型分为整型和浮点型,常见的整型有int、bigint、tinyint等,常见的浮点型有float、double等。
<create table students(
ID int PRIMARY KEY NOT NULL,
Name varchar(255) NOT NULL,
Age int NOT NULL,
Score float NOT NULL
);>
2. 字符串类型
字符串类型常见的有char、varchar、text等,char是固定长度的字符串,varchar是变长的字符串,text用来存放更长的字符串。
<create table students(
ID int PRIMARY KEY NOT NULL,
Name varchar(255) NOT NULL,
Age int NOT NULL,
Address text NOT NULL
);>
3. 时间类型
时间类型主要包含date、time、datetime、timestamp等,用来存储时间或日期相关的数据。
<create table orders(
OrderID int PRIMARY KEY NOT NULL,
OrderDate date NOT NULL,
OrderTime time NOT NULL,
DateTime datetime NOT NULL,
TimeStamp timestamp NOT NULL
);>
4. 二进制类型
二进制类型主要用来存储二进制数据,如图片、音频等。
<create table images(
ImageID int PRIMARY KEY NOT NULL,
ImageData longblob NOT NULL
);>
五、数据库四大语言
数据库语言包含DQL(数据查询语言)、DML(数据操作语言)、DDL(数据定义语言)和DCL(数据控制语言),下面我们将按照不同语言进行介绍。
1. 数据查询语言(DQL)
数据查询语言主要用来查询数据,包括SELECT、FROM、WHERE等关键字。
<SELECT * FROM students WHERE Age < 20;>
2. 数据操作语言(DML)
数据操作语言主要用来对数据进行增、删、改,包括INSERT、UPDATE、DELETE等关键字。
<INSERT INTO students(ID, Name, Age) VALUES(1, 'Tom', 20);>
3. 数据定义语言(DDL)
数据定义语言主要用来定义或修改数据库中的对象,包括CREATE、ALTER、DROP等关键字。
<CREATE TABLE students(
ID int PRIMARY KEY NOT NULL,
Name varchar(255) NOT NULL,
Age int NOT NULL
);>
4. 数据控制语言(DCL)
数据控制语言主要用来对数据库进行控制,包括GRANT、REVOKE等关键字。
<GRANT SELECT, UPDATE ON students TO user1;
REVOKE SELECT, UPDATE ON students FROM user2;>
六、数据库四大范式与数据库四大原则
数据库四大范式和四大原则是数据库设计中的重要概念,下面我们将按照不同范式和原则进行介绍。
1. 第一范式(1NF)
第一范式指每个属性都是原子性的,不可再分,这是消除重复数据的第一步。在数据库设计中,应该尽可能使每一列数据都是原子型的数据,也就是不可再分的数据。
2. 第二范式(2NF)
第二范式指消除非主属性对主键的部分依赖,即表中任何非主属性都不能只依赖于主键的部分,而应该依赖于整个主键。在数据库设计中,应该将表中的某一行数据作为一个整体来理解,同时要保证每个表都有一个主键。
3. 第三范式(3NF)
第三范式指消除非主属性对主键的传递依赖,即当一个非主属性依赖于另一个非主属性时,应该将这些非主属性分别放到独立的关系中。在数据库设计中,应该避免表之间的冗余,保证每个表只存储相关的数据,不要存储无关的数据。
4. 数据库四大原则
数据库四大原则是指:原子性、一致性、隔离性和持久性,下面我们分别来介绍一下。
5. 原子性
原子性指一个事务