003、创建表,添加约束

 

一、创建表

语法格式:
create table tableName(
 columnName dataType(length),
 ………………..
 columnName dataType(length)
);

 

# ----------------------- 14、创建表 ------------------------

use bjpowernode;
drop table if exists t_student;

create table t_student(
student_id int(10) primary key auto_increment,
student_name varchar(20) not null,
sex char(2),
birthday date,
email varchar(30),
classes_id int(3)
);

# 向 t_student 表中添加数据
insert into t_student (student_id, student_name, sex, birthday, email, classes_id) values 
(1, '刘备', '', '1980-01-10', '123456@qq.com', 1),
(2, '关羽', '', '1983-02-10', '2345678@qq.com', 2),
(3, '张飞', '', '1984-05-10', '5645678@qq.com', 3)
;

select * from t_student;

 

二、增加/删除/修改表结构

  采用 alter table 来增加/删除/修改表结构,不影响表中的数据
a、添加字段
如:需求发生改变,需要向 t_student 中加入联系电话字段,字段名称为:contatct_tel 类型为 varchar(40)
alter table t_student add contact_tel varchar(40);
b、修改字段
如:student_name 无法满足需求,长度需要更改为 100
alter table t_student modify student_name varchar(100) ;
如 sex 字段名称感觉不好,想用 gender 那么就需要更改列的名称 。

修改字段名称
将sex字段改为gender
ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段类型 约束条件

ALTER TABLE t_student CHANGE sex gender CHAR(2) NOT NULL DEFAULT '';

 

c、删除字段
如:删除联系电话字段
alter table t_student drop contact_tel;

 

三、创建表加入约束

常见的约束

  a) 非空约束,not null
  b) 唯一约束,unique
  c) 主键约束,primary key
  d) 外键约束,foreign key
  e) 自定义检查约束,check(不建议使用)(在 mysql 中现在还不支持)
 
a、非空约束,not null
非空约束,针对某个字段设置其值不为空,如:学生的姓名不能为空。
use bjpowernode;
drop table if exists t_student;

create table t_student(
student_id int(10) primary key auto_increment,
student_name varchar(20) not null,
sex char(2),
birthday date,
email varchar(30),
classes_id int(3)
);

 

b、唯一约束,unique
唯一性约束,它可以使某个字段的值不能重复,如:email 不能重复
use bjpowernode;
drop table if exists t_student;

create table t_student(
student_id int(10) primary key auto_increment,
student_name varchar(20) not null,
sex char(2),
birthday date,
email varchar(30) unique,
classes_id int(3)
);
c、两个字段联合唯一约束
create table t_student(
student_id int(10),
student_name varchar(20) not null,
sex char(2),
birthday date,
email varchar(30) unique,
classes_id int(3),
unique (student_id,student_name)  # 两个字段联合唯一
);
两个字段联合唯一时,两个字段的值都相同时,才作为唯一。 如下第2行和第5行的 id 为 1 和 名字 为刘备, 都相同才作为唯一约束。插入数据时会报错。
insert into t_student (student_id, student_name, sex, birthday, email, classes_id) values 
(1, '刘备', '', '1980-01-10', '123456@qq.com', 1),
(1, '关羽', '', '1983-02-10', '2345678@qq.com', 2),
(2, '刘备', '', '1984-05-10', '5645678@qq.com', 3),
(1, '刘备', '', '1990-05-10', '3455678@qq.com', 4)
;
 
d、各自具有唯一性
create table t_student(
student_id int(10) unique,        # 各自具有唯一性
student_name varchar(20) unique not null,        # 各自具有唯一性
sex char(2),
birthday date,
email varchar(30) unique,
classes_id int(3)
);

 

e、外键约束,foreign key
外键主要是维护表之间的关系的,主要是为了保证参照完整性,如果表中的某个字段为外键字段,那么该字段的值必须来源于参照的表的主键,如:emp 中的 deptno 值必须来源于 dept 表中的 deptno 字段值。
 
constraint 约束的意思。
练习:建立学生和班级表之间的连接
首先建立班级表 t_classes ,constraint pk_classes_id primary key(classes_id)  把  主键(classes_id)  作为约束键 。
drop table if exists t_classes;
create table t_classes(
classes_id int(3),
classes_name varchar(40),
constraint pk_classes_id primary key(classes_id)
)
在 t_student 中加入外键约束
constraint fk_classes_id foreign key(classes_id) references t_classes(classes_id)   在 t_student 表中把 classes_id 作为约束外键。
drop table if exists t_student;
create table t_student(
student_id int(10),
student_name varchar(20),
sex char(2),
birthday date,
email varchar(30),
classes_id int(3),
constraint student_id_pk primary key(student_id),
constraint fk_classes_id foreign key(classes_id) references t_classes(classes_id) 
)
存在外键的表就是子表,参照的表就是父表,所以存在一个父子关系,也就是主从关系,主表就是班级表,从表就是学生表。

 

 

 

 

posted @ 2021-10-11 15:32  空-山-新-雨  阅读(421)  评论(0编辑  收藏  举报