MySQL数据库2

数据库表列的增加、删除、修改练习

/*
创建学生信息表
表的内容包括:学号、姓名、性别、年龄、班级、邮箱
*/
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)  -- 外键约束
);

在实际开发中,有时并不提倡使用外键约束。这是因为外键约束可能会带来一些问题,包括:

  1. 业务数据生成顺序问题:未必一定可以先生成外键的值,再生成明细数据。

  1. 数据修复问题:如果有外键约束,修复数据就会变得更加麻烦。

  1. 性能和扩展问题:级联控制,在应用层面做,可以降低数据库的压力。因为数据库的资源是有限资源,应用资源是可以通过加机器进行水平扩展的。

  1. 分库分表场景下无法使用外键。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值