mysql练习_1_编辑数据库

依次输入以下命令:

mysql -uroot -p
prompt \U> ;
show databases;
create database mydb_dc;
use mydb_dc;
select database();

表的创建!!!

建立数据库(mydb_dc),分别建立四个数据库表:
学生表(Student)、课程表(Course)、教师授课表(Teach)、学生成绩表(Score)
学生表 Student

序号 字段名 数据类型 说明 备注
1 Sno CHAR(8) 学号 主键唯一
2 Sname Varchar(10) 姓名 不为空
3 Sdept CHAR(2) 所在系 不为空
4 Sclass CHAR(2) 班级 不为空
5 Sage Number(2) 年龄
root@localhost> create table Student(
    -> Sno char(8) comment "学号" primary key,
    -> Sname varchar(10) comment "姓名" not null,
    -> Sdept char(2) comment "所在系" not null,
    -> Sclass char(2) comment "班级" not null,
    -> Sage tinyint comment "年龄");

root@localhost> show create table student; #通过这条命令可查看注释的信息

root@localhost> desc student;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| Sno    | char(8)     | NO   | PRI | NULL    |       |
| Sname  | varchar(10) | NO   |     | NULL    |       |
| Sdept  | char(2)     | NO   |     | NULL    |       |
| Sclass | char(2)     | NO   |     | NULL    |       |
| Sage   | tinyint(4)  | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

课程表 Course

序号 字段名 数据类型 说明 备注
1 Cno CHAR(3) 课程编号 主键唯一
2 Cname Varchar(16) 课程名称 不为空
3 CTime CHAR(3) 课时 不为空
root@localhost> create table Course(
    -> Cno char(3) comment '课程编号' primary key,
    -> Cname varchar(16) comment '课程名称' not null,
    -> CTime char(3) comment '课时' not null);

root@localhost> desc course;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Cno   | char(3)     | NO   | PRI | NULL    |       |
| Cname | varchar(16) | NO   |     | NULL    |       |
| CTime | char(3)     | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

教师授课表 Teach

序号 字段名 数据类型 说明 备注
1 Tname VARCHAR(8) 教师姓名 主键
2 Tsex CHAR(2) 教师性别
3 Cno CHAR(3) 课程编号 外键
4 Tdate CHAR(20) 上课日期
5 Tdept CHAR(2) 所教系 主键
root@localhost> create table Teach(
    -> Tname varchar(8) comment '教师姓名',
    -> Tsex char(2) comment '教师性别',
    -> Cno char(3) comment '课程编号',
    -> Tdate char(20) comment '上课日期',
    -> Tdept char(2) comment '所教系',
    -> primary key(Tname,Tdept),
    -> foreign key(Cno) references Course(Cno));

root@localhost> desc teach;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| Tname | varchar(8) | NO   | PRI | NULL    |       |
| Tsex  | char(2)    | YES  |     | NULL    |       |
| Cno   | char(3)    | YES  | MUL | NULL    |       |
| Tdate | char(20)   | YES  |     | NULL    |       |
| Tdept | char(2)    | NO   | PRI | NULL    |       |
+-------+------------+------+-----+---------+-------+

学生成绩表 Score

序号 字段名 数据类型 说明 备注
1 Sno CHAR(5) 学号 外键
2 Cno CHAR(3) 课程编号
3 Score NUMER(5,2) 成绩
4 Tdept CHAR(2) 所在系
root@localhost> create table Score(
    -> Sno char(5) comment '学号',
    -> Cno char(3) comment '课程编号',
    -> Score float(5,2) comment '成绩',
    -> Tdept char(2) comment '所在系',
    -> foreign key(Sno) references Student(Sno));

root@localhost> desc score;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| Sno   | char(5)    | YES  | MUL | NULL    |       |
| Cno   | char(3)    | YES  |     | NULL    |       |
| Score | float(5,2) | YES  |     | NULL    |       |
| Tdept | char(2)    | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+

表的修改、删除!!!
  1. Student表中增加SEX 字段,类型CHAR(2)
    alter table student add SEX char(2);
  2. Student表中列名SEX修改为Ssex
    alter table student change SEX Ssex char(2);
  3. Student表中把Sname字段的类型修改为char(10),且字段不为空
    alter table student modify Sname char(10) not null;
  4. 创建一个名为student_1的表,其结构和内容(数据)都取自student表
    create table student_2 as (select * from student);
  5. 删除student_1表中的Sage列
    alter table student_1 drop Sage;
  6. 删除表student_1
    drop table if exists student_1;

将下列数据插入到四个表中

表记录的增加!!!

学生表

Sno Sname Sdept Sclass Ssex Sage
96001 马小燕 CS 01 21
96002 黎明 CS 01 18
96003 刘东明 MA 01 18
96004 赵志勇 IS 02 20
97001 马蓉 MA 02 19
97002 李成功 CS 01 20
97003 黎明 IS 03 19
97004 李丽 CS 02 19
97005 司马志明 CS 02 18
20001 赵薇 IS 02 19
root@localhost> insert into Student (Sno,Sname,Sdept,Sclass,Ssex,Sage)
    -> value
    -> ('96001','马小燕','CS','01','女',21),
    -> ('96002','黎明','CS','01','男',18),
    -> ('96003','刘东明','MA','01','男',18),
    -> ('96004','赵志勇','IS','02','男',20),
    -> ('97001','马蓉','MA','02','女',19),
    -> ('97002','李成功','CS','01','男',20),
    -> ('97003','黎明','IS','03','女',19),
    -> ('97004','李丽','CS','02','女',19),
    -> ('97005','司马志明','CS','02','男',18),
    -> ('20001','赵薇','IS','02','女',19);

root@localhost> select * from student;
+-------+--------------+-------+--------+------+------+
| Sno   | Sname        | Sdept | Sclass | Ssex | Sage |
+-------+--------------+-------+--------+------+------+
| 20001 | 赵薇         | IS    | 02     | 女   |   19 |
| 96001 | 马小燕       | CS    | 01     | 女   |   21 |
| 96002 | 黎明         | CS    | 01     | 男   |   18 |
| 96003 | 刘东明       | MA    | 01     | 男   |   18 |
| 96004 | 赵志勇       | IS    | 02     | 男   |   20 |
| 97001 | 马蓉         | MA    | 02     | 女   |   19 |
| 97002 | 李成功       | CS    | 01     | 男   |   20 |
| 97003 | 黎明         | IS    | 03     | 女   |   19 |
| 97004 | 李丽         | CS    | 02     | 女   |   19 |
| 97005 | 司马志明     | CS    | 02     | 男   |   18 |
+-------+--------------+-------+--------+------+------+

课程表

Cno Cname Ctime
001 数学分析 114
002 普通物理 114
003 微机原理 72
004 数据结构 72
005 操作系统 64
006 数据库原理 64
007 数据库设计 48
008 程序设计 56
root@localhost> insert into course(Cno,Cname,CTime)
    -> value
    -> ('001','数学分析','114'),
    -> ('002','普通物理','114'),
    -> ('003','微机原理','72'),
    -> ('004','数据结构','72'),
    -> ('005','操作系统','64'),
    -> ('006','数据库原理','64'),
    -> ('007','数据库设计','48'),
    -> ('008','程序设计','56');

root@localhost> select * from course;
+-----+-----------------+-------+
| Cno | Cname           | CTime |
+-----+-----------------+-------+
| 001 | 数学分析        | 114   |
| 002 | 普通物理        | 114   |
| 003 | 微机原理        | 72    |
| 004 | 数据结构        | 72    |
| 005 | 操作系统        | 64    |
| 006 | 数据库原理      | 64    |
| 007 | 数据库设计      | 48    |
| 008 | 程序设计        | 56    |
+-----+-----------------+-------+

教师授课表

Tname Tsex Cno Tdate Tdept
王成刚 004 2020.9.5 CS
李正科 003 2020.9.5 CS
严敏 001 2020.9.5 MA
赵高 004 2020.9.5 IS
李正科 003 2020.10.5 MA
刘玉兰 006 2020.10.5 CS
王成刚 004 2020.10.5 IS
马悦 008 2020.10.6 CS
王成刚 007 2020.9.5 CS

注意:teach表是通过两个字段联合设置的主键,通过Tname和Tdept确定唯一性,但是这里插入的数据 主键并不是唯一,最后一条数据会插入失败。这时我们可以改变联合主键 通过三个字段设置主键来解决这个问题。

root@localhost> alter table teach drop primary key; #删除主键

root@localhost> alter table teach add primary key(Tname,Cno,Tdept); #设置主键

root@localhost> insert into teach (Tname,Tsex,Cno,Tdate,Tdept)
    -> value
    -> ('王成刚','男','004','2020.9.5','CS'),
    -> ('李正科','男','003','2020.9.5','CS'),
    -> ('严敏','女','001','2020.9.5','MA'),
    -> ('赵高','男','004','2020.9.5','IS'),
    -> ('李正科','男','003','2020.10.5','MA'),
    -> ('刘玉兰','女','006','2020.10.5','CS'),
    -> ('王成刚','男','004','2020.10.5','IS'),
    -> ('马悦','女','008','2020.10.6','CS'),
    -> ('王成刚','男','007','2020.9.5','CS');

root@localhost> select * from teach;
+-----------+------+-----+-----------+-------+
| Tname     | Tsex | Cno | Tdate     | Tdept |
+-----------+------+-----+-----------+-------+
| 严敏      | 女   | 001 | 2020.9.5  | MA    |
| 刘玉兰    | 女   | 006 | 2020.10.5 | CS    |
| 李正科    | 男   | 003 | 2020.9.5  | CS    |
| 李正科    | 男   | 003 | 2020.10.5 | MA    |
| 王成刚    | 男   | 004 | 2020.9.5  | CS    |
| 王成刚    | 男   | 004 | 2020.10.5 | IS    |
| 王成刚    | 男   | 007 | 2020.9.5  | CS    |
| 赵高      | 男   | 004 | 2020.9.5  | IS    |
| 马悦      | 女   | 008 | 2020.10.6 | CS    |
+-----------+------+-----+-----------+-------+

学生成绩表

Sno Cno Score
96001 001 77.5
96001 003 89
96001 004 86
96001 005 82
96002 001 88
96002 003 92.5
96002 006 90
96005 004 92
96005 005 90
96005 006 89
96005 007 76
96003 001 69
97001 001 96
97001 008 95
96004 001 87
96003 003 91
97002 003 91
97002 004
97002 006 92
97004 005 90
97004 006 85
97004 008 70
97003 001 59
97003 003 58

注意:score表的sno是外键,在student表中没有96005这个学生的信息,因而在score表中插入96005的信息会报错,外键约束了,这里我们通过不插入96005的信息来解决。

root@localhost> insert into score (Sno,Cno,Score)
    -> values
    -> ('96001','001','77.5'),
    -> ('96001','003','89'),
    -> ('96001','004','86'),
    -> ('96001','005','82'),
    -> ('96002','001','88'),
    -> ('96002','003','92.5'),
    -> ('96002','006','90'),
    -> ('96003','001','69'),
    -> ('97001','001','96'),
    -> ('97001','008','95'),
    -> ('96004','001','87'),
    -> ('96003','003','91'),
    -> ('97002','003','91'),
    -> ('97002','004',null),
    -> ('97002','006','92'),
    -> ('97004','005','90'),
    -> ('97004','006','85'),
    -> ('97004','008','70'),
    -> ('97003','001','59'),
    -> ('97003','003','58');

root@localhost> select * from score;
+-------+------+-------+-------+
| Sno   | Cno  | Score | Tdept |
+-------+------+-------+-------+
| 96001 | 001  | 77.50 | NULL  |
| 96001 | 003  | 89.00 | NULL  |
| 96001 | 004  | 86.00 | NULL  |
| 96001 | 005  | 82.00 | NULL  |
| 96002 | 001  | 88.00 | NULL  |
| 96002 | 003  | 92.50 | NULL  |
| 96002 | 006  | 90.00 | NULL  |
| 96003 | 001  | 69.00 | NULL  |
| 97001 | 001  | 96.00 | NULL  |
| 97001 | 008  | 95.00 | NULL  |
| 96004 | 001  | 87.00 | NULL  |
| 96003 | 003  | 91.00 | NULL  |
| 97002 | 003  | 91.00 | NULL  |
| 97002 | 004  |  NULL | NULL  |
| 97002 | 006  | 92.00 | NULL  |
| 97004 | 005  | 90.00 | NULL  |
| 97004 | 006  | 85.00 | NULL  |
| 97004 | 008  | 70.00 | NULL  |
| 97003 | 001  | 59.00 | NULL  |
| 97003 | 003  | 58.00 | NULL  |
+-------+------+-------+-------+

表记录的修改、删除!!!
  1. 将student表中学号为97005的学生的所在系改为MA
    update Student set Sdept='MA' where Sno= '97005';
  2. 删除student表中学号为97005的学生的记录
    delete from table_name where Sno= '97005';
  3. 删除student表中的所有记录
    delete from table_name;

你可能感兴趣的:(mysql练习_1_编辑数据库)