mysql建表字段不能重复_MySQL建表的一些约束条件

本文介绍了SQL中的DDL、DCL、DML和TCL语句,并详细讲解了MySQL建表时的主键、非空、默认值、唯一性、索引和外键约束。还探讨了何时需要使用索引,以及数据库设计的三大范式和不同表间的关系类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.SQL :结构化查询语言(Structer Query Language)

包含DDL,DCL ,DML,TCL四种语句

DDL:create / alter / drop

DCL: grant / revoke

DML: select / update / insert / delete

TCL:rollback / commit /  savepoint

2.SQL 建表的约束条件

create table book(

`id` int not null primary key auto_increment,

`bookname` varchar(20),

`price` float

);

1.主键约束

唯一性,不能为空 ,MySQL中可以通过设置为自动增长的整数

`id` int not null primary key auto_increment

2.非空约束

not null

alter table book modify `price` float not null;

3.默认值

alter table book modify `price` float not null default 0;

4.唯一性约束

unique   唯一性

alter table book modify `bookname` varchar(20) unique;

5.索引约束

主键是一个唯一性索引,创建唯一性索引

alter table book add unique index(`bookname`);

创建普通索引

alter table book add index(`price`);

删除索引

alter table book  drop index `bookname` ;

什么时候需要索引?

6.外键约束

create table `class`(

id int not null primary key auto_increment,

className varchar(20) not null

)

create table student(

id int not null primary key auto_increment,

stuName varchar(20),

sex char(2),

cid int,

constraint fk_1 foreign key(cid) references `class`(id)

)

测试:

insert into student(stuName,sex,cid) values('zhangsan','m',1);

3.三大范式

创建数据库表时候的规范

第一范式[1NF]

原子性:所有的字段都具有原子性,是不可再拆分的,违反第一范式,就需要将该字段继续拆分成多个字段

users表

id  uname upwd m-tel       tel

1   zhangsan 1234  13812345678 0731-12345678

第二范式[2NF]

主键依赖:  先满足1NF,每个字段都必须依赖于主键存在

用户买了一本书,书本和用户没有依赖关系,书本名称book就不能作为users表的字段

违反第二范式,需要创建另外的表

users表

id  uname  upwd  mobile  book

第三范式[3NF]

先满足2NF,所有的字段都必须直接依赖主键,而不能传递依赖

书本价格price依赖bookid,bookid依赖于id,price在传递依赖

违反第三范式,需要创建另外的表,通过外键约束

users表

id  uname  upwd  mobile  bookid  price

案例:

用户表:

id

用户名

密码

商品表:

id

商品名称

单价

库存数量

订单项表   :

id

商品ID

购买数量

订单表:    相当于一张小票,包含多个订单项

订单号

用户ID

时间

订单项ID

4.表之间的关系

一对一

一对多

多对多

一对一的关系:

用户基本信息表:

id

username

userpwd

详细信息ID

用户详细信息表:

id

真实姓名

身份证号

出生年月

照片

个性签名

一对多的关系:

班级表:

id

banjiName

banjiDesc

学生表:

id

stuName

sex

age

tel

banjiID  外键

多对多的关系:

学生表:

id

stuName

sex

age

tel

课程表:

id

kechengName

score

出现多对多的关系,需要建立一个中间表,将多对多拆分成多对一和一对多

选课表

课程ID

学生ID

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值