MySQL基本操作

由于本人的水平有限,可能会有一些遗漏,希望大家能够进行补充。

一、数据库操作

1.创建数据库

语句:create database [IF NOT EXISTS] 数据库名;

示例:CREATE DATABASE abc;

2.删除数据库

语句:drop database 数据库名;

示例:DROP DATABASE abc;

3.使用某个数据库

语句:use 数据库名;

示例:use abc;

4.查询该数据库下包含多少数据表

语句:show tables;

示例:use abc; show tables;

二、基本语法

1.MySQL支持的列类型

列类型 说明
tinyint/smallint/mediumint/int/bigint 1字节/2字节/3字节/4字节/8字节整数,又可分为有符号和无符号两种。这些整数类型的区别仅仅是表示数的范围不同。
float/double 单精度、双精度浮点类型。
decimal(dec) 精确小数类型,相对于float和double不会产生丢失精度的问题。
date 日期类型,不能保存时间。
time 时间类型,不能保存日期。
datetime 日期、时间类型。
timestamp 时间戳类型。
year 年类型,仅仅保存时间的年份。
char 定长字符串类型。
varchar 可变长度字符串类型。
binary 定长二进制字符串类型,它以二进制形式保存字符串。
varbinary 可变长度的二进制字符串类型,它以二进制形式保存字符串。
tinyblob/blob/mediumblob/longblob 1字节/2字节/3字节/4字节的二进制大对象,可用于存储图片,音乐等二进制数据,分别可存储:255B/64KB/16M/4GB的大小。
tinytext/text/mediumtext/longtext 1字节/2字节/3字节/4字节的文本对象,可用于存储超长长度的字符串,分别可存储:255B/64KB/16M/4GB的大小的文本。
enum 枚举类型。
set 集合类型。

2.数据表的修改

首先先创建数据库

CREATE DATABASE cjgl;

USE cjgl;

/*Table structure for table `course` */

DROP TABLE IF EXISTS `course`;

CREATE TABLE `course` (
  `courseID` char(8) NOT NULL,
  `coursename` varchar(20) NOT NULL,
  `totalperiod` tinyint(4) DEFAULT NULL,
  `weekperiod` tinyint(4) DEFAULT NULL,
  `credithour` tinyint(4) DEFAULT NULL,
  `remark` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`courseID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `course` */

insert  into `course`(`courseID`,`coursename`,`totalperiod`,`weekperiod`,`credithour`,`remark`) values ('1','计算机网络',NULL,NULL,NULL,NULL),('2','计算机组成原理',NULL,NULL,NULL,NULL),('3','计算机操作系统',NULL,NULL,NULL,NULL),('4','数据结构',NULL,NULL,NULL,NULL);

/*Table structure for table `courseteacher` */

DROP TABLE IF EXISTS `courseteacher`;

CREATE TABLE `courseteacher` (
  `courseID` char(8) NOT NULL,
  `teacherID` char(8) NOT NULL,
  PRIMARY KEY (`courseID`,`teacherID`),
  KEY `FK_CourseTeacher_Teacher` (`teacherID`),
  CONSTRAINT `FK_CourseTeacher_Course` FOREIGN KEY (`courseID`) REFERENCES `course` (`courseID`),
  CONSTRAINT `FK_CourseTeacher_Teacher` FOREIGN KEY (`teacherID`) REFERENCES `teacher` (`teacherID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `courseteacher` */

insert  into `courseteacher`(`courseID`,`teacherID`) values ('1','1'),('2','2'),('3','3'),('4','4');

/*Table structure for table `grade` */

DROP TABLE IF EXISTS `grade`;

CREATE TABLE `grade` (
  `studentID` char(10) NOT NULL,
  `courseID` char(8) NOT NULL,
  `teacherID` char(8) NOT NULL,
  `grade` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`studentID`,`courseID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `grade` */

insert  into `grade`(`studentID`,`courseID`,`teacherID`,`grade`) values ('1','1','1',88),('1','2','2',90),('2','3','3',NULL),('3','3','3',78),('4','2','2',86),('6','4','4',90);

/*Table structure for table `student` */

DROP TABLE IF EXISTS `student`;

CREATE TABLE `student` (
  `studentID` char(10) NOT NULL DEFAULT '',
  `studentName` varchar(10) NOT NULL,
  `sex` char(2) DEFAULT NULL,
  `birthday` datetime DEFAULT NULL,
  `speciality` varchar(30) DEFAULT NULL,
  `credithour` tinyint(4) NOT NULL,
  `ru_date` char(4) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL,
  `remark` varchar(200) DEFAULT NULL,
  `LoginName` char(20) DEFAULT NULL,
  PRIMARY KEY (`studentID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `student` */

insert  into `student`(`studentID`,`studentName`,`sex`,`birthday`,`speciality`,`credithour`,`ru_date`,`password`,`remark`,`LoginName`) values ('1','曾星宇','男','1998-08-09 00:00:00','计算机',22,NULL,'123456',NULL,NULL),('2','李兴','男','2002-08-05 00:00:00','数学',18,NULL,NULL,NULL,NULL),('3','张裕','女','1998-06-09 00:00:00','计算机',22,NULL,NULL,NULL,NULL),('4','张华','男','1996-12-12 00:00:00','化学',24,NULL,NULL,NULL,NULL),('5','姜丽','女','1997-09-08 00:00:00','化学',23,NULL,NULL,NULL,NULL),('6','孙悟空','男','1999-08-12 00:00:00','数学',21,NULL,NULL,NULL,NULL);

/*Table structure for table `teacher` */

DROP TABLE IF EXISTS `teacher`;

CREATE TABLE `teacher` (
  `teacherID` char(8) NOT NULL,
  `teachername` varchar(10) NOT NULL,
  `sex` char(2) DEFAULT NULL,
  `technicalPost` char(16) DEFAULT NULL,
  `telephone` char(16) DEFAULT NULL,
  `PASSWORD` varchar(20) DEFAULT NULL,
  `remark` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`teacherID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `teacher` */

insert  into `teacher`(`teacherID`,`teachername`,`sex`,`technicalPost`,`telephone`,`PASSWORD`,`remark`) values ('1','赵天宇','男',NULL,NULL,NULL,NULL),('2','苏北','男',NULL,NULL,NULL,NULL),('3','雪儿','女',NULL,NULL,NULL,NULL),('4','张佐恩','男',NULL,NULL,NULL,NULL);

1)向表中添加列

语法:ALTER TABLE 表名 ADD (#列名 ,可以有多个列定义 )

例:在表student中新增一列登录名,列名为LoginName,数据类型为VARCHAR。

ALTER TABLE student ADD LoginName VARCHAR(20);

2)修改列属性

语法:ALTER TABLE 表名 MODIFY 列名 数据类型;

例:将LoginName的类型修改为char类型。

ALTER TABLE student 
MODIFY LoginName CHAR(20) NULL;

3)从表中删除类名

语法:ALTER TABLE 表名 DROP 列名;

例:删除student中的LoginName列。

ALTER TABLE student 
DROP LoginName;

3.数据操作

1)insert into 语句

语法:

INSERT INTO 表名 VALUES (value1, value2, value3,...)

INSERT INTO 表名 (column1, column2, column3,...) VALUES (value1, value2, value3,...)

例:向student表中插入数据

INSERT INTO student VALUES('1','曾星宇','男','1998-8-9','计算机',20,NULL,'123456',NULL,NULL);

2) update 语句

语法:UPDTE 表名 set column1=value,column2=value,..........

例1:在student表中将李兴的所属学院改为数学

UPDATE student SET speciality='数学' WHERE studentName='李兴';

例2:将所有计算机系学生的选课成绩加5分

UPDATE grade SET grade = grade+5
WHERE studentID IN(SELECT studentID FROM student WHERE speciality='计算机');

3) delete from 语句

delete from 语句用于删除指定数据表的记录

语法:delete from 表名 【条件】

例:删除student表

DELETE FROM student;

4.单表查询

1)使用select语句进行单表查询

语法:select column1,column2.....

​ from 要查询的表

# 查询当前MySQL的版本信息
SELECT @@VERSION;
# 查询圆周率常数及其正弦、余弦值
SELECT PI();
SELECT SIN(5);
SELECT COS(5);
# 查询student表的信息
SELECT * FROM student;
# 查询所有学生的学号,姓名和年龄
SELECT studentID,studentName,sex FROM student;

2)使用where子句选择数据

语法:select column1,column2.....

​ from 要查询的表

​ where 条件

例1:查询所有计算机学院的学生学号和姓名

SELECT studentID,studentName
FROM student
WHERE speciality='计算机';

例2:查询student表中所有年龄大于19岁的学生信息

SELECT *
FROM student
WHERE YEAR(CURDATE())-YEAR(birthday)>19;

拓展:MySQL中关于时间的函数

获得当前日期+时间(date + time)函数:NOW()

获得当前日期(date)函数:CURDATE()

YEAR()是获取其年份

当然这只是其中一些,如果还想了解更多可以查询相关的资料

例3:查询student表中所有男生或者年龄大于19岁的学生姓名和年龄

SELECT studentName AS 姓名,YEAR(CURDATE())-YEAR(birthday) AS 年龄
FROM student 
WHERE sex='男' OR YEAR(CURDATE())-YEAR(birthday)>19;

例4:查询grade表中成绩为空的学生学号

SELECT studentID
FROM grade
WHERE grade IS NULL;

3) 模糊查询

在进行模糊查询时需要使用LIKE关键字,下面介绍以下其用法:

  • LIKE 'AB%':返回以“AB”开始的的任意字符串。
  • LIKE '%ABC':返回以“ABC”结束的任意字符串。
  • LIKE '[%]ABC%':返回以“%ABC”开始的任意字符串。
  • LIKE '_ABC':返回以“AB”结束的3个字符的字符串。
  • LIKE '[ABC]%':返回以“A","B","C"开始的任意字符串。

例1:查询所有姓张的学生的姓名,学号和性别

SELECT studentName,studentID,sex
FROM student
WHERE studentName LIKE '张%';

例2:查询所有不姓张的学生姓名和学号

SELECT studentName,studentID
FROM student
WHERE studentName NOT LIKE '张%';

例3:查询姓名中第二个字为丽字的学生信息

SELECT *
FROM student
WHERE studentName LIKE '_丽%';

4) 带查找范围的查询

谓词IN,NOT IN和BETWEEN.....AND,NOT BETWEEN.....AND...可以用来查询属性值在或不在指定范围内的元组。其中,BETWEEN后是范围的上限,AND后是下限。

例1:查询年龄在22~24之间的学生姓名,年龄和所属院系

SELECT studentName AS 姓名,YEAR(CURDATE())-YEAR(birthday) AS 年龄,speciality AS 院系
FROM student
WHERE YEAR(CURDATE())-YEAR(birthday) BETWEEN 22 AND 24;

例2:查询所属院系为数学或者化学的学生信息

SELECT *
FROM student
WHERE speciality IN('数学','化学');
由于篇幅有限,所以还有一些知识没有进行添加,这些没有添加的知识将在下一期进行补充。 希望本篇文章对你有所帮助!!!

第二期地址