一、约束的概念:
①约束的作用与表中列上的规则,用于限制加入表的数据
②约束的存在保证了数据库中数据的正确性、有效性和完整性
二、约束分类:
约束名称 | 描述 | 关键字 |
非空约束 | 保证列中所有数据不能有null数据 | NOT NULL |
唯一约束 | 保证列中所有数据各不相同 | UNIQUE |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | PRIMARY KEY |
检查约束 | 保证列中的值满足某一条件 | CHECK |
默认约束 | 保存数据时,未指定则采用默认值 | DEFAULT |
外键约束 | 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性 | FOREIGN KEY |
注意:MySQL不支持检查约束
非空约束
1.创建表时添加非空约束:
CREATE TABLE 表名(
列名 数据类型 NOT NULL [AUTO_INCREMENT],
...
);AUTO_INCREMENT:当不指定值时自动增长(可写可不写)
CREATE TABLE emp(
-> id INT NOT NULL AUTO_INCREMENT,
-> ename VARCHAR(50),
-> joindate DATE,
-> salary DOUBLE(7,2),
-> bonus DOUBLE(7,2)
-> );
2.建完表后添加非空约束:
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;
ALTER TABLE emp MODIFY id INT NOT NULL;
3.删除非空约束:
ALTER TABLE 表名 MODIFY 字段名 数据类型;
ALTER TABLE emp MODIFY id INT;
唯一约束
1.创建表时添加唯一约束:
CREATE TABLE 表名(
列名 数据类型 UNIQUE [AUTO_INCREMENT],
...
);AUTO_INCREMENT:当不指定值时自动增长(可写可不写)
CREATE TABLE emp(
-> id INT,
-> ename VARCHAR(50) UNIQUE,
-> joindate DATE,
-> salary DOUBLE(7,2),
-> bonus DOUBLE(7,2)
-> );
2.建完表后添加唯一约束:
ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;
ALTER TABLE emp MODIFY ename VARCHAR(50) UNIQUE;
3.删除唯一约束:
ALTER TABLE 表名 DROP INDEX 字段名;
ALTER TABLE emp DROP INDEX ename;
主键约束
1.创建表时添加主键约束:
CREATE TABLE 表名(
列名 数据类型 PRIMARY KEY [AUTO_INCREMENT],
...
);AUTO_INCREMENT:当不指定值时自动增长(可写可不写)
CREATE TABLE emp(
-> id INT PRIMARY KEY,
-> ename VARCHAR(50),
-> joindate DATE,
-> salary DOUBLE(7,2),
-> bonus DOUBLE(7,2)
-> );
2.建完表后添加主键约束:
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
ALTER TABLE emp ADD PRIMARY KEY(id);
3.删除主键约束:
ALTER TABLE 表名 DROP PRIMARY KEY;
ALTER TABLE emp DROP PRIMARY KEY;
默认约束
1.创建表是添加默认约束:
CREATE TABLE 表名(
列名 数据类型 DEFAULY 默认值,
...
);
CREATE TABLE emp(
-> id INT,
-> ename VARCHAR(50) ,
-> joindate DATE,
-> salary DOUBLE(7,2),
-> bonus DOUBLE(7,2) DEFAULY 0
-> );
2.建完表后添加默认约束:
ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;
ALTER TABLE emp ALTER bonus SET DEFAULT 0;
3.删除默认约束:
ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;
ALTER TABLE emp ALTER bonus DROP DEFAULT;
外键约束
1.创建表时添加外键约束:
CREATE TABLE 表名(
列名 数据类型,
...
CONSTRAINT 外键名称 FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
);
CREATE TABLE dept(
-> id INT,
-> dept_name VARCHAR(50),
-> dept_addr VARCHAR(100)
-> );
ALTER TABLE dept ADD PRIMARY KEY(ID);
CREATE TABLE emp(
-> id INT PRIMARY KEY,
-> name VARCHAR(50),
-> age INT,
-> dept_id INT,
-> CONSTRAINT kf_emp_dept FOREIGN KEY(dept_id) REFERENCES dept(id)
-> );
2.建完表后添加外键约束:
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键列名) REFERNCES 主表名称(主表列名);
ALTER TABLE emp ADD CONSTRAINT kf_emp_dept FOREIGN KEY(dept_id) REFERENCES dept(id);
3.删除外键约束:
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
ALTER TABLE emp DROP FOREIGN KEY kf_emp_dept;
注意:
1.当非空和自动增长放在一起会变成主键的,那时候想去除自动增长和非空只要删除主机就可以了。
2.如果要连接两个表,要先建主表在减外表,不然会连接失败
数据库设计
一、软件的研发步骤:
二、数据库设计概念:
1.数据库设计就是根据业务系统的具体需求,结合我们所选用户的DBMS,为这个业务系统构造出最优的数据存储模型
2.建立数据库中的表结构以及表与表之间的关联关系的过程。
3.有哪些表?表里有哪些字段?表和表之间有什么关系?
三、数据库设计的步骤:
1.需要分析(数据是什么?数据具有哪些属性?数据与属性的特点是什么)
2.逻辑分析(通过ER图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)
3.物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)
4.维护设计(1.对新的需求进行建表;2.表优化)
四、表关系 :
1.一对一:
①例如:用户和用户详情
②一对一关系多用于表拆分,将一个实体中经常使用的字段方一张表,不经常使用的字段放另一张表,用于提升查询性能
2.一对多(多对一):
①例如:部门和员工
①一个部门对应多个员工,一个员工对应一个部门
3.多对多:
①例如:商品和订单
②一个商品对应多个订单,一个订单包含多个商品