2018-08-13 外键 自增步长 创建字段 范式

字数 1005阅读 20

关于自增的扩展可以设置auto_increment 一个起始值
alter table 表名 auto_increment="要设置的值"
改变自增的步长
show session variables like "auto_inc%"; 查看步长(会话级别的)session:会议
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 3 |
| auto_increment_offset | 1 |
+--------------------------+-------+

修改会话级别的步长
set session auto_increment_increment=2;会话级别的步长
set session auto_increment_offset=10;会话级别的起始值

设置步长 全局级别的步长
show global variables like 'auto_inc%'; (全局的)global:全球,全球性;总的;
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
set global auto_increment_increment=2;全局级别的步长
set global auto_increment_offset=10;全局级别的起始值

创建计算运算
创建的计算字段原本并不存在我们的表里面。我们通过mysql 的函数
或者算术运算得倒一个结果,我们把这个结果起一个别名,这个字段就是我们创建的计算字段。

加密函数
password(" ")
md5(" ")

创建计算字段
if (x1,v1,v2): x1:表示条件,如果满足返回v1,否则返回v2;
ifnull(v1,v2):if v1 是null 返回v1,否则返回v2
case when 条件 then 结果1 else 返回结果2 end;当遇到某种条件,当when 后面的条件满足时,返回then后面的结果1,否则返回结果2。

三范式 ,E-R
第一范式
第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。
(就是在创建表时,没列都根据实际需要分到不能再分)
第二范式,1。一个表必须要有一个主键(这个主键可以是但个列,也可以是多个列)
2.非主键的列,必须完全依赖于主键,而不是几部分依赖主键。
第三范式
在第二范式的基础上,不能存在传递,非主键列必须直接依赖于主键,而不能存在传递依赖的关系。

E -R 模型
E:entry 表示实体,其实根据事物的特征,添加描述信息,我们将这些描述信息添加在一个表里(table),那么这个表相当于一个实体。

R:relationship 关系 。 在这里其实就是指表于表之间的关系
一对一:个人信息与身份证
个人信息表
create table user(
name varchar(10) not null,
primary key(id)
constraint fk_idcard(起个名字) fro
CONSTRAINT FK_ID foreign key(外键字段名) REFERENCES 外表表名(主键名) )
);
身份表:
create table identfity(
id int auto_increment,
id_num varchar(50) not null,
primary key(id));

一对多:一个班级对多个学生
学生表
create table students(
stu_id int auto_increment,
stu_name varchar(20) not null,
primary key(stu_id)
);
班级表
create table grade(
cls_id int auto_increment,
cls_name varchar(20) not null,
cls_desc varchar(225) not null,
cls_num int default 0,
primary key(cls_id)
);

多对多:选课
学生表
create table students(
stu_id int auto_increment,
stu_name varchar(20) not null,
primary key(stu_id)
);

课程
create table courses(
cour_id int auto_increment,
cour_name varchar(20) not null,
primary key(cour_id)
)
建立外键的表必须是InnoDB型,不能是临时表,因为在MYSQL中,只有Innodb类型才支持外键
定义外键名时,不能加引号,如constraint 'FK_ID' 或则 constraint “FK_ID”,这样都是错误的
如何设置外键?
1.首先要找表与表之间的关系。
2.班级表(id,name,主键为id)
3.学生表(id,name,主键id,clsid(外键)->班级表中的班级的主键)
创建学生表必须要有班级表
创建班级表
CREATE TABLE classes(
id int auto_increment,
name varchar(20) not null,
primary key(id)
)engine = innodb default charset=utf8

CREATE TABLE students(
id int auto_increment,
name varchar(20) not null,
clsid int,
primary key(id),
constraint FK_CLSID foreign key(clsid) references classes(id)
);

删除外键
alter table 表名 drop foreign key 外键名;
添加主键 alter table 表名 add constraint 外键名 foreign key(外键字段名)references 被应用的表名(被引用的主键)

推荐阅读更多精彩内容