数据库表列的增加、删除、修改练习
/*
创建学生信息表
表的内容包括:学号、姓名、性别、年龄、班级、邮箱
*/
create table t_student(
sno int(10),
sname varchar(4),
sex char(1),
age int(3),
classname varchar(10),
email varchar(20)
);
-- 查询数据
select * from t_student;
-- 修改表结构
-- 添加列
alter table t_student add date datetime ; -- add 后面第一个是列命,第二个是列数据类型
-- 修改表名
alter table t_student rename student;
-- 在开头添加一列
alter table t_student add date date first;
-- 在指定位置添加一列
alter table t_student add grades double(5,2) after sex;
-- 删除列
alter table t_student drop date;
-- 修改列
alter table t_student modify grades float(4,1); -- modify 只改变类型定义
alter table t_student change grades score double(4,1); -- change改变列的名字和类型定义
-- 删除表
drop table t_student;
数据库的非外键约束
创建学生信息表
表的内容包括:
学号:设置为主键。主键 = 不能为空+唯一 作用:通过主键可以查询到唯一信息,为整数类型需要自增。
姓名:名字不能为空
性别:默认为男,只能是男女
年龄:限制为18-60
班级
邮箱:唯一
练习1
create table t_student(
sno int(10) primary key auto_increment, -- primary key主键约束,auto_increment自增约束
sname varchar(4) not null, -- not null非空约束
sex char(1) default '男' check(sex = '男' || sex = '女'), -- default默认约束 check检查约束
age int(3) check(age>=18 and age<=60),
classname varchar(10),
email varchar(20) unique -- unique唯一约束,可以为空
);
insert into t_student values(1822121,'大师','男',23,'java2班','456123@qq.com');
insert into t_student values(1822122,'地方撒','男',23,'java2班','62165@qq.com');
update t_student set sname='掉大分' where sno = 1822122;
练习2
create table t_student(
sno int(10) auto_increment,
sname varchar(4) not null,
sex char(1) default '男',
age int(3),
classname varchar(10),
email varchar(20),
constraint pk_stu primary key(sno),
constraint ck_stu_sex check(sex = '男' || sex = '女'),
constraint ck_stu_age check(age>=18 and age<=60),
constraint un_stu_email unique(email)
);
练习3
create table t_student(
sno int(10),
sname varchar(4) not null,
sex char(1) default '男',
age int(3),
classname varchar(10),
email varchar(20)
);
alter table t_student add constraint pk_stu primary key (sno);
alter table t_student modify sno int(10) auto_increment;
alter table t_student add constraint ck_stu_sex check(sex='男' || sex='女');
alter table t_student add constraint ck_stu_age check(age>=18 and age<=60);
alter table t_student add constraint un_stu_email unique(email);
外键约束练习
create table t_student(
sno int(10) primary key auto_increment, -- primary key主键约束,auto_increment自增约束
sname varchar(4) not null, -- not null非空约束
classno int(4),
constraint fk_stu_classon foreign key(classno) references t_class(cno) -- 外键约束
);
在实际开发中,有时并不提倡使用外键约束。这是因为外键约束可能会带来一些问题,包括:
业务数据生成顺序问题:未必一定可以先生成外键的值,再生成明细数据。
数据修复问题:如果有外键约束,修复数据就会变得更加麻烦。
性能和扩展问题:级联控制,在应用层面做,可以降低数据库的压力。因为数据库的资源是有限资源,应用资源是可以通过加机器进行水平扩展的。
分库分表场景下无法使用外键。