一篇文章学会MySQL快速入门!

一、MySQL概述

数据库基本概念

数据库的英文单词: DataBase 简称 : DB

用于存储和管理数据的仓库。

数据库的特点:

  • 持久化存储数据。其实数据库就是一个文件系统
  • 方便存储和管理数据
  • 使用了统一的方式操作数据库 -- SQL

数据持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。 大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存 到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。

持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以 存储在磁盘文件、XML数据文件中。

RDBMS

关系数据库管理系统(Relational Database Management System:RDBMS)是指包括相互联系的逻辑组织和存取这些数据的一套程序 (数据库管理系统软件)。关系数据库管理系统就是管理关系数据库,并将数据进行存取的系统。

常用的关系数据库管理系统产品:MySQL、Oracle、 DB2、SQL Server、Sybase。

SQL

概念:结构化查询语言(Structured Query Language)简称SQL, 结构化查询语言是一种数据库查询和程序设计语言,用于 存取数据以及查询、更新和管理关系数据库系统。

分类

  • DML: Data Manipulation Language 数据操纵语言DML用于查询与修改数据记录,包括如下SQL语句:
    • INSERT:添加数据到数据库中
    • UPDATE:修改数据库中的数据
    • DELETE:删除数据库中的数据
    • SELECT:选择(查询)数据
  • DDL: Data Definition Language 数据定义语言DDL用于定义数据库的结构,比如创建、修改或删除数据库对象,包括如下SQL语句:
    • CREATE TABLE:创建数据库表
    • ALTER TABLE:更改表结构、添加、删除、修改列长度
    • DROP TABLE:删除表
    • CREATE INDEX:在表上建立索引
    • DROP INDEX:删除索引
    • ......
  • DCL: Data Control Language 数据控制语言DCL用来控制数据库的访问,定义数据库的访问权限和安全级别,及创建用户。包括如下SQL语句:
    • GRANT:授予访问权限
    • REVOKE:撤销访问权限
    • COMMIT:提交事务处理
    • ROLLBACK:事务处理回退
    • SAVEPOINT:设置保存点
    • LOCK:对数据库的特定部分进行锁定
    • ......

作用:

1.是一种所有关系型数据库的查询规范,不同的数据库都支持。

2.通用的数据库操作语言,可以用在不同的数据库中。

3.不同的数据库 SQL 语句有一些区别

MySQL 的语法

  • 每条语句以分号结尾,如果在 SQLyog 中不是必须加的。
  • SQL 语句可以单行或多行书写,以分号结尾。
  • 可使用空格和缩进来增强语句的可读性。
  • SQL 中不区分大小写,关键字中认为大写和小写是一样,关键字建议使用大写。
  • 注释:
    -- 单行注释
    
    /* 
    多行注释
    */
    
    # MySQL特有注释
    

 

二、MySQL使用

MySQL安装

Windows安装MySQL5.7.35教程 - 学编程那点事儿 (imyjs.cn)

MySQL基础配置

MySQL服务启动

  • cmd--> services.msc 打开服务的窗口
  • 使用管理员打开cmd
    • net start mysql : 启动mysql的服务
    • net stop mysql:关闭mysql服务

MySQL登录

  • mysql -uroot -p密码
  • mysql -hip -uroot -p连接目标的密码
  • mysql --host=ip --user=root --password=连接目标的密码

MySQL退出

  • exit
  • quit

三、数据处理之查询

基本的SELECT语句

	select        
		字段列表    -- SELECT 标识选择哪些列。
	from
		表名列表    -- FROM 标识从哪个表中选择
	where
		条件列表    -- WHERE 标识从选择的条件
	group by
		分组字段    -- GROUP BY 标识按照哪个字段分组
	having
		分组之后的条件
	order by
		排序       -- ORDER BY 标识按照哪个字段排序 【ASC | DESC】
	limit
		分页限定


			-- 计算列
			/* 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
		 	ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
			* 表达式1:哪个字段需要判断是否为null
			* 如果该字段为null后的替换值。*/
			
			-- 起别名:
			-- as:as也可以省略
			SELECT last_name AS name, commission_pct comm
			FROM employees;
		
			-- 查询指定列
			SELECT Sname FROM Student;  -- 查询Student数据表中Sname列
			
			-- 查询全部列
			SELECT * FROM Course;   -- 查询Course数据表中所有列
			
			-- 查询经过计算的值
			SELECT Sname,2020-Sage AS '出生年份' FROM Student;  
			-- 查询Student数据表中Sname 以及 表达式2020-Sage的值并命名表达式组成的新列为‘出生年份’

			SELECT Sname,'Year of Birth:',2020-Sage,LOWER(Sdept) FROM Student;  
			-- SELECT <目标表达式> 可以是表达式、字符串、或函数

			SELECT Sname NAME,'Year of Birth:' BIRTH,2020-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT FROM Student;  
			-- 不用AS关键字指定别名来表示查询结果的列标题

			-- 消除取值重复的行
			SELECT Sno FROM SC; -- 查询选修了课程的学生学号
			SELECT DISTINCT Sno FROM SC;  -- 去除表中重复行数据

列的别名

紧跟列名,也可以在列名和别名之间加入关键字‘AS’,别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写。

字符串

  • 字符串可以是 SELECT 列表中的一个字符,数字,日期。
  • 日期和字符只能在单引号中出现
  • 每当返回一行时,字符串被输出一次。

显示表结构

使用 DESCRIBE 命令,表示表结构。

条件查询

	1. where子句后跟条件
	2. 运算符
		* > 、< 、<= 、>= 、= 、<>
		* BETWEEN...AND   -- 使用 BETWEEN 运算来显示在一个区间内的值
		* IN( 集合)   -- 使用 IN运算显示列表中的值
		* LIKE:模糊查询  
		-- 使用 LIKE 运算选择类似的值
		-- 选择条件可以包含字符或数字
			* 占位符:
				* _:单个任意字符
				* %:代表零个或多个字符(任意个字符)。
		-- ‘%’和‘-’可以同时使用。
		* IS NULL   -- 使用 IS (NOT) NULL 判断空值。
		* and  或 &&  -- AND 要求并的关系为真。
		* or  或 ||   -- OR 要求或关系为真。
		* not  或 ! -- 取非(反)
		

-- 比较大小 =、>、<、>=、<=、!=、<>、!>、!<、
SELECT Sname FROM Student WHERE Sdept='CS';  -- 从Student数据表查询Sdept列为CS的学生姓名
SELECT Sname,Sage FROM Student WHERE Sage<20;  -- 从Student数据表查询Sage<20的学生姓名及其年龄
SELECT DISTINCT Sno FROM SC WHERE Grade<90;   -- 从SC数据表查询Grade<90的学生学号并去重

-- 确定范围 [NOT] BETWEEN ...AND ...
-- 从Student数据表中查询Sage在20---23之间的学生信息
SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;  

-- 从Student数据表中查询Sage不在20---23之间的学生信息 关键字NOT
SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23;  

-- 确定集合 [NOT] IN...
-- 从Student数据表中查询Sdept为CS,IS,MA的学生名称,性别
SELECT Sname,Ssex FROM Student WHERE Sdept IN ('CS','IS','MA');  

-- 从Student数据表中查询Sdept不为CS,IS,MA的学生名称,性别  关键字NOT
SELECT Sname,Ssex FROM Student WHERE Sdept NOT IN ('CS','IS','MA');  


-- 字符匹配 LIKE谓词 % _ 通配符
-- 如果LIKE后面的匹配串中不含有通配符,则可以用=运算符取代LIKE谓词,用!=或<>运算符取代 NOT LIKE谓词
SELECT * FROM Student WHERE Sno='201215121';  
SELECT * FROM Student WHERE Sno LIKE '201215121';   -- 二者等价

-- 从Student数据表中查询姓刘的学生姓名 学号 性别
SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE '刘%';  

-- 从Student数据表中查询姓欧阳且全名为三个字的学生姓名
SELECT Sname FROM Student WHERE Sname LIKE '欧阳_';  

-- 从Student数据表中查询名字第二个字为阳的学生姓名,学号
SELECT Sname,Sno FROM Student WHERE Sname LIKE '_阳%';  

-- 从Student数据表中查询不姓刘的学生姓名 学号 性别
SELECT Sname,Sno,Ssex FROM Student WHERE Sname NOT LIKE '刘%';  

-- ESCAPE '<换码字符>' 对通配符进行转义
SELECT Cno,Ccredit FROM Course WHERE Cname Like 'DB\_Design' ESCAPE'\';

-- 涉及空值的查询 IS NULL / IS NOT NULL
SELECT * FROM SC WHERE Grade IS NULL;  -- 查询成绩为空的学生学号以及课程号

-- 查询成绩不为空的学生学号以及课程号   注意:IS 不能用=代替
SELECT * FROM SC WHERE Grade IS NOT NULL;  

-- 多重条件查询 逻辑运算符AND OR 优先级: AND>OR
-- 查询计算机系且年龄小于20的学生姓名
-- OEDER BY 子句 对查询结果按照一个或多个属性列的升序ASC或降序DESC排列
SELECT Sname FROM Student WHERE Sdept='CS' AND Sage <20;  

-- 选修课程号为3的学生号及其成绩 并按照成绩降序排列
SELECT Sno,Grade  FROM SC WHERE Cno='3' ORDER BY Grade DESC; 

--  全部学生信息按照所在系的系号升序,同系按照年龄降序排列
SELECT * FROM Student ORDER BY Sdept,Sage DESC; 


--聚集函数
SELECT COUNT(*) AS '总人数' FROM Student; -- 查询学生总人数 
SELECT COUNT(*) AS '总人数' FROM Student; -- AS可省略

-- 查询选课的学生总人数,避免一名学生选择多门课程重复记录 需要DISTINCT去重 (必须在COUNT函数中使用DISTINCT短语)
SELECT COUNT(DISTINCT Sno) FROM SC;  
SELECT MAX(Grade) FROM SC WHERE Cno='1'; -- 查询选择1号课程的最高成绩
SELECT AVG(Grade) FROM SC WHERE Cno='1' ; -- 查询选择1号课程的平均成绩
SELECT SUM(Grade) FROM SC WHERE Sno='201215121'; --查询学号为201215121学生的总成绩
SELECT SUM(Grade) FROM SC,Course WHERE Sno='201215121' AND SC.Cno=Course.Cno; -- 查询学号为201215121学生的选修课程总分数


-- 注意:当聚集函数遇到空值时,除COUNT(*)外,都跳过空值而只处理非空值。
	-- WHERE子句中是不能用聚集函数作为条件表达式的
	-- 聚集函数只能用于SELECT子句和GROUP BY 中的HAVING子句
-- GROUP BY 子句 将查询结果按某一列或多列的值分组,值相等的为一组

SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno;  --  查询各个课程号及其选课人数
-- 该语句对查询结果按照Cno的值分组,所有具有相同Cno的元组为一组,然后对每一组作用聚集函数COUNT函数进行计算,求出该组学生人数

SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) >2;   -- 查询选择了三门课程学生的学生号
-- 该语句先用GROUP BY子句按照Sno进行分组,再用聚集函数COUNT对每一组计数,HAVING则是给出了选择条件,只有满足了选择条件,才会被列出
--注意:
		--WHERE子句与HAVING短语不同在于作用对象不同
		--WHERE子句作用于基本表或视图,从中选择满足条件的元组
		--HAVING短语作用于组,从中选择满足条件的组

-- 查询平均成绩大于90的学生号及其平均成绩
SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade)>90;  

-- 错误!!WHERE子句中是不能用聚集函数作为条件表达式的
SELECT Sno,AVG(Grade) FROM SC WHERE AVG(Grade)>90  GROUP BY Sno; 

-- 查询以DB_开头且倒数第三个字符为i 的课程信息  这里第一个_前有\被转义为普通字符_,后面两个仍为通配符_
SELECT * FROM Course WHERE Cname LIKE 'DB\_%i__' ESCAPE'\';

 

ORDER BY子句

使用 ORDER BY 子句排序

  • ASC(ascend): 升序
  • DESC(descend): 降序

ORDER BY 子句在SELECT语句的结尾。

四、数据处理之增删改

DML(Data Manipulation Language – 数据操纵语言) 可以在下列条件下执行:

  • 向表中插入数据
  • 修改现存数据
  • 删除现存数据

事务是由完成若干项工作的DML语句组成的

1. 添加数据:
	* 语法:
		* insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
		-- 使用这种语法一次只能向表中插入一条数据。
	* 注意:
		1. 列名和值要一一对应。
		2. 如果表名后,不定义列名,则默认给所有列添加值
			insert into 表名 values(值1,值2,...值n);
		3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来
		4.向表中插入空值
			-- 隐式方式: 在列名表中省略该列的值。
			-- 显示方式: 在VALUES 子句中指定空值NULL。
			
2. 删除数据:
	* 语法:
		* delete from 表名 [where 条件]
	* 注意:
		1. 如果不加条件,则删除表中所有记录。
		2. 如果要删除所有记录
			1. delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
			2. TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
3. 修改数据:
	* 语法:
		* update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];

	* 注意:
		1. 如果不加任何条件,则会将表中所有记录全部修改。

五、数据库管理DDL

1. 操作数据库:CRUD
	1. C(Create):创建
		* 创建数据库:
			* create database 数据库名称;
		* 创建数据库,判断不存在,再创建:
			* create database if not exists 数据库名称;
		* 创建数据库,并指定字符集
			* create database 数据库名称 character set 字符集名;

		* 练习: 创建db4数据库,判断是否存在,并制定字符集为gbk
			* create database if not exists db4 character set gbk;
	2. R(Retrieve):查询
		* 查询所有数据库的名称:
			* show databases;
		* 查询某个数据库的字符集:查询某个数据库的创建语句
			* show create database 数据库名称;
	3. U(Update):修改
		* 修改数据库的字符集
			* alter database 数据库名称 character set 字符集名称;
	4. D(Delete):删除
		* 删除数据库
			* drop database 数据库名称;
		* 判断数据库存在,存在再删除
			* drop database if exists 数据库名称;
	5. 使用数据库
		* 查询当前正在使用的数据库名称
			* select database();
		* 使用数据库
			* use 数据库名称;
2. 操作表
	1. C(Create):创建
		1. 语法:
			create table 表名(
				列名1 数据类型1,
				列名2 数据类型2,
				....
				列名n 数据类型n
			);
			* 注意:最后一列,不需要加逗号(,)
			* 数据库类型:
				1. int:整数类型
					* age int,
				2. double:小数类型
					* score double(5,2)
				3. date:日期,只包含年月日,yyyy-MM-dd
				4. datetime:日期,包含年月日时分秒	 yyyy-MM-dd HH:mm:ss
				5. timestamp:时间戳类型	包含年月日时分秒	 yyyy-MM-dd HH:mm:ss	
					* 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值

				6. varchar:字符串
					* name varchar(20):姓名最大20个字符
					* zhangsan 8个字符  张三 2个字符
		2.创建表			
                create table student(
                    id int,
                    name varchar(32),
                    age int ,
                    score double(4,1),
                    birthday date,
                    insert_time timestamp
                );
            * 复制表:
                * create table 表名 like 被复制的表名;	  	
        2. R(Retrieve):查询
            * 查询某个数据库中所有的表名称
                * show tables;
            * 查询表结构
                * desc 表名;
        3. U(Update):修改
            1. 修改表名
                alter table 表名 rename to 新的表名;
            2. 修改表的字符集
                alter table 表名 character set 字符集名称;
            3. 添加一列
                alter table 表名 add 列名 数据类型;
            4. 修改列名称 类型
                alter table 表名 change 列名 新列别 新数据类型;
                alter table 表名 modify 列名 新数据类型;
            5. 删除列
                alter table 表名 drop 列名;
        4. D(Delete):删除
            * drop table 表名;
            * drop table  if exists 表名 ;

六、实例代码

CREATE DATABASE SIMS  -- 创建数据库SIMS
ON PRIMARY(   -- 配置数据库主文件信息
	NAME='SIMS',  --主文件名称
	FILENAME='D:\SIMS\Smis.mdf',	-- 主文件物理存储路径  目标目录必须存在
	SIZE=10MB,	-- 主文件初始大小
	MAXSIZE=50MB,	-- 主文件存储最大值
	FILEGROWTH=5MB)	-- 主文件自增大小
LOG ON(  -- 配置数据库日志文件信息
	NAME='SIMS_LOG',
	FILENAME='D:\SIMS\Smis_Log.ldf',
	SIZE=10MB,
	MAXSIZE=50MB,
	FILEGROWTH=5MB)
	
	
CREATE TABLE Student(  -- 创建Student数据表
	Sno CHAR(9) PRIMARY KEY, -- 创建列Sno 字符型最大值9 设置为主键  列级完整性约束
	Sname CHAR(20) UNIQUE,  -- 创建列Sname 字符型最大值20 设置为唯一性
	Ssex CHAR(2),  -- 创建列Ssex 字符型最大值2 
	Sage SMALLINT,  -- 创建列Sage 短整型
	Sdept CHAR(20)  -- 创建列Sdept 字符型最大值20
	);
	
	
CREATE TABLE Course(  -- 创建Course数据表
	Cno CHAR(4) PRIMARY KEY,
	Cname CHAR(40) NOT NULL,  -- 设置为不可为空值
	Cpno CHAR(4),
	Ccredit SMALLINT,
	FOREIGN KEY(Cpno) REFERENCES Course(Cno)  
    -- 将Cpno设置为外键 参照数据表Course中的Cno列  表级完整性约束 同时说明参照表与被参照表可以为同一表
	);
	
	
CREATE TABLE SC(
	Sno CHAR(9),
	Cno CHAR(4),
	Grade SMALLINT,
	PRIMARY KEY(Sno,Cno),  -- 主键由两个属性构成,必须作为表级完整性进行定义
	FOREIGN KEY(Sno) REFERENCES Student(Sno), -- 将Sno设置为外键 参照数据表Student中的Sno列
	FOREIGN KEY(Cno) REFERENCES Course(Cno) -- 将Cno设置为外键 参照数据表Course中的Cno列
	);

INSERT
INTO Course  --(Cno,Cname)
VALUES('7','C语言',null ,null )  
-- 因为定义Course数据表时将Cpno作为外键,插入数据时应遵循外键完整性约束,
-- 即在保证被参照表Course中被参照列Cno有数据时才可进行对Cpno进行赋值,所以Cpno应为NULL;


UPDATE Course
SET Cpno=6,Ccredit=4  
-- 因为定义Course数据表时将Cpno作为外键,插入数据时应遵循外键完整性约束,
-- 即在更新Course数据表中Cpno列时,须保证被参照表Course中被参照列Cno存在该数据时才可进行对Cpno进行赋值,否则ERROR;
WHERE Cno=7


ALTER TABLE Student  -- 修改数据表Student
ADD S_time DATE; -- 添加新列S_time 数据类型为日期型

ALTER TABLE Student  -- 修改数据表Student
ALTER COLUMN Sage INT;  -- 修改Sage列属性 数据类型为INT



ALTER TABLE Course  -- 修改数据表Course
ADD UNIQUE(Cname)  -- 增加唯一性给Cname列

CREATE UNIQUE INDEX Stusno  -- 创建唯一索引Stusno
ON Student(Sno); -- 基于Student数据表的Sno列

CREATE UNIQUE INDEX Course  -- 创建唯一索引Course
ON Course(Cno);  -- 基于Course数据表的Cno列

CREATE UNIQUE INDEX SCno  -- 创建唯一索引SCno
ON SC(Sno ASC,Cno DESC);  -- 基于Course数据表的Cno列降序 --基于Student数据表的Sno列升序

ALTER INDEX Course RENAME TO Coucno  -- 提示RENAME附近有语法错误

EXEC sp_rename 'Course.Course', 'Coucno', 'index'   
-- EXEC sp_rename '表名.旧索引名', '新索引名', 'index'
-- 或 EXEC sp_rename @objname = '表名.旧索引名', @newname = '新索引名', @objtype = 'index'
DROP INDEX Course; --删除索引Course

 

微信关注

本站为非盈利性站点,所有资源、文章等仅供学习参考,并不贩卖软件且不存在任何商业目的及用途,如果您访问和下载某文件,表示您同意只将此文件用于参考、学习而非其他用途。
本站所发布的一切软件资源、文章内容、页面内容可能整理来自于互联网,在此郑重声明本站仅限用于学习和研究目的;并告知用户不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
如果本站相关内容有侵犯到您的合法权益,请仔细阅读本站公布的投诉指引页相关内容联系我,依法依规进行处理!
作者:理想
链接:https://www.imyjs.cn/archives/367
THE END
二维码
一篇文章学会MySQL快速入门!
一、MySQL概述 数据库基本概念 数据库的英文单词: ……
<<上一篇
下一篇>>
文章目录
关闭
目 录