1.约束是作用于表中列上的规则,用于限制加入表的数据。
非空约束保证数据不为空。
1.添加约束。
– 创建表时添加非空约束。
CREATE TABLE 表名(
列名 数据类型 NOT BULL,
……
);
–建完表后添加非空约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;
2.删除元素
ALTER TABLE 表名 MODIFY 字段名 数据类型;
1.唯一约束用于保证列中所有数据不同。
添加约束。
– 创建表时添加唯一约束
CREATE TABLE 表名(
列名 数据类型 UNIQUE [AUTO_INCREMENT],
-- AUTO_INCREMENT:当不指定值时自动增长
……
);
CREATE TABLE 表名(
列名 数据类型,
……
[constraint ] [约束名称] UNIQUE(列名)
);
2.建完表后添加唯一约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;
主键是一行数据的唯一标识,要求非空且唯一。
一张表只能有一个主键。
– 添加表时添加主键约束
CREATE TABLE 表名(
列名 数据类型 PRIMARY KEY [AUTO_INCREMENT],
……
);
CREATE TABLE 表名(
列名 数据类型,
[CONSTRAINT ] [约束条件] PRIMARY KEY(列名)
);
– 建完表后添加主键约束
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
&nesp; 1.数据库设计就是根据业务的具体需求,结合我们所选用的DBMS,位这个业务系统构造出最优的数据存储模型。
&nesp; 2.建立数据库中的表结构以及表与表之间的关联的过程。
&nesp; 3.有那些表?表中有那些字段?表和表之间有什么关系。
&nesp; 1,需求分析(数据是什么?数据具有那些属性?数据与属性的特点是什么)
&nesp; 2.逻辑分析(通过ER图对数据进行逻辑建模,不需要考虑我们所选用的数据库管理系统)
&nesp; 3.物理设计(根据数据库自身的特点把逻辑设计转化为物理设计)
&nesp; 4.维护设计(1.对新的需求进行建表;2.表优化)
1.用户和用户详情。
2.一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询功能。
1.部门和员工
2.一个部门对应多个员工,一个员工对应一个部门。
1.商品和订单。
2.一个商品对应多个订单,一个订单包含多个商品。
1.外键用来让两个表的数据之间建立链接,保证数据一致性和完整性。
例如:上述多对多中的订单商品表来维护订单表和商品表之间的关系。
1.中间表插入的数据必须在多对多的表中存在。
2.如果主表的记录在中间表维护了关系,就不能随意删除,如果可以删除,中间表就找不到对应的数据了,这样就没有意义了。
– 创建表时添加外键约束
create table 表名(
列名 数据类型,
……
[constraint ] [外键名称] foreign key(外键列名)references 主表 (主表列名)
);
– 关键字解释
constraint:添加约束,可以不写
foreign key(当前表中的列名):将某个字段作为外键
references 被引用表名(被引用表的列名):外键引用主表的主键
– 建完表后添加外键约束
alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称);
alter table 表名 drop foreign key 外键名称;
在多的一方建立外键关联一的一方主键。
建立第三张中间表。
中间表至少包含2个外键,分别关联双方主键。
在任意一方建立外键,关联对方主键,并设置外键唯一。
同时查询多张表,获取需要的数据;
比如:我们向查询水果对应的价格,需要将水果表和价格表同时进行查询;
内连接查询有称为交集查询,也就是查询只显示满足条件的数据;
显示内连接:使用inner join……on语句,可以省略Inner关键字 ;
select * from 表名1 inner join 表名2 on 条件;
select * from 表名1 join 表名2 on 条件;
看不到join关键字,条件使用where指定;
select 列名 , 列名, ……from 表名1, 表格2 where 表名1.列名 = 表名2.列名;
1.确定查询几张表。
2.确定表连接条件。
3.根据需要在操作。
左表的记录全部表示出来。
右表只会显示符合条件的记录。
select * from 表1 left outer join 表2 on 条件;
右表的记录全部展示出来。
左表只会显示符合搜索条件的记录。
select * from 表1 right outer join 表2 on 条件;
子查询就是一个sql查询的结果作为另一个sql查询语句的一部分
作为父查询的条件
作为父查询的条件,通常使用IN
作为父查询的一张表(虚拟表),起别名