MySQL(三) DDL(数据定义语言)

主要内容:数据库/表创建、删除、数据表修改以及六大约束(主键约束、自增约束、唯一约束、非空约束、默认约束、外键约束)

(一) 数据库创建、删除

在登录数据库后,首先的操作就是创建数据库。例如:创建一个名为test1的数据库并查看。

create database test1;
show databases;

在这里插入图片描述
删除test1数据库并查看:

drop databases test1;
show databases

在这里插入图片描述

(二) 数据表创建、修改、删除

创建完数据库后,接下来还需要创建数据表,方可存储数据。
在此之前,先来了解一下MySQL中的常用数据类型:数值型(整数型int,浮点型float,double,小数型decimal),字符型(变长字符串varchar,定长字符串char),日期时间型(日期值date,时间值time,混合日期和时间值datetime)

1. 创建一个学生信息表inf,包含学生学号(varchar型)、姓名(varchar型)、年龄(int型)、出生年月(date型),并查看表的结构

use test1; ##创表之前需要指定某个数据库
create table inf(id varchar(20), name varchar(20),age int,birth date);
show tables;#查看表
desc test1;#查看表inf的结构

在这里插入图片描述
2. 在年龄列后增加成绩列(score),类型为int

alter table inf add column score int after age;
desc inf;

在这里插入图片描述
3. 删除birth列

alter table inf drop column birth;#若表内只剩一列,此语句无效
desc inf;

在这里插入图片描述
4. 修改id列的列名为sid

alter table inf change column id sid varchar(20);
desc inf;

在这里插入图片描述

5. 修改sid列的类型为int

alter table inf modify column sid int
desc inf;

在这里插入图片描述

6. 修改表名为student_inf

alter table inf rename to student_inf
show tables;

在这里插入图片描述
7. 删除表student_inf

drop tables student_inf;
show tables;

在这里插入图片描述

(三) 六大约束

数据表准备:
学生信息表student,包含学号、姓名、年龄;学生成绩表grade,包含学号、成绩

(1) 主键约束
作用:唯一确定一张表中的一条记录,即该条记录不能重复且非空
关键词:primary key
添加方式:创建表时添加 和 创建表后添加

创建student表时,将学号列设置为主键

create table student(id varchar(10) primary key,name varchar(10),age int);
desc student;

在这里插入图片描述
若创建表的时候未添加主键,也可以之后再添加.

create table student(id varchar(10),name varchar(10),age int);
alter table student add primary key(id);
desc student;

在这里插入图片描述


作用呈现:
不能重复:向表student中插入数据(“101”,“张伟”,28),(“101”,“张大炮”,28)
在这里插入图片描述
非空:向表student中插入数据(null,斯奈克,26)
在这里插入图片描述
或者从表的结构中null一列也可知,id列为"NO"即不可为空


(2) 自增约束
作用:需要和主键约束结合使用.被设置为自增约束的字段,在插入数据时,即使为空值,也会自动补齐(默认从1开始且只能为数值型字段)
关键词:auto_increment
添加方式:创建表时添加 和 创建表后添加

创建student表时,给学号列添加自增约束:

create table student(id int primary key auto_increment,name varchar(10),age int)#被添加自增约束的字段只能是数值型
desc student;

在这里插入图片描述
创表后添加:

create table student(id primary key,name varchar(10),age int);
alter table student modify id int auto_increment;
desc student;

在这里插入图片描述


作用呈现:
向student表中插入数据(“张伟”,28)
在这里插入图片描述
由图可见,插入数据时,并没有给id列赋值。但是,由于id是自增长型,故自动补齐为1。


(3) 唯一约束
作用:保证约束修饰字段不重复
关键词:unique
添加方式:创表时添加和创表后添加

创建student表时,给姓名列添加唯一约束

create table student(id varchar(10),name varchar(10) unique,age int);
desc student;

在这里插入图片描述
创表后添加

create table student(id varchar(10),name varchar(10),age int);
alter table student add unique(name);
desc student;

在这里插入图片描述


作用呈现:
不能重复:向student表中插入数据(“001”,“张伟”,28),(“002”,“张伟”,26)
在这里插入图片描述
当姓名字段相同时,插入数据则会报错。


(4) 非空约束
作用:保证约束修饰字段非空
关键词:not null
添加方式:创表时添加和创表后添加

创建student表时,给年龄列添加非空约束

create table student(id varchar(10,name varchar(10),age int not null);
desc student;

在这里插入图片描述
创表后添加

create table student(id varchar(10),name varchar(10),age int);
alter table student mofidy age int not null;
desc student;

在这里插入图片描述
设置年龄列为非空后,从图中来看,NULL列age为NO,即设置成功。


作用呈现:
非空
向student表插入数据(“001”,“张伟”,null)
在这里插入图片描述
当年龄列数据为空时,插入数据则会失败。


(5) 默认约束
作用:提供被修饰的字段一个默认值
关键词:default
添加方式:创表时添加和创表后添加

创建student表时,将学号列设置默认为"001"

create table student(id varchar(10) default "001",name varchar(10),age int);
desc student;

在这里插入图片描述
创表后添加

create table student(id varchar(10),name varchar(10),age int);
alter table student set alter id default '001';
desc student;

在这里插入图片描述


作用呈现:
当插入数据时,若未给id传入值,则会使用默认值;若给id传入值,则会使用传入值。
在这里插入图片描述
默认值只有在修饰字段没有传入数据时,才会起到作用。


(6) 外键约束
作用:副表的某个字段需要受到主表的某个字段的约束
关键词:foreign key
添加方式:创表时添加 和 创表后添加

以student表作为主表,grade表作为副表,将grade表中的学号列设置外键约束

create table student(id varchar(10) primary key,name varchar(10),age int);#主表的学号列必须设置为主键!
create table grade(id varchar(10) foreign key(id) references student(id),name varchar(10),age int);
desc grade;

在这里插入图片描述
Key 列 id 为MUL 则表示创建外键成功!

创表后添加

create table grade(id varchar(10),score int);
alter table grade add constraint id foreign key(id) references student(id);
desc grade;

在这里插入图片描述


作用呈现:

1.副表中被设置外键约束的字段,必须在主表里出现过,否则就会报错!
在student表中插入三条数据:(“101”,“张伟”,28),(“102”,“张益达”,28),(“103”,“斯奈克”,28),则id列共有三条数据:101、102、103。若在grade表中插入一条数据:(“104”,89),由于外键约束的作用,则会报错!(因为104没有在student表中出现过)
在这里插入图片描述
2.若主表的记录被副表引用,则主表不能被删除!(需要先删除副表,再删除主表)
在这里插入图片描述


(四) 更多

A.删除约束:

alter table table_name drop primary key;#删除主键约束
alter table table_name modify 字段名 int;#删除自增长约束
alter table table_name drop key 字段名;#删除唯一约束
alter table table_name modify 字段名 数据类型 null;#删除非空约束
alter table table_name alter 字段名 drop default;#删除默认约束
##删除外键约束:
alter table table_name drop foreign key 字段名  #首先删除外键
alter table table_name drop index 字段名  #其次删除索引

B.联合主键
在一个表中,至多存在一个主键,但是可以存在多个字段的联合主键
例如:创建student表,将学号与姓名设置为联合主键
在这里插入图片描述
从上图来看,当学号和姓名中只有一个相同,插入数据时是不会报错的;只有当姓名和学号都相同时,插入数据才会报错!
这也验证了一个表中至多一个主键。如果姓名和学号都是各自的主键,那么在示例中,插入前两条数据时,必会报错。

C.主键约束和唯一约束区别

约束名 保证唯一性 是否为空 一个表中的个数 是否允许组合
主键约束 至多一个
唯一约束 是(只能有一个NULL) 多个
发布了20 篇原创文章 · 获赞 3 · 访问量 1191

猜你喜欢

转载自blog.csdn.net/shine4869/article/details/104021573
今日推荐