数据库学生表
文章目录学生表建立学生表:建表过程中出现的错误:插入数据课程表建立课程表:插入数据选课表建立选课表插入数据建表过程中出现的错误:修改基本表增加属性列:修改数据类型:增加约束条件:删除属性列:删除基本表索引的创建删除索引学生表建立学生表:create table t_Student(Sno char(12) not null primary key ,Sname varchar(20) not nu
文章目录
学生表
建立学生表:
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”;
建表过程中出现的错误:
-
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后面的单引号变成双引号即可。
-
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’
即可 ,具体原因不知,应该是无法识别中文字符。 -
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
即可 -
mysql> set names gbk;
Query OK, 0 rows affected (0.00 sec) -
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的单引号变成双引号即可。
插入数据
- 可一条一条数据输入,但效率较慢。
- insert into t_Student(Sno,Sname,Ssex,Sage,Sdept) values(“0804601”,”lily”,”man”,12,”jk”);
- insert into t_Student(Sno,Sname,Ssex,Sage,Sdept) values(“0804602”,”mary”,”weman”,17,”jk19”);
- insert into t_Student(Sno,Sname,Ssex,Sage,Sdept) values(“0804603”,”bob”,”man”,18,”jk18”);
- insert into t_Student(Sno,Sname,Ssex,Sage,Sdept) values(“0804604”,”hani”,”man”,10,”jk”);
- 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”);
课程表
建立课程表:
create table t_Course(
Cno char(15) primary key,
Cname char(20),
Pre_Cno char(15),
Credits int(1)
);
插入数据
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);
选课表
建立选课表
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)
);
补充:关于添加和删除FK的语句:
- 添加:
alert table 表名 add constraint FK_ID foreign key(外键字段名) references 外表表名(主键字段名)
- 删除:
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);
建表过程中出现的错误:
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;
修改数据类型:
- 将Sage(年龄)的数据类型改为SMALLINT型。
alter table t_Student alter column Sage smallint(2);
增加约束条件:
-
增加所在系sdept必须取唯一值的约束条件。
alter table t_student add constraint unique(Sdept);
由于Sdept里存在重复,所以报错。alter table t_student add constraint unique(Sage);
查看数据发现,Sage没有重复,则实验一把,语句并没有出错。
现通过Navicat将数据改为如下图所示:
运行无错:
删除Sage的unique约束:alter table t_student drop index Sage;
删除属性列:
-
删除属性列RegisterDate.
alter table t_student drop column SRegisterDate;
删除基本表
-
创建一个test表,分别有列tno,tname。
create table t_test (
tno int,
tname char(12)
); -
删除test表。
drop table if exists t_test;
索引的创建
-
为学生选课数据库中的Student,Course,Sc三个表建立索引。其中Student表按“姓名”升序建唯一索引 C1,Course表按“课程名”降序建唯一索引C2,Sc表按“学号”升序和“课程号”升序建唯一索引C3。
create unique index C1 on t_student(Sname);
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);
删除索引
-
删除以上所建索引C1、C2、C3。
drop index c1 on t_student;
drop index C2 on t_course;
alter table t_sc drop index C3;
C2未建立,也就不存在删除啦 。。。。。
更多推荐
所有评论(0)