实验 2 数据库表的创建与管理
内容一:使用 SQL 语句创建学生数据库 studb。
mysql> CREATE DATABASE studb;
Query OK, 1 row affected (0.01 sec)
内容二:使用 SQL 语句选择 studb 为当前使用数据库。
mysql> use studb;
Database changed
内容三:使用 SQL 语句在 studb 数据库中创建学生数据表 student、课程数据表 course、学生选课成绩数据表 grade。
mysql> CREATE TABLE student(
-> 学号 char(4)NOT NULL PRIMARY KEY,
-> 姓名 char(8)Not NULL,
-> 性别 char(2),
-> 年龄 int,家庭住址 varchar(50)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> CREATE TABLE course(
-> 课程编号 char(4)NOT NULL PRIMARY KEY,
-> 课程名称 varchar(50),
-> 学分 int
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE grade(
-> 学号 char(4) NOT NULL,
-> 课程编号 char(4) NOT NULL,
-> 分数 int,
-> PRIMARY KEY (学号,课程编号)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+-----------------+
| Tables_in_studb |
+-----------------+
| course |
| grade |
| student |
+-----------------+
3 rows in set (0.00 sec)
mysql> desc course;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 课程编号 | char(4) | NO | PRI | NULL | |
| 课程名称 | varchar(50) | YES | | NULL | |
| 学分 | int | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> desc grade;
+--------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+-------+
| 学号 | char(4) | NO | PRI | NULL | |
| 课程编号 | char(4) | NO | PRI | NULL | |
| 分数 | int | YES | | NULL | |
+--------------+---------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> desc student;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 学号 | char(4) | NO | PRI | NULL | |
| 姓名 | char(8) | NO | | NULL | |
| 性别 | char(2) | YES | | NULL | |
| 年龄 | int | YES | | NULL | |
| 家庭住址 | varchar(50) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
5 rows in set (0.01 sec)
内容四:使用 SQL 语句 INSERT 向 studb 数据库中的数据表 student、course、grade 插入数据。
SQL 语句为:
NSERT INTO student VALUES('0001','张三','男',20,'东风路 11 号');
INSERT INTO student VALUES('0002','李四','男',20,'八一路 33 号');
INSERT INTO student VALUES('0003','王美','女',19,'解放路 76 号');
INSERT INTO student VALUES('0004','刘东','男',19,'太白路 27 号');
INSERT INTO student VALUES('0005','孙涛','男',20,'解放路 27 号');
INSERT INTO student VALUES('0006','沈蒙','男',18,'雁塔路 13 号');
INSERT INTO student VALUES('0007','田玲','女',19,'科技路 18 号');
mysql> select * from student;
+--------+--------+--------+--------+------------------+
| 学号 | 姓名 | 性别 | 年龄 | 家庭住址 |
+--------+--------+--------+--------+------------------+
| 0001 | 张三 | 男 | 20 | 东风路 11 号 |
| 0002 | 李四 | 男 | 20 | 八一路 33 号 |
| 0003 | 王美 | 女 | 19 | 解放路 76 号 |
| 0004 | 刘东 | 男 | 19 | 太白路 27 号 |
| 0005 | 孙涛 | 男 | 20 | 解放路 27 号 |
| 0006 | 沈蒙 | 男 | 18 | 雁塔路 13 号 |
| 0007 | 田玲 | 女 | 19 | 科技路 18 号 |
+--------+--------+--------+--------+------------------+
7 rows in set (0.00 sec)
INSERT INTO course VALUES('0001','程序设计方法学',2);
INSERT INTO course VALUES('0002','C 语言程序设计',2);
INSERT INTO course VALUES('0003','数据库原理及应用',2);
INSERT INTO course VALUES('0004','大学英语',4);
INSERT INTO course VALUES('0005','高等数学',4);
INSERT INTO course VALUES('0006','操作系统',2);
INSERT INTO course VALUES('0007','数据结构',3);
INSERT INTO course VALUES('0008','软件工程',3);
mysql> select * from course;
+--------------+--------------------------+--------+
| 课程编号 | 课程名称 | 学分 |
+--------------+--------------------------+--------+
| 0001 | 程序设计方法学 | 2 |
| 0002 | C 语言程序设计 | 2 |
| 0003 | 数据库原理及应用 | 2 |
| 0004 | 大学英语 | 4 |
| 0005 | 高等数学 | 4 |
| 0006 | 操作系统 | 2 |
| 0007 | 数据结构 | 3 |
| 0008 | 软件工程 | 3 |
+--------------+--------------------------+--------+
8 rows in set (0.00 sec)
INSERT INTO grade VALUES('0001','0001',80);
INSERT INTO grade VALUES('0001','0002',91);
INSERT INTO grade VALUES('0001','0003',88);
INSERT INTO grade VALUES('0001','0004',85);
INSERT INTO grade VALUES('0001','0005',77);
INSERT INTO grade VALUES('0001','0006',73);
INSERT INTO grade VALUES('0001','0007',68);
INSERT INTO grade VALUES('0001','0008',80);
INSERT INTO grade VALUES('0002','0001',79);
INSERT INTO grade VALUES('0002','0002',73);
INSERT INTO grade VALUES('0002','0003',84);
INSERT INTO grade VALUES('0002','0004',92);
INSERT INTO grade VALUES('0002','0005',81);
INSERT INTO grade VALUES('0002','0006',82);
INSERT INTO grade VALUES('0002','0007',75);
INSERT INTO grade VALUES('0002','0008',85);
mysql> select * from grade;
+--------+--------------+--------+
| 学号 | 课程编号 | 分数 |
+--------+--------------+--------+
| 0001 | 0001 | 80 |
| 0001 | 0002 | 91 |
| 0001 | 0003 | 88 |
| 0001 | 0004 | 85 |
| 0001 | 0005 | 77 |
| 0001 | 0006 | 73 |
| 0001 | 0007 | 68 |
| 0001 | 0008 | 80 |
| 0002 | 0001 | 79 |
| 0002 | 0002 | 73 |
| 0002 | 0003 | 84 |
| 0002 | 0004 | 92 |
| 0002 | 0005 | 81 |
| 0002 | 0006 | 82 |
| 0002 | 0007 | 75 |
| 0002 | 0008 | 85 |
+--------+--------------+--------+
16 rows in set (0.00 sec)
内容五:为 student 表添加一个名为“备注”的数据列,其数据类型为 varchar(50)。
mysql> desc student;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 学号 | char(4) | NO | PRI | NULL | |
| 姓名 | char(8) | NO | | NULL | |
| 性别 | char(2) | YES | | NULL | |
| 年龄 | int | YES | | NULL | |
| 家庭住址 | varchar(50) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
mysql> ALTER TABLE student ADD 备注 varchar(50);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 学号 | char(4) | NO | PRI | NULL | |
| 姓名 | char(8) | NO | | NULL | |
| 性别 | char(2) | YES | | NULL | |
| 年龄 | int | YES | | NULL | |
| 家庭住址 | varchar(50) | YES | | NULL | |
| 备注 | varchar(50) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
内容六:使用 SQL 语句创建新的数据库 studb2,并在此数据库下创建表 student2,此表结构与数据库 studb 的 student 表相同。
mysql> CREATE DATABASE studb2;
Query OK, 1 row affected (0.01 sec)
mysql> USE studb2;
Database changed
mysql> CREATE TABLE student2 as SELECT * FROM studb.student
-> WHERE 1=2;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> INSERT INTO student2 SELECT * FROM studb.student;
Query OK, 7 rows affected (0.00 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql> desc student2;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 学号 | char(4) | NO | | NULL | |
| 姓名 | char(8) | NO | | NULL | |
| 性别 | char(2) | YES | | NULL | |
| 年龄 | int | YES | | NULL | |
| 家庭住址 | varchar(50) | YES | | NULL | |
| 备注 | varchar(50) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
mysql> select * from student2;
+--------+--------+--------+--------+------------------+--------+
| 学号 | 姓名 | 性别 | 年龄 | 家庭住址 | 备注 |
+--------+--------+--------+--------+------------------+--------+
| 0001 | 张三 | 男 | 20 | 东风路 11 号 | NULL |
| 0002 | 李四 | 男 | 20 | 八一路 33 号 | NULL |
| 0003 | 王美 | 女 | 19 | 解放路 76 号 | NULL |
| 0004 | 刘东 | 男 | 19 | 太白路 27 号 | NULL |
| 0005 | 孙涛 | 男 | 20 | 解放路 27 号 | NULL |
| 0006 | 沈蒙 | 男 | 18 | 雁塔路 13 号 | NULL |
| 0007 | 田玲 | 女 | 19 | 科技路 18 号 | NULL |
+--------+--------+--------+--------+------------------+--------+
7 rows in set (0.00 sec)
内容七:使用 SQL 语句删除 student2 表中学号为 0004 的记录。
mysql> DELETE FROM student2 where 学号 = '0004';
Query OK, 1 row affected (0.00 sec)
mysql> select * from student2;
+--------+--------+--------+--------+------------------+--------+
| 学号 | 姓名 | 性别 | 年龄 | 家庭住址 | 备注 |
+--------+--------+--------+--------+------------------+--------+
| 0001 | 张三 | 男 | 20 | 东风路 11 号 | NULL |
| 0002 | 李四 | 男 | 20 | 八一路 33 号 | NULL |
| 0003 | 王美 | 女 | 19 | 解放路 76 号 | NULL |
| 0005 | 孙涛 | 男 | 20 | 解放路 27 号 | NULL |
| 0006 | 沈蒙 | 男 | 18 | 雁塔路 13 号 | NULL |
| 0007 | 田玲 | 女 | 19 | 科技路 18 号 | NULL |
+--------+--------+--------+--------+------------------+--------+
6 rows in set (0.00 sec)
内容八:使用 SQL 语句更新 student2 表中学号为 0002 的家庭住址为“建设路 96 号”。
mysql> update student2 set 家庭住址 = '建设路 96 号'where 学号 =0002;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from student2;
+--------+--------+--------+--------+------------------+--------+
| 学号 | 姓名 | 性别 | 年龄 | 家庭住址 | 备注 |
+--------+--------+--------+--------+------------------+--------+
| 0001 | 张三 | 男 | 20 | 东风路 11 号 | NULL |
| 0002 | 李四 | 男 | 20 | 建设路 96 号 | NULL |
| 0003 | 王美 | 女 | 19 | 解放路 76 号 | NULL |
| 0005 | 孙涛 | 男 | 20 | 解放路 27 号 | NULL |
| 0006 | 沈蒙 | 男 | 18 | 雁塔路 13 号 | NULL |
| 0007 | 田玲 | 女 | 19 | 科技路 18 号 | NULL |
+--------+--------+--------+--------+------------------+--------+
6 rows in set (0.00 sec)
内容九:删除 student2 表。
mysql> Drop table student2;
Query OK, 0 rows affected (0.01 sec)
内容十:删除数据库 studb2。
mysql> Drop database studb2;
Query OK, 0 rows affected (0.01 sec)