概念:
语法:
CREATE TABLE 表名(
列名 数据类型 [约束],
列名 数据类型 [约束],
列名 数据类型 [约束]
)charset=utf8mb4
代码演示:
# 1 创建表
# 学生表
create table if not exists student(
stu_id int,
stu_name varchar(20),
stu_age int,
stu_gender char(2),
stu_address varchar(100),
stu_born date
)charset=utf8mb4;
# 科目表
create table if not exists course(
course_id int,
course_name varchar(20),
course_hour int
);
# 成绩表
create table if not exists score(
stu_id int,
course_id int,
result double(5,2),
exam_time datetime
);
注意:
语法: ALTER TABLE 表名 操作
;
代码演示:
# 2.1 向现有表中添加列
alter table student add stu_email varchar(50);
# 2.2 修改列名和类型
alter table student change stu_email email varchar(60);
# 2.3 删除一列
alter table student drop stu_born;
# 2.4 修改表名
alter table student rename t_student;
alter table score rename t_score;
alter table course rename t_course;
**语法: **DROP TABLE 表名;
# 3 删除表
# if exists 判断是否存在
drop table if exists student;
思考:
概念: 用于限制加入表的数据的类型和规范。
**语法:**PRIMARY KEY。
**作用:**唯一,标识表中的一行数据,此列的值不可重复,且不能为 NULL。
代码演示:
# 为适用于主键的列添加主键约束
# 1.1 主键约束: 唯一表示一行数据, 此列的值不能重复, 也不能为空
create table if not exists student(
stu_id int primary key,
stu_name varchar(20),
stu_age int,
stu_gender char(2),
stu_address varchar(100)
)charset=utf8mb4;
insert into student values(101,'张三',20,'男','北京昌平');
insert into student values(102,'田美丽',20,'女','北京昌平');
create table if not exists course(
course_id int primary key,
course_name varchar(20),
course_hour int
);
insert into course values(1,'Java',200),(2,'MySQL',50),(3,'HTML',60);
[重点] 联合主键
语法: primary key(表1, 表2)
代码演示:
# 联合主键
create table if not exists score(
stu_id int,
course_id int,
result double(5,2),
exam_time datetime,
primary key(stu_id,course_id)
);
insert into score values(101,1,90,'2024-1-25');
insert into score values(101,2,90,'2024-1-25');
语法: unique
作用: 唯一,标识表中的一行数据,不可重复,可以为NULL
代码演示:
create table if not exists student(
stu_id int primary key,
stu_name varchar(20),
stu_age int,
stu_gender char(2),
stu_address varchar(100),
identitycard varchar(18) unique
)charset=utf8mb4;
insert into student values(101,'张三',20,'男','北京昌平','111111111111111111');
insert into student values(102,'田美丽',20,'女','北京昌平',null);
语法: AUTO_INCREMENT
代码演示:
# 1.3 自动增长列
-- 不能单独使用,给主键数值列添加自动增长;每个表只能有一个。
-- 默认从1开始,每次加1;可以使用auto_increment=100修改初始值
-- 只会增加, 即使将数据删除也不会倒退
# 需求: 为编号添加自动增长
create table if not exists course(
course_id int primary key auto_increment,
course_name varchar(20),
course_hour int
);
insert into course(course_name,course_hour) values('JAVA',200),('MySQL',50),('HTML',60);
注意:
**概念: **限制列的单元格的数据正确性。
**包括: **
代码演示:
drop table student; # 删除原有student表
create table if not exists student(
stu_id int primary key auto_increment,
stu_name varchar(20) not null, #非空约束
stu_age int,
stu_gender char(2),
stu_address varchar(100) default '地址不详', #默认值约束
stu_born date default '2000-01-01'
)charset=utf8mb4;
insert into student values(null,'张三',20,'男','北京','2000-10-05');
insert into student values(null,'李四',20,'男',null,'2000-10-05');
insert into student values(null,'王五',20,'男',default,'2000-10-05');
insert into student (stu_name,stu_age,stu_gender) values('赵六',20,'女');
概念: 引用完整性约束也称为外键约束。
语法: constraint [外键名] foreign key(列名) references 主表(列名)。
作用:
代码演示:
# 引用完整性约束[外键约束]
drop table score; # 删除原有数据表
create table if not exists score(
stu_id int,
course_id int,
result double(5,2),
exam_time datetime,
primary key(stu_id,course_id),
constraint foreign key(stu_id) references student(stu_id),
constraint foreign key(course_id) references course(course_id)
);
insert into score values(101,1,90,'2024-1-25');
insert into score values(101,2,93,'2024-1-25');
insert into score values(101,3,99,'2024-1-25');
insert into score values(102,3,99,'2024-1-25');
注意:当两张表存在引用关系,若要执行删除操作,一定要先删除从表(引用表),再删除主表(被引用表)