SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。 大家对mysql数据库有多少了解?当前大量的网站使用php语言,那么对应的就是mysql数据库,这里就为大家分享一下MySQL数据库的相关知识,希望能帮助到大家。目录 一、数据库概要 1.4.1. 什么是范式 1.4.2. 三大范式 1.4.3. 范式与效率 1.3.1、关系型数据库 1.3.2、非关系型数据库 1.1.1、人工处理阶段 1.1.2、文件系统 1.1.3、数据库管理系统 1.1、发展历史 1.2、常见数据库技术品牌、服务与架构 1.3、数据库分类 1.4、数据库规范化
二、MySQL介绍 2.1、MySQL概要 2.2、系统特性 2.3、存储引擎
三、快速安装运行MySQL数据库 3.1.1、设置mysql远程访问 3.1.2、修改mysql用户密码 3.1.2、安装服务 3.1、使用绿色版 3.2、使用安装版
四、使用GUI操作MySQL 4.5.1、添加数据 4.5.2、删除数据 4.5.3、修改表结构 4.5.4、外键 4.5.5、唯一键 4.1、关系型数据库的典型概念 4.2、登录数据库 4.3、创建数据库 4.4、创建表 4.5、管理数据 4.6、上机练习
五、使用SQL访问MySQL数据库 5.5.1、添加列 5.5.2、修改列 5.5.3、删除列 5.5.4、重命名表 5.5.5、删除表 5.5.6、删除数据库 5.5.7、一千行MySQL笔记 5.5.8、常用的SQL 5.2.1、表达式与条件查询 5.2.2、聚合函数 5.0.1、新建数据库 5.0.2、新建表 5.0.3、新建查询 5.0、定义学生表Stu 5.1、增加数据 5.2、查询数据 5.3、删除数据 5.4、更新数据 5.5、修改表
六、下载程序、帮助、视频
随着移动互联网的结束与人工智能的到来大数据变成越来越重要,下一个成功者应该是拥有海量数据的,数据与数据库你应该知道。 一、数据库概要 数据库(Database)是存储与管理数据的软件系统,就像一个存入数据的物流仓库。 在商业领域,信息就意味着商机,取得信息的一个非常重要的途径就是对数据进行分析处理,这就催生了各种专业的数据管理软件,数据库就是其中的一种。当然,数据库管理系统也不是一下子就建立起来,它也是经过了不断的丰富和发展,才有了今天的模样。 1.1、发展历史 1.1.1、人工处理阶段 在20世纪50年代中期以前的计算机诞生初期,其处理能力很有限,只能够完成一些简单的运算,数据处理能力也很有限,这使得当时的计算机只能够用于科学和工程计算。计算机上没有专用的管理数据的软件,数据由计算机或处理它的程序自行携带。当数据的存储格式、读写路径或方法发生变化的时候,其处理程序也必须要做出相应的改变以保持程序的正确性。 1.1.2、文件系统 20世纪50年代后期到60年代中期,随着硬件和软件技术的发展,计算机不仅用于科学计算,还大量用于商业管理中。在这一时期,数据和程序在存储位置上已经完全分开,数据被单独组织成文件保存到外部存储设备上,这样数据文件就可以为多个不同的程序在不同的时间所使用。 虽然程序和数据在存储位置上分开了,而且操作系统也可以帮助我们对完成了数据的存储位置和存取路径的管理,但是程序设计仍然受到数据存储格式和方法的影响,不能够完全独立于数据,而且数据的冗余较大。 1.1.3、数据库管理系统 从20世纪70年代以来,计算机软硬件技术取得了飞跃式的发展,这一时期最主要的发展就是产生了真正意义上的数据库管理系统,它使得应用程序和数据之间真正的实现的接口统一、数据共享等,这样应用程序都可以按照统一的方式直接操作数据,也就是应用程序和数据都具有了高度的独立性。 1.2、常见数据库技术品牌、服务与架构 发展了这么多年市场上出现了许多的数据库系统,最强的个人认为是Oracle,当然还有许多如:DB2、Microsoft SQL Server、MySQL、SyBase等,下图列出常见数据库技术品牌、服务与架构。 1.3、数据库分类 数据库通常分为层次式数据库、网络式数据库和关系式数据库三种。 而不同的数据库是按不同的数据结构来联系和组织的。 而在当今的互联网中,最常见的数据库模型主要是两种,即关系型数据库和非关系型数据库。 1.3.1、关系型数据库 当前在成熟应用且服务与各种系统的主力数据库还是关系型数据库。 代表:Oracle、SQL Server、MySQL 1.3.2、非关系型数据库 随着时代的进步与发展的需要,非关系型数据库应运而生。 代表:Redis、Mongodb NoSQL数据库在存储速度与灵活性方面有优势,也常用于缓存。 1.4、数据库规范化 经过一系列的步骤,我们现在终于将客户的需求转换为数据表并确立这些表之间的关系,那么是否我们现在就可以在开发中使用呢?答案否定的,为什么呢!同一个项目,很多人参与了需求的分析,数据库的设计,不同的人具有不同的想法,不同的部门具有不同的业务需求,我们以此设计的数据库将不可避免的包含大量相同的数据,在结构上也有可能产生冲突,在开发中造成不便。 1.4.1. 什么是范式 要设计规范化的数据库,就要求我们根据数据库设计范式――也就是数据库设计的规范原则来做。范式可以指导我们更好地设计数据库的表结构,减少冗余的数据,借此可以提高数据库的存储效率,数据完整性和可扩展性。 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。 1.4.2. 三大范式 第一范式(1NF) 所谓第一范式(1NF)是指在关系模型中,对列添加的一个规范要求,所有的列都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。 例如:表1-1中,其中”工程地址”列还可以细分为省份,城市等。在国外,更多的程序把”姓名”列也分成2列,即”姓”和“名”。 虽然第一范式要求各列要保存原子性,不能再分,但是这种要求和我们的需求是相关联的,如上表中我们对”工程地址”没有省份,城市这样方面的查询和应用需求,则不需拆分,”姓名”列也是同样如此。 表1-1 原始表 工程号 | 工程名称 | 工程地址 | 员工编号 | 员工名称 | 薪资待遇 | 职务 | P001 | 港珠澳大桥 | 广东珠海 | E0001 | Jack | 6000/月 | 工人 | P001 | 港珠澳大桥 | 广东珠海 | E0002 | Join | 7800/月 | 工人 | P001 | 港珠澳大桥 | 广东珠海 | E0003 | Apple | 8000/月 | 高级技工 | P002 | 南海航天 | 海南三亚 | E0001 | Jack | 5000/月 | 工人 |
第二范式(2NF) 在1NF的基础上,非Key属性必须完全依赖于主键。第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。 第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。 例如:表1-1中,一个表描述了工程信息,员工信息等。这样就造成了大量数据的重复。按照第二范式,我们可以将表1-1拆分成表1-2和表1-3: l 工程信息表:(工程编号,工程名称,工程地址): 表1-2 工程信息表 工程编号 | 工程名称 | 工程地址 | P001 | 港珠澳大桥 | 广东珠海 | P002 | 南海航天 | 海南三亚 |
l 员工信息表(员工编号,员工名称,职务,薪资水平): 表1-3 员工信息表 员工编号 | 员工姓名 | 职务 | 薪资水平 | E0001 | Jack | 工人 | 3000/月 | E0002 | Join | 工人 | 3000/月 | E0003 | Apple | 高级技工 | 6000/月 |
这样,表1-1就变成了两张表,每个表只描述一件事,清晰明了。 第三范式(3NF) 第三范式是在第二范式基础上,更进一层,第三范式的目标就是确保表中各列与主键列直接相关,而不是间接相关。即各列与主键列都是一种直接依赖关系,则满足第三范式。 第三范式要求各列与主键列直接相关,我们可以这样理解,假设张三是李四的兵,王五则是张三的兵,这时王五是不是李四的兵呢?从这个关系中我们可以看出,王五也是李四的兵,因为王五依赖于张三,而张三是李四的兵,所以王五也是。这中间就存在一种间接依赖的关系而非我们第三范式中强调的直接依赖。 现在我们来看看在第二范式的讲解中,我们将表1-1拆分成了两张表。这两个表是否符合第三范式呢。在员工信息表中包含:”员工编号”、”员工名称”、”职务”、”薪资水平”,而我们知道,薪资水平是有职务决定,这里”薪资水平”通过”职务”与员工相关,则不符合第三范式。我们需要将员工信息表进一步拆分,如下: l 员工信息表:员工编号,员工名称,职务 l 职务表:职务编号,职务名称,薪资水平 现在我们已经了解了数据库规范化设计的三大范式,下面我们再来看看对表1-1优化后的数据表: 员工信息表(Employee) 员工编号 | 员工姓名 | 职务编号 | E0001 | Jack | 1 | E0002 | Join | 1 | E0003 | Apple | 2 |
工程信息表(ProjectInfo) 工程编号 | 工程名称 | 工程地址 | P001 | 港珠澳大桥 | 广东珠海 | P002 | 南海航天 | 海南三亚 |
职务表(Duty) 职务编号 | 职务名称 | 工资待遇 | 1 | 工人 | 3000/月 | 2 | 高级技工 | 6000/月 |
工程参与人员记录表(Project_ Employee_info) 编号 | 工程编号 | 人员编号 | 1 | P001 | E0001 | 2 | P001 | E0002 | 3 | P002 | E0003 |
通过对比我们发现,表多了,关系复杂了,查询数据变的麻烦了,编程中的难度也提高了,但是各个表中内容更清晰了,重复的数据少了,更新和维护变的更容易了,哪么如何平衡这种矛盾呢? 1.4.3. 范式与效率 在我们设计数据库时,设计人员、客户、开发人员通常对数据库的设计有一定的矛盾,客户更喜欢方便,清晰的结果,开发人员也希望数据库关系比较简单,降低开发难度,而设计人员则需要应用三大范式对数据库进行严格规范化,减少数据冗余,提高数据库可维护性和扩展性。由此可以看出,为了满足三大范式,我们数据库设计将会与客户、开发人员产生分歧,所以在实际的数据库设计中,我们不能一味的追求规范化,既要考虑三大范式,减少数据冗余和各种数据库操作异常,又要充分考虑到数据库的性能问题,允许适当的数据库冗余。 二、MySQL介绍 2.1、MySQL概要 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。 MySQL官网:https://www.mysql.com/ MySQL下载:https://www.mysql.com/downloads/ 2.2、系统特性 1.使用 C和 C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性。 2.支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。 3.为多种编程语言提供了 API。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和 Tcl 等。 4.支持多线程,充分利用 CPU 资源。 5.优化的 SQL查询算法,有效地提高查询速度。 6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。 7.提供多语言支持,常见的编码如中文的 GB 2312、BIG5,日文的 Shift_JIS等都可以用作数据表名和数据列名。 8.提供 TCP/IP、ODBC 和 JDBC等多种数据库连接途径。 9.提供用于管理、检查、优化数据库操作的管理工具。 10.支持大型的数据库。可以处理拥有上千万条记录的大型数据库。 11.支持多种存储引擎。 12.MySQL 是开源的,所以你不需要支付额外的费用。 13.MySQL 使用标准的 SQL数据语言形式。 14.MySQL 对 PHP 有很好的支持,PHP是目前最流行的 Web 开发语言。 15.MySQL是可以定制的,采用了 GPL协议,你可以修改源码来开发自己的 MySQL 系统。 16.在线 DDL/更改功能,数据架构支持动态应用程序和开发人员灵活性(5.6新增) 17.复制全局事务标识,可支持自我修复式集群(5.6新增) 18.复制无崩溃从机,可提高可用性(5.6新增) 19.复制多线程从机,可提高性能(5.6新增) 20.3倍更快的性能(5.7新增) 21.新的优化器(5.7新增) 22.原生JSON支持(5.7新增) 23.多源复制(5.7新增) 24.GIS的空间扩展(5.7新增) 2.3、存储引擎 MySQL数据库根据应用的需要准备了不同的引擎,不同的引擎侧重点不一样,区别如下: MyISAM MySQL 5.0 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务 InnoDB 事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5.5 起成为默认数据库引擎 BDB源 自 Berkeley DB,事务型数据库的另一种选择,支持Commit 和Rollback 等其他事务特性 Memory 所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在 MySQL 重新启动时丢失 Merge 将一定数量的 MyISAM 表联合而成一个整体,在超大规模数据存储时很有用\ Archive 非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive 拥有高效的插入速度,但其对查询的支持相对较差 Federated 将不同的 MySQL 服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用 Cluster/NDB 高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用 CSV 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个 .csv 文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV 存储引擎不支持索引。 BlackHole 黑洞引擎,写入的任何数据都会消失,一般用于记录 binlog 做复制的中继 EXAMPLE 存储引擎是一个不做任何事情的存根引擎。它的目的是作为 MySQL 源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE 存储引擎不支持编索引。 另外,MySQL 的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。
三、快速安装运行MySQL数据库 MySQL以前一直是开源免费的,被Oracle收购后有些变化:以前的版本都是免费的,社区版按GPL协议开源免费,商业版提供更加丰富的功能,但收费。 社区版的下载地址:https://dev.mysql.com/downloads/ (免费) 企业版的下载地址:https://www.mysql.com/downloads/(收费) 3.1、使用绿色版 为了方便快捷的使用MySQL我已经准备好了一个绿化了的MySQL,解压后就可以直接使用,不需要任何配置。 下载地址1:https://pan.baidu.com/s/1hrS5KUw 密码: sug9 下载地址2:http://www.jb51.net/softs/594937.html 下载后直接解压: 点击启动PStart.exe这是一个自定义菜单的小工具,为了整理资源用的。 里面有两个MySQL的绿色版软件5.0,5.5 Navicat for MySQL是一个数据库客户端管理工具 点击启动PStart.exe后的结果如下:
点击启动MySQL服务,运行Navicat for MySQL即可。 *注意:上面的PStart只是一个整理文档资料的工具,并非必要,如果启动时有错误或为空时,可以直接关闭,直接启动MySQL服务,如:
mysql_start.bat用于启动MySql数据库,mysql_stop.bat用于关闭MySql数据库。 开发工具的启动方式也一样,如下所示: navicat.exe用于启动Navicat数据库客户端,最好发送快捷方式到桌面,省去每次打开文件夹的麻烦。 3.1.1、设置mysql远程访问 执行mysql 命令进入mysql 命令模式,执行如下SQL代码
mysql> use mysql;
mysql> GRANT ALL ON *.* TO admin@'%' IDENTIFIED BY 'admin' WITH GRANT OPTION; #这句话的意思 ,允许任何IP地址(上面的 % 就是这个意思)的电脑 用admin帐户 和密码(admin)来访问这个MySQL Server #必须加类似这样的帐户,才可以远程登陆。 root帐户是无法远程登陆的,只可以本地登陆 3.1.2、修改mysql用户密码 1.mysqladmin命令 格式如下(其中,USER为用户名,PASSWORD为新密码): mysqladmin -u USER -p password PASSWORD
该命令之后会提示输入原密码,输入正确后即可修改。 例如,设置root用户的密码为123456,则 mysqladmin -u root -p password 123456
2.UPDATE user 语句 这种方式必须是先用root帐户登入mysql,然后执行:
UPDATE user SET password=PASSWORD('123456') WHERE user='root';FLUSH PRIVILEGES; 3.SET PASSWORD 语句 这种方式也需要先用root命令登入mysql,然后执行: SET PASSWORD FOR root=PASSWORD('123456');
4.root密码丢失的情况 使用 MySQL 自带的一个工具"MySQL GUI Tools",我一直用的是5.0版本的。 在安装目录中运行一个程序 MySQLSystemTrayMonitor.exe,运行完后在系统托盘会出现图标。如果MySQL服务尚未安装,则不会出现,可先通过Action>Manage MySQL Instances 先配置和安装服务。如果已经安装服务,鼠标右键点击后,会出现"Configure Instance"的菜单。点击后出现如下MySQL Administrator窗口: 假如原来的服务配置都正常的情况下,选中左侧列表中的“启动变量”,并在相应的右侧标签中选择“安全”,勾选“禁用grant表”,然后“应用更改”。 并回到左侧的“服务器控制”,和右侧相应的“开始/停止服务”标签,点击启动服务。此时,连接mysql已经不需要用户名和密码了,你可以修改root密码。 3.1.2、安装服务 首先我们先进入mysql的安装目录下的bin目录、之后打开DOS命令窗口,进入该目录下(一定要进入该目录,否则操作错误)
执行DOS命令: 输入命令:mysqld --install,之后出现如下界面。提示安装服务成功。 注意是mysqld --install不是mysql --install 如果要卸载服务,可以输入如下命令:mysqld --remove。出现如下界面。提示移除服务成功。 3.2、使用安装版 MySQL5.5.27_64位安装包下载地址1: https://pan.baidu.com/s/1minwz1m 密码: ispn MySQL5.5.56_64位安装包下载地址2: http://www.jb51.net/softs/363920.html MySQL5.7.17安装包官网下载地址: https://dev.mysql.com/downloads/windows/installer/ 选择自定义: 安装的组件信息: 服务器软件目录:
数据目录: 点击install安装即可:
配置:
机器类型
是否支持事务功能:
innodb表空间:
连接数量:
字符集设定:
配置windows管理相关:
配置安全选项,设置管理员的用户名与密码:
最后执行配置即可:
配置后,会启动服务。
新版的MySQL安装包大了很多,安装过程也有些不一样。 四、使用GUI操作MySQL4.1、关系型数据库的典型概念 数据库 databse:数据的仓库 表 table:数据是保存在表内,保存在一个表内的数据,应该具有相同的数据格式 行:行用于记录数据 记录:行内的数据 列:列用于规定数据格式 字段:数据的某个列 SQL:用来管理数据的语言。结构化查询语言(SQL,Structured Query Language) 主键:唯一地标识表中的某一条记录,不能空,不能重复 4.2、登录数据库 *连接本地数据库时需要启动服务 4.3、创建数据库 4.4、创建表 列的类型: 数字类型 整数: tinyint、smallint、mediumint、int、bigint 浮点数: float、double、real、decimal 日期和时间: date、time、datetime、timestamp、year 字符串类型 字符串: char、varchar 文本: tinytext、text、mediumtext、longtext 二进制(可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob 列的约束: 4.5、管理数据4.5.1、添加数据 双击新建好的表名,打开表,就可以添加数据了。 4.5.2、删除数据 4.5.3、修改表结构 如果想向现有的表中添加一列,则可以修改表结构: 4.5.4、外键 上面这个学生表是有些问题的: a)、不便于修改,比如教室换成了305教室,则每个学员都要修改 b)、数据冗余,大量的重复数据 将表拆分成两个,分解后问题解决,如下图所示: 这里的班级编号就是外键,可以空,但不为空时他的值一定在要引用表中存在。如果学生表中的编号是主键这里就不应该重复,外键则可以重复也允许为空。 添加外键: 班级表: 学生表: 添加外键: 删除与更新时可以实现级联更新与删除,当更新设置为CASCADE时主键变化引用主键的表也会一起变化,当删除设置为CASCADE时删除主键表,引用的记录都将被删除。 4.5.5、唯一键 唯一键,也称(唯一约束),和主键的区别是可以为有多个唯一键并且值可以为NULL,但NULL也不能重复,也就是说只能有一行的值为NULL。它会隐式的创建唯一索引。 设置方法:索引 --> 添加索引 --> 栏位名 添加你想设置唯一约束的列 --> 索引类型选择 Unique
#查询
select id,name from yuangong
select * from yuangong
select * from yuangong where salary>5000
#增加
INSERT into yuangong(name,salary,bumenId,mobile) value('张为剑',2190.6,2,19889007867);
INSERT into yuangong(name,salary,bumenId,mobile) value('张娜拉',9871.6,1,19889007777);
#修改
update yuangong set salary=salary+1 where id=7
#删除
INSERT into yuangong(name,salary,bumenId,mobile) value('张拉拉',9871.6,1,19889007777);
delete from yuangong where id=8 4.6、上机练习 1、请创建一个新的数据库叫HR,在HR数据库中添加EMP表,EMP表的表结构如下所示 EMP表:员工信息 № | 名称 | 类型 | 描述 | 1 | EMPNO | int | 雇员的编号,主键,自动增长 | 2 | ENAME | VARCHAR(10) | 雇员的姓名,由10位字符所组成,不为空,唯一键 | 3 | JOB | VARCHAR(9) | 雇员的职位 | 4 | MGR | int | 雇员对应的领导编号,领导也是雇员,可空(可删除这一列) | 5 | HIREDATE | TimeStamp | 雇员的雇佣日期,默认为当前日期 | 6 | SAL | Numeric(7,2) | 基本工资,其中有两位小数,五位整数,一共是七位 | 7 | COMM | Numeric(7,2) | 奖金,佣金 | 8 | DEPTNO | int | 雇员所在的部门编号,可空,外键fk_deptno | 9 | DETAIL | Text | 备注,可空 |
Dept:部门表 № | 名称 | 类型 | 描述 | 1 | DeptNO | int | 部门的编号,主键,自动增长 | 2 | DNAME | VARCHAR(10) | 部门名,由50位字符所组成,不为空,唯一键 | 3 | DTel | VARCHAR(10) | 电话,可空 |
2、根据上面的表结构完成表的创建,表名为emp 3、在表中添加5条以上的数据 4、完成下列查询要求 4.1查询所有员工信息 4.2查询所有工资介于2000-5000间的员工姓名、职位与工资 4.3查询所有姓“张”的员工 4.4 按工资降序查询出2014年到2015年间入职的员工 4.5、将工资普遍上调20% 4.6、将工资低于3000元的员工奖金修改为工资的2.8倍 4.7、删除编号为5或者姓“王”的员工 五、使用SQL访问MySQL数据库 5.0、定义学生表Stu (id编号,name姓名,sex性别,age年龄,...) 5.0.1、新建数据库 5.0.2、新建表 5.0.3、新建查询 5.1、增加数据 insert 语句可以用来将一行或多行数据插到数据库表中, 使用的一般形式如下: Insert into 表名(字段列表) values (值列表); insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...); insert into students values(NULL, "张三", "男", 20, "18889009876"); 有时我们只需要插入部分数据, 或者不按照列的顺序进行插入, 可以使用这样的形式进行插入: insert into students (name, sex, age) values("李四", "女", 21);
#1、添加数据
insert into stu(name,sex,age) values('张学友','男',18);
insert into stu(name,sex,age) values('张娜拉','女',73);
insert into stu(name,sex,age) values('张家辉','男',23);
insert into stu(name,sex,age) values('张汇美','女',85);
insert into stu(name,sex,age) values('张铁林','男',35); 5.2、查询数据 select 语句常用来根据一定的查询规则到数据库中获取数据, 其基本的用法为: select 字段名 from 表名称 [查询条件]; 查询学生表中的所有信息:select * from students; 查询学生表中所有的name与age信息:select name, age from students; 也可以使用通配符 * 查询表中所有的内容, 语句: select * from students;
#1、添加数据
insert into stu(name,sex,age) values('张学友','男',18);
insert into stu(name,sex,age) values('张娜拉','女',73);
insert into stu(name,sex,age) values('张家辉','男',23);
insert into stu(name,sex,age) values('张汇美','女',85);
insert into stu(name,sex,age) values('张铁林','男',35);
insert into stu(name,sex,age) values('张国立','男',99);
#2、查询数据
#2.1、查询所有学生
select id,name,sex,age from stu;
#2.2、查询年龄大于80岁女学生
select id,name,sex,age from stu where age>80 and sex='女'; 结果: 5.2.1、表达式与条件查询 where 关键词用于指定查询条件, 用法形式为: select 列名称 from 表名称 where 条件; 以查询所有性别为女的信息为例, 输入查询语句: select * from students where sex="女"; where 子句不仅仅支持 "where 列名 = 值" 这种名等于值的查询形式, 对一般的比较运算的运算符都是支持的, 例如 =、>、<、>=、<、!= 以及一些扩展运算符 is [not] null、in、like 等等。 还可以对查询条件使用 or 和 and 进行组合查询, 以后还会学到更加高级的条件查询方式, 这里不再多做介绍。 示例: 查询年龄在21岁以上的所有人信息: select * from students where age > 21; 查询名字中带有 "王" 字的所有人信息: select * from students where name like "%王%"; 查询id小于5且年龄大于20的所有人信息: select * from students where id<5 and age>20; 5.2.2、聚合函数 获得学生总人数:select count(*) from students 获得学生平均分:select avg(mark) from students 获得最高成绩:select max(mark) from students 获得最低成绩:select min(mark) from students 获得学生总成绩:select sum(mark) from students 5.3、删除数据 delete from 表名 [删除条件]; 删除表中所有数据:delete from students; 删除id为10的行: delete from students where id=10; 删除所有年龄小于88岁的数据: delete from students where age<88;
#1、添加数据-----
insert into stu(name,sex,age) values('张学友','男',18);
insert into stu(name,sex,age) values('张娜拉','女',73);
insert into stu(name,sex,age) values('张家辉','男',23);
insert into stu(name,sex,age) values('张汇美','女',85);
insert into stu(name,sex,age) values('张铁林','男',35);
insert into stu(name,sex,age) values('张国立','男',99);
#2、查询数据-----
#2.1、查询所有学生
select id,name,sex,age from stu;
#2.2、查询年龄大于80岁女学生
select id,name,sex,age from stu where age>80 and sex='女';
#2.3、查询平均年龄
select AVG(age) from stu where sex='女';
#3、修改数据-----
#3.1、将编号为1的学生年龄加大1岁
update stu set age=age+1 where id=1;
#3.2、将80岁以上的女学生年龄修改为90岁且将姓名后增加“老人”
#CONCAT(str1,str2,...) 连接字符串
update stu set age=90,name=CONCAT(name,'(老人)') where age>=80 and sex='女';
#3.3、将编号4的学生名字修改为张汇美
update stu set name='张汇美' where id=4;
#4、删除数据-----
#4.1、删除年龄大于70岁的学生
delete from stu where age>70;
#4.2、删除所有学生
delete from stu; 5.4、更新数据 update 语句可用来修改表中的数据, 基本的使用形式为: update 表名称 set 列名称=新值 where 更新条件; Update 表名 set 字段=值 列表 更新条件 使用示例: 将id为5的手机号改为默认的"-": update students set tel=default where id=5; 将所有人的年龄增加1: update students set age=age+1; 将手机号为 13723887766 的姓名改为 "张果", 年龄改为 19: update students set name="张果", age=19 where tel="13723887766"; 5.5、修改表 alter table 语句用于创建后对表的修改, 基础用法如下: 5.5.1、添加列 基本形式: alter table 表名 add 列名 列数据类型 [after 插入位置]; 示例: 在表的最后追加列 address: alter table students add address char(60); 在名为 age 的列后插入列 birthday: alter table students add birthday date after age; 5.5.2、修改列 基本形式: alter table 表名 change 列名称 列新名称 新数据类型; 示例: 将表 tel 列改名为 phone: alter table students change tel phone char(12) default "-"; 将 name 列的数据类型改为 char(9): alter table students change name name char(9) not null; 5.5.3、删除列 基本形式: alter table 表名 drop 列名称; 示例: 删除 age 列: alter table students drop age; 5.5.4、重命名表 基本形式: alter table 表名 rename 新表名; 示例: 重命名 students 表为temp: alter table students rename temp; 5.5.5、删除表 基本形式: drop table 表名; 示例: 删除students表: drop table students; 5.5.6、删除数据库 基本形式: drop database 数据库名; 示例: 删除lcoa数据库: drop database lcoa; 5.5.7、一千行MySQL笔记
/* 启动MySQL */
net start mysql
/* 连接与断开服务器 */
mysql -h 地址 -P 端口 -u 用户名 -p 密码
/* 跳过权限验证登录MySQL */
mysqld --skip-grant-tables
-- 修改root密码
密码加密函数password()
update mysql.user set password=password('root');
SHOW PROCESSLIST -- 显示哪些线程正在运行
SHOW VARIABLES --
/* 数据库操作 */ ------------------
-- 查看当前数据库
select database();
-- 显示当前时间、用户名、数据库版本
select now(), user(), version();
-- 创建库
create database[ if not exists] 数据库名 数据库选项
数据库选项:
CHARACTER SET charset_name
COLLATE collation_name
-- 查看已有库
show databases[ like 'pattern']
-- 查看当前库信息
show create database 数据库名
-- 修改库的选项信息
alter database 库名 选项信息
-- 删除库
drop database[ if exists] 数据库名
同时删除该数据库相关的目录及其目录内容
/* 表的操作 */ ------------------
-- 创建表
create [temporary] table[ if not exists] [库名.]表名 ( 表的结构定义 )[ 表选项]
每个字段必须有数据类型
最后一个字段后不能有逗号
temporary 临时表,会话结束时表自动消失
对于字段的定义:
字段名 数据类型 [NOT NULL |