接着上一章的内容,第一章安装好了Mysql和对应的编译器workbench,并且简单的创造了一个数据库college,第二章了解了SQL基础的动词和数据类型。这一章我们学习怎么用这些动词,在这个college库里面创建数据表,并且修改删除等操作。
数据表基础
数据表由行和列组成,通常人们将行称为记录,而将列称为字段。(统计学里面应该叫样本和特征。)
每个字段中的数据必须具有相同的数据类型,且每个字段都有字段名,如右图中的“学号”、“姓名”等就是字段名。
数据表创建
基础语法为:
CREATE TABLE语句的基本语法格式:
CREATE TABLE <表名>
(
<字段名1> <数据类型> [NOT NULL] [DEFAULT <默认值>],
[<字段名2> <数据类型> [NOT NULL] [DEFAULT <默认值>],
……
<字段名n> <数据类型>……);
NOT NULL为可选项,如果在某字段后加上该项,DEFAULT <默认值>为可选项,如果在某字段后加上该项,则向表添加数据时,如果不向该字段添加数据,系统就会自动用默认值填充该字段。则向表添加数据时,必须给该字段输入内容,即不能为空。
样例:
在MySQL里面创建一个Student表,设置学号,姓名,性别三个字段不能为空。性别指定默认值‘男’。
DROP TABLE IF EXISTS `student`;
SET character_set_client = utf8mb4 ;
CREATE TABLE `student` (
`ID` char(4) NOT NULL,
`name` char(20) NOT NULL,
`sex` char(2) NOT NULL DEFAULT '男',
`birthday` datetime DEFAULT NULL,
`origin` varchar(50) DEFAULT NULL,
`contact1` char(12) DEFAULT NULL,
`contact2` char(12) DEFAULT NULL,
`institute` char(20) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
PRIMARY KEY (`ID`)作用是将ID设置为主键,这样就是唯一的识别记录。
在这个表里面插入记录:
LOCK TABLES `student` WRITE;
/*!40000 ALTER TABLE `student` DISABLE KEYS */;
INSERT INTO `student` VALUES ('0001','张三','男','1997-05-29 00:00:00','广东省','010-81234567','1381234568','中文系'),('0002','李燕','女','1999-01-18 00:00:00','浙江省','13744444444',NULL,'外语系'),('0003','王丽','女','1998-09-01 00:00:00','辽宁省','13700000000','13711111111','物理系'),('0004','周七','女','1997-09-21 00:00:00','北京市','13877777777','0471-6123456','计算机学院'),('0005','刘八','女','1999-08-21 00:00:00','海南省','15388888888',NULL,'中文系'),('0006','吴学霞','女','1998-02-12 00:00:00','江苏省','13822222222','13822222222','中文系'),('0007','马六','男','1998-07-12 00:00:00','浙江省','13766666666',NULL,'外语系'),('0008','杨九','男','1998-02-17 00:00:00','四川省','137999999999','0471-6123456','计算机学院'),('0009','吴刚','男','1996-09-11 00:00:00','内蒙古自治区','13811111111',NULL,'外语系'),('0010','徐学','女','2000-01-08 00:00:00','内蒙古自治区','13800000000','0471-6123456','计算机学院');
/*!40000 ALTER TABLE `student` ENABLE KEYS */;
UNLOCK TABLES;
可以点击左侧的数据表视图查看这个表:
这个student就是刚刚创建的表,点击旁边的这个像日历一样的图表,就能看到表了,如下:
表结构修改
增加新字段
在MySQL的Student表中,增加新字段政治面貌“political”。
ALTER TABLE student
ADD
political char(10);
然后使用DESC查看
DESC student
可以看到多了一行 ,变量类型为char10.
增加带有默认值的新字段
在Student表中,添加新字段“婚否”的同时,给其设置默认值“否”。
ALTER TABLE student
ADD
marry char(2) DEFAULT '否';
查看:
DESC student
修改字段的类型和宽度
将student表的政治面貌字段“political”的数据类型改变为变长字符型,宽度为6。
ALTER TABLE Student
MODIFY
political varchar(6);
查看可以看到已经改了
删除字段
使用ALTER TABLE …DROP COLUMN语句直接删除student表的婚否字段“marry”
ALTER TABLE student
DROP COLUMN marry;
更改主键
将上例中设置的student表中的学号字段“ID”的主键约束改变为学号字段“ID”与姓名字段“name”的联合主键约束。
(1)首先,删除当前主键约束。
ALTER TABLE student
DROP PRIMARY KEY;
(2)其次,添加字段联合主键约束。(注意:被设置主键约束的字段必须设置NOT NULL约束。
ALTER TABLE student
ADD CONSTRAINT xh_xm
PRIMARY KEY(ID, name)
表删除、截断与重命名
删除表
当不再需要数据库中的某表时,就应当删除该表,释放该表所占有的资源。在SQL语言中,删除数据表使用DROP TABLE语句。例如,下面的语句用于删除Student表。
DROP TABLE student;
说明:有时,在使用DROP TABLE语句删除数据表时会出现删除失败的情况。导致删除失败的绝大多数原因是该表可能与数据库中的其他表存在联系。此时,应当先解除表之间的联系,然后再使用DROP TABLE语句删除表。
截断表
使用DROP TABLE语句会将表彻底的删除掉,包括表内的数据和表本身。但有时,用户可能希望只删除表中的数据,而不删除表本身。这时可以使用TRUNCATE语句将表截断,即删除其内的所有数据。例如,下面的语句将截断Student表。
TRUNCATE TABLE student;
重命名表
-- MySQL中重命名student表为stu_info的语句如下:--
ALTER TABLE student
RENAME TO stu_info;
创建后续用表
后面的练习还需用到很多表,这里都创建好:
老师表
-- MySQL dump 10.13 Distrib 8.0.13, for Win64 (x86_64)
--
-- Host: 192.168.99.100 Database: college
-- ------------------------------------------------------
-- Server version 8.0.13
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
SET NAMES utf8 ;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `teacher`
--
DROP TABLE IF EXISTS `teacher`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
SET character_set_client = utf8mb4 ;
CREATE TABLE `teacher` (
`ID` char(6) NOT NULL,
`name` char(20) NOT NULL,
`sex` char(2) NOT NULL,
`age` int(11) DEFAULT NULL,
`title` char(8) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `teacher`
--
LOCK TABLES `teacher` WRITE;
/*!40000 ALTER TABLE `teacher` DISABLE KEYS */;
/*!40000 ALTER TABLE `teacher` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
课程表
-- MySQL dump 10.13 Distrib 8.0.13, for Win64 (x86_64)
--
-- Host: 192.168.99.100 Database: college
-- ------------------------------------------------------
-- Server version 8.0.13
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
SET NAMES utf8 ;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `course`
--
DROP TABLE IF EXISTS `course`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
SET character_set_client = utf8mb4 ;
CREATE TABLE `course` (
`ID` char(3) NOT NULL,
`course` char(30) NOT NULL,
`type` char(10) NOT NULL,
`credit` int(11) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `course`
--
LOCK TABLES `course` WRITE;
/*!40000 ALTER TABLE `course` DISABLE KEYS */;
INSERT INTO `course` VALUES ('001','邓小平理论','必修',3),('002','心理学','必修',3),('003','教育学','必修',3),('004','计算机基础','必修',4),('005','大学英语一','必修',4),('006','摄影','选修',2),('007','足球','选修',2),('008','大学语文一','必修',4),('009','法律基础','必修',3),('010','音乐欣赏','选修',2);
/*!40000 ALTER TABLE `course` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
分数表
-- MySQL dump 10.13 Distrib 8.0.13, for Win64 (x86_64)
--
-- Host: 192.168.99.100 Database: college
-- ------------------------------------------------------
-- Server version 8.0.13
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
SET NAMES utf8 ;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `score`
--
DROP TABLE IF EXISTS `score`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
SET character_set_client = utf8mb4 ;
CREATE TABLE `score` (
`s_id` char(4) DEFAULT NULL,
`c_id` char(3) DEFAULT NULL,
`result1` decimal(9,2) DEFAULT NULL,
`result2` decimal(9,2) DEFAULT NULL,
KEY `fk_score_student` (`s_id`),
KEY `fk_score_course` (`c_id`),
CONSTRAINT `fk_score_course` FOREIGN KEY (`c_id`) REFERENCES `course` (`id`),
CONSTRAINT `fk_score_student` FOREIGN KEY (`s_id`) REFERENCES `student` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `score`
--
LOCK TABLES `score` WRITE;
/*!40000 ALTER TABLE `score` DISABLE KEYS */;
INSERT INTO `score` VALUES ('0001','001',87.00,90.00),('0001','002',73.00,95.00),('0001','003',81.00,92.00),('0001','004',84.00,90.00),('0001','005',90.00,95.00),('0002','001',74.00,95.00),('0002','002',87.00,90.00),('0002','003',79.00,95.00),('0002','004',90.00,95.00),('0002','005',89.00,90.00),('0002','006',88.00,90.00),('0003','001',90.00,90.00),('0003','002',70.00,92.00),('0003','003',85.00,93.00),('0003','004',76.00,90.00),('0003','005',65.00,95.00),('0004','001',82.00,95.00),('0004','002',91.00,90.00),('0004','003',90.00,90.00),('0004','004',87.00,90.00),('0004','005',77.00,90.00),('0005','001',72.00,95.00),('0005','002',93.00,95.00),('0005','003',67.00,95.00),('0005','004',95.00,95.00),('0006','002',73.00,95.00),('0006','003',81.00,92.00),('0006','004',84.00,90.00),('0006','005',90.00,95.00),('0007','001',74.00,95.00),('0007','002',87.00,90.00),('0007','003',79.00,95.00),('0007','004',90.00,95.00),('0007','005',89.00,90.00),('0007','006',88.00,90.00),('0008','001',90.00,90.00),('0008','002',70.00,92.00),('0008','003',85.00,93.00),('0008','004',76.00,90.00),('0008','005',65.00,95.00),('0009','001',82.00,95.00),('0009','002',91.00,90.00),('0009','003',90.00,90.00),('0009','004',87.00,90.00),('0009','005',77.00,90.00),('0010','001',72.00,95.00),('0010','002',93.00,95.00),('0010','003',67.00,95.00),('0010','004',95.00,95.00);
/*!40000 ALTER TABLE `score` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
四个表准备好了,后面可以进行更多的Mysql的学习。