二、数据库的操作
1.-- 表结构修改
– ALTER TABLE 表名 关键词 数据;
– ALTER TABLE 旧表名 rename as 新表名;
修改表名 例:
ALTER TABLE student rename as students;
SHOW TABLES;
2.–添加字段 ALTER TABLE 表名 ADD 新字段名 类型 属性;
ALTER TABLE students ADD stu_qq VARCHAR(20) COMMENT ‘这是学生的qq号’
3.–删除字段 ALTER TABLE 表名 drop 字段名;
ALTER TABLE students DROP stu_age;
4.-- 修改字段
方式一 MODIFY
– ALTER TABLE 表名 MODIFY 字段名 要修改的类型 要修改的长度
ALTER TABLE students MODIFY stu_name VARCHAR(100);
– 覆盖式,一定的默认值 2.如果有已经存在具体的数据 – 数据是可以做隐式转换的 – 否侧覆盖会失败报错
ALTER TABLE students MODIFY stu_qq int;
– 方式二 CHANGE
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 要修改的类型 要修改的长度
– CHANGE 可以修改数据类型和属性还有字段名
ALTER TABLE students CHANGE stu_qq qq VARCHAR(20) COMMENT’QQ号’;
5.-- 删除表
– DROP TABLE 表名
DROP TABLE students;
重点:
数据库设计的三大范式
第一范式:确保每列保持原子性
第二范式:确保表中的每列都和主键相关
第三范式:确保每列都和主键列直接相关,而不是间接相关
总结:三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。
如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结
构。所以不能一味的去追求范式建立数据库。
1.表约束
一、约束的概念
1.什么是约束
约束实际上就是表中数据的限制条件
2.约束作用
表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效
3.约束种类
非空约束(not null) 、唯一性约束(unique) 、主键约束(primary key) PK 、外键约束(foreign key) FK
检查约束(目前MySQL不支持、Oracle支持)
二、各种约束的解释
1.非空约束:
CREATE TABLE tb2(
userName VARCHAR(10) NOT NULL, – 非空约束
userName VARCHAR(10) NOT NULL DEFAULT ‘无名’, – 非空约束
)
2.唯一性约束(包括表级和行级):
CREATE TABLE tb4(
userName VARCHAR(10) UNIQUE – 唯一约束,行级别约束,
useAge INT
)
是可以为null,并且可以有多个null,因为null是类型不是具体的数值
3.联合唯一约束:
CREATE TABLE tb4(
userName VARCHAR(10) UNIQUE, – 唯一约束,
userAge INT,
UNIQUE(userName,userAge) – 联合唯一约束,表级约束
)
字段是有关联的,联合的字段都一样的时候不能存入,其余可以存入
CREATE TABLE tb5(
userName VARCHAR(10) UNIQUE, – 唯一约束,
userAge INT,
CONSTRAINT user_uN_uA UNIQUE(userName,userAge) – 表级约束,也称联合唯一约束
)
**CONSTRAINT user_uN_uA :**约束关键字+约束名
4.主键约束(primary key)PK
1.主键(primary key)是表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录
– 主键约束
– 每张表必须有且只有一个主键
– 主键的值是唯一的
– 主键不能为空
CREATE TABLE tb6(
userId INT PRIMARY KEY, – 主键约束,
userAge INT,
)
CREATE TABLE tb6(
userId INT ,
userAge INT,
CONSTRAINT user_uI_uA** PRIMARY KEY(userId,userAge) --主键联合约束
)
单一主键:给一个字段添加主键约束
复合主键:给多个字段联合添加一个主键约束(只能用表级定义)
在MySQL数据库提供了一个自增的数字,专门用来自动生成主键值,主键值不用用户维护,自动
生成,自增数从1开始,以1递增(auto_increment)
– auto_increment 为自增
CREATE TABLE tb9(
tib int PRIMARY KEY auto_increment,
userName VARCHAR(20)
);
问题:
(1)主键约束与“not null unique”区别
1、作为Primary Key的域/域组不能为null,而Unique Key可以。
2、在一个表中只能有一个Primary Key,而多个Unique Key可以同时存在。unique not null 可以
将表的一列或多列定义为唯一性属性,而primary key设为多列时,仅能保证多列之和是唯一的,
具体到某一列可能会重复。
3、更大的区别在逻辑设计上。Primary Key一般在逻辑设计中用作记录标识,这也是设置
Primary Key的本来用意,而Unique Key只是为了保证域/域组的唯一性。
(2)一张表应该有主键字段,如果没有,表示该表无效
主键值:是当前行数据的唯一标识、是当前行数据的身份证号
即使表中两行记录相关数据相同,但由于主键值不同,所以也认为是两行不同的记录
5.外键约束(foreign key)FK
1.什么是外键?
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。
若有两个表A、B,id是A的主键,而B中也有id字段,则id就是表B的外键
A为基本表或父标,主表,B为信息表,子表,副表
2.只能是表级定义
foreign key(表的字段名) references 父表表名(父表的字段名)
某个字段添加外键约束之后,该字段称为外键字段,外键字段中每个数据都是外键值
3.外键约束
– 外键的值可以重复
– 外键必须要写父表中有的数据
– 父表中的关联字段必须是一个具有唯一性的数据
– 父表中的字段名可以与子表中的字段名不一致,但是数据类型必须一致
– 一个表中可以有多个外键,也可以有多个外键约束,但是只能有一个主键
– 大场:使用外键关系,不去建立外键约束
CREATE TABLE a(
aid int PRIMARY KEY auto_increment,
aname VARCHAR(10)
)
CREATE TABLE b(
bid int PRIMARY KEY auto_increment,
aid INT,
FOREIGN KEY(aid) REFERENCES a(aid) – 创建外键
)
2.约束的控制
添加非空约束
alter table 表名 modify test_student char(10) not null;
添加唯一约束
alter table 表名 add unique(表字段名,字段,字段,字段);
添加主键约束
alter table 表名 add primary key(表的字段名,字段,字段);
添加外键约束
alter table 表名 add constraint N1 foreign key (表字段名) references 父表(父表字段名);约束的删除
删除not null约束
alter table 表名 modify 列名 类型;
删除unique约束
alter table 表名 drop index 唯一约束名;
删除primary key约束
alter table 表名 drop primary key;
删除foreign key约束
alter table 表名 drop foreign key 外键名;