Python基础之MySQL数据库
为了防止数据库中存在不符合语义规定的数据和防止错误信息的输入、输出造成无效的操作而提出的
为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制,从以下四个方面考虑
约束是指,对字段名下数据的强制约束
约束的方式:
create table 表名(字段名 类型(数字) 约束条件);
方式一:
show create table 表名;
方式二:
describe 表名;/desc 表名;
关键词:unsigned
作用:在SQL中,整型和浮点类型都自带正负号,而很多数据并用不到负数,例如人的年龄,手机号码,这时就可以通过约束条件解除正负号
mysql> create table t2(id tinyint unsigned);
Query OK, 0 rows affected (0.01 sec)
关键词:zerofill
作用:在创建表时,整型和浮点型后一般不用输入数字,系统会默认生成,在添加数据后,系统指挥默认显示该数值的大小及位数,通过零填充加数值,可固定数据值现实位数,不足部分用零填充
mysql> create table t4(id tinyint(2) zerofill);
Query OK, 0 rows affected (0.01 sec)
关键词:not null
作用:所有字段类型,在不做非空约束的情况下,插入的数据值都可以为空(null),在创建表阶段可以约束该字段下数据为非空,约束后在往表内添加数据时,该字段下不能为空,空字符除外
mysql> create table t5(id int(3) zerofill, name varchar(16) not null);
Query OK, 0 rows affected (0.02 sec)
关键词:default
作用:在创建表阶段,在类型后约束默认值,可在默认值后方填入默认值,添加该字段下的数据时,不进行特殊定义的话会采用默认值
mysql> create table t(id int primary key auto_increment,
-> name varchar(32) not null,
-> gender varchar(8) default 'mela');
Query OK, 0 rows affected (0.02 sec)
关键词:unique
作用:唯一值是指,在创建表阶段,可通过约束唯一值的条件,使在往该表内约束的字段下添加的数据不能重复出现,例如往序号字段下添加‘序号1’后,该序号将不能在重复出现在其他列
mysql> create table t6(id int unique, name varchar(16) not null);
Query OK, 0 rows affected (0.04 sec)
关键词:unique(字段名1,字段名2,...)
作用:联合唯一不在单个字段名下定义,而是单独定义,在关键词后方括号内添加需要进行联合唯一的字段名,那么被添加的多个字段名的数据值将不能共同出现,单个字段名下的数据值可以重复
mysql> create table t7(id int, name varchar(16), unique(id, name));
Query OK, 0 rows affected (0.02 sec)
关键词:primary key
作用:单从约束层面上而言的话,主键就相当于‘非空且唯一’,InnoDB存储引擎规定了所有的表都必须拥有且只能有一个主键(在创建表的时候,可以不用手动约束,系统会将其他非空且唯一的字段升级为主键,如果都没有约束的话,后台会自动生成一个隐藏的主键),主键可以加快数据的搜索速度(如果没有主键的话,查找数据就需要一行一行的进行),在我们创建表的时候应该主动约束一个字段为主键,用来标识数据的唯一性,通常使用‘id(编号)’字段
mysql> create table t8(id int primary key, name varchar(16));
Query OK, 0 rows affected (0.02 sec)
关键词:auto_increment
作用:通常在存储多个数据的时候,我们都会给数据进行编号,方便查找,自增的意思就是帮助我们生成数据的编号,不需要在手动填写,这样的好处就是省时、省力,还不用专门的去记忆当前的序号是多少。
特性:自增不会因数据删除而退回,只会往前,如果自己设置了更大的数,那么自增就会基于这个数往更大的数去自增,,自增的字段只能是主键
格式化表格:
mysql> insert into t9(name, age) values('jason', 18),('kang',19);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
外键是某个表中某一列,它包含在另一个表的主键中
外键也是索引的一种,是通过一张表指向另一张表中的主键,来对两张表进行关联
一张表可以有一个外键,也可以存在多个外键,与多张表进行关联
主要用于表与表之间的数据关联,减少数据冗余,保证数据的一致性,完整性,主要体现在以下两个方面:
主表:
create table 主表名(
id 类型 主键 ,
字段名 类型 约束条件)
从表:
create table 从表名(
id 类型 主键 ,
字段名 类型(数字) 约束条件,
绑定外键的字段名 int,
foreign key(主表名) references 主表名(主表的主键字段名)
)
级联创建的方式:
需要在创建表阶段,在从表外键关键词后加入:
create table 从表名(
id 类型 主键 ,
字段名 类型(数字) 约束条件,
绑定外键的字段名 int,
foreign key(主表名) references 主表名(主表的主键字段名)
on update cascade
on delete cascade)
以员工表为例,通常,一个员工只可以对应一个部门,而一个部门可以对应多个员工,这就是一对多的关系
对于一对多的关系,外键字段应该建立在‘多’的一方
create table dep(id int primary key auto_increment,
dep_name varchar(32)
);
create table emp(id int primary key auto_increment,
emp_name varchar(32) not null,
dep_id int, foreign key(dep_id) references dep(id)
on update cascade
on delete cascade
);
以书籍表与作者表为例
先站在书籍表的角度
问:一本书能否对应多个作者
答:可以
再站在作者表的角度
问:一个作者能否对应多本书
答:可以
结论:两个都可以 关系就是'多对多'
针对'多对多'不能在表中直接创建 需要新建第三张关系表
create table book(
id int primary key auto_increment,
title varchar(32),
price float(5,2)
);
create table author(
id int primary key auto_increment,
name varchar(32),
phone bigint
);
create table book2author(
id int primary key auto_increment,
author_id int,
foreign key(author_id) references author(id)
on update cascade
on delete cascade,
book_id int,
foreign key(book_id) references book(id)
on update cascade
on delete cascade
);
以用户表与用户详情表为例
create table user(
id int primary key auto_increment,
name varchar(32),
detail_id int unique,
foreign key(detail_id) references userdetail(id)
on update cascade
on delete cascade
);
create table userdetail(
id int primary key auto_increment,
phone bigint
);
参与评论
手机查看
返回顶部