学生表

建立学生表:

create table t_Student(
Sno char(12) not null primary key ,
Sname varchar(20) not null unique,
Ssex char(2) default “男”,
Sage int(2),
Sdept char(15)
)charset=“utf8”;

image-20210510152707931

建表过程中出现的错误:
  1. mysql> create table t_Student(Sno char(12) not null primary key ,Sname varchar(20) not null unique,Ssex char(2) default ‘m’,Sage int(2),Sdept char(15));
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘??m??,Sage int(2),Sdept char(15))’ at line 1

    语法错误,将default后面的单引号变成双引号即可。

  2. mysql> create table t_Student(Sno char(12) not null primary key ,Sname varchar(20) not null unique,Ssex char(2) default “男”,Sage int(2),Sdept char(15));
    ERROR 1067 (42000): Invalid default value for ‘Ssex’

    在后面加上charset=‘utf8’即可 ,具体原因不知,应该是无法识别中文字符。

  3. mysql> create table t_Student(Sno char(12) not null primary key ,Sname varchar(20) not null unique,Ssex char(2) default “男”,Sage int(2),Sdept char(15))charset=‘utf8’;
    ERROR 1300 (HY000): Invalid utf8 character string:’\xA1\xAEutf8\xA1\xAF’

    解决方法如下,输入set names gbk 即可

  4. mysql> set names gbk;
    Query OK, 0 rows affected (0.00 sec)

  5. mysql> create table t_Student(Sno char(12) not null primary key ,Sname varchar(20) not null unique,Ssex char(2) default “男”,Sage int(2),Sdept char(15))charset=‘utf8’;
    ERROR 1115 (42000): Unknown character set: ‘‘utf8’’

    同样,utf8的单引号变成双引号即可。

插入数据

  • 可一条一条数据输入,但效率较慢。
  1. insert into t_Student(Sno,Sname,Ssex,Sage,Sdept) values(“0804601”,”lily”,”man”,12,”jk”);
  2. insert into t_Student(Sno,Sname,Ssex,Sage,Sdept) values(“0804602”,”mary”,”weman”,17,”jk19”);
  3. insert into t_Student(Sno,Sname,Ssex,Sage,Sdept) values(“0804603”,”bob”,”man”,18,”jk18”);
  4. insert into t_Student(Sno,Sname,Ssex,Sage,Sdept) values(“0804604”,”hani”,”man”,10,”jk”);
  5. insert into t_Student(Sno,Sname,Ssex,Sage,Sdept) values(“0804605”,”job”,”man”,13,”jk”);
  • 一次插入多条数据。

insert into t_Student(Sno,Sname,Ssex,Sage,Sdept)

values(“0804601”,”lily”,”男”,12,”jk”),(“0804602”,”mary”,”女”,17,”jk19”),

(“0804603”,”bob”,”男”,18,”jk18”),(“0804604”,”hani”,”男”,10,”jk”),

(“0804605”,”job”,”男”,13,”jk”);

image-20210510162255521

课程表

建立课程表:

create table t_Course(
Cno char(15) primary key,
Cname char(20),
Pre_Cno char(15),
Credits int(1)
);

image-20210510154349472

插入数据

insert into t_Course(Cno,Cname,Pre_Cno,Credits)
values(“101”,”sjk”,null,3),(“102”,”jw”,”101”,2),
(“103”,”java”,”102”,4),(“104”,”web”,”103”,3),
(“105”,”mks”,”104”,3);

image-20210510155008187

选课表

建立选课表

create table t_SC(
Sno char(12),
Cno char(15),
Grade int(3),
primary key(Sno,Cno),
constraint FK_Sno foreign key (Sno) references t_student (Sno)
);

image-20210510161809856

补充:关于添加和删除FK的语句:

  1. 添加:
    alert table 表名 add constraint FK_ID foreign key(外键字段名) references 外表表名(主键字段名)
  2. 删除:
    alter table 表名 drop foreign key 外键名;

插入数据

insert into t_SC(Sno,Cno,Grade) values(“0804601”,”101”,99),(“0804602”,”102”,98),(“0804603”,”103”,97),(“0804604”,”104”,96),(“0804605”,”105”,95);

image-20210510162700786

建表过程中出现的错误:

mysql> insert into t_SC(Sno,Cno,Grade) values(“08064601”,“101”,99),(“08064602”,“102”,98),(“08064603”,“103”,97),(“08064604”,“104”,96),(“08064605”,“105”,95);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (studentmanage.t_sc, CONSTRAINT FK_Sno FOREIGN KEY (Sno) REFERENCES t_student (Sno))

由于Sno属性与t_student表中的Sno不匹配,所以报错。

修改基本表

增加属性列:

  • 向基本表Student中增加“入学时间”属性列,其属性名为RegisterDate,数据类型为DATETIME型。

alter table t_Student add SRegisterDate datetime;
image-20210510163551057

修改数据类型:

  • 将Sage(年龄)的数据类型改为SMALLINT型。
    alter table t_Student alter column Sage smallint(2);

增加约束条件:

  • 增加所在系sdept必须取唯一值的约束条件。
    alter table t_student add constraint unique(Sdept);
    image-20210510172936614
    由于Sdept里存在重复,所以报错。

    alter table t_student add constraint unique(Sage);

    image-20210510173203956
    查看数据发现,Sage没有重复,则实验一把,语句并没有出错。
    现通过Navicat将数据改为如下图所示:

    image-20210510173511722
    运行无错:

    image-20210510173607765
    删除Sage的unique约束:alter table t_student drop index Sage;

删除属性列:

  • 删除属性列RegisterDate.

    alter table t_student drop column SRegisterDate;
    image-20210510174505536

删除基本表

  • 创建一个test表,分别有列tno,tname。

    create table t_test (
    tno int,
    tname char(12)
    );

    image-20210510174731984

  • 删除test表。

    drop table if exists t_test;
    image-20210510175353478

索引的创建

  • 为学生选课数据库中的Student,Course,Sc三个表建立索引。其中Student表按“姓名”升序建唯一索引 C1,Course表按“课程名”降序建唯一索引C2,Sc表按“学号”升序和“课程号”升序建唯一索引C3。

    create unique index C1 on t_student(Sname);

    image-20210510180746722

    create unique index c2 on t_course(Cname) desc;
    由于使用MySQL5.7版本,依旧升序排列。

    create index c3 on t_sc(Sno,Cno);

  • 在基本表Student的Sname(姓名)和Sno(学号)列上建立一个聚簇索引c4,而且Student中的物理记录将按照Sname值和Sno值的升序存放。
    create index c4 on t_student(Sname,Sno);

    image-20210510182459457

删除索引

  • 删除以上所建索引C1、C2、C3。
    drop index c1 on t_student;
    drop index C2 on t_course;

    alter table t_sc drop index C3;

image-20210510182724764

C2未建立,也就不存在删除啦 。。。。。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐