目次
一、数据库提要
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表空间:
新版的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 | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string'] -- 表选项 -- 字符集 CHARSET = charset_name 如果表没有设定,则运用数据库字符集 -- 存储引擎 ENGINE = engine_name 表在治理数据时采纳的差别的数据组织,组织差别会致使处置惩罚体式格局、供应的特征操纵等差别 罕见的引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive 差别的引擎在保存表的组织和数据时采纳差别的体式格局 MyISAM表文件寄义:.frm表定义,.MYD表数据,.MYI表索引 InnoDB表文件寄义:.frm表定义,表空间数据和日记文件 SHOW ENGINES -- 显现存储引擎的状况信息 SHOW ENGINE 引擎名 {LOGS|STATUS} -- 显现存储引擎的日记或状况信息 -- 数据文件目次 DATA DIRECTORY = '目次' -- 索引文件目次 INDEX DIRECTORY = '目次' -- 表解释 COMMENT = 'string' -- 分区选项 PARTITION BY ... (细致见手册) -- 检察一切表 SHOW TABLES[ LIKE 'pattern'] SHOW TABLES FROM 表名 -- 检察表机构 SHOW CREATE TABLE 表名 (信息更细致) DESC 表名 / DESCRIBE 表名 / EXPLAIN 表名 / SHOW COLUMNS FROM 表名 [LIKE 'PATTERN'] SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern'] -- 修正表 -- 修正表自身的选项 ALTER TABLE 表名 表的选项 EG: ALTER TABLE 表名 ENGINE=MYISAM; -- 对表举行重定名 RENAME TABLE 原表名 TO 新表名 RENAME TABLE 原表名 TO 库名.表名 (可将表挪动到另一个数据库) -- RENAME能够交流两个表名 -- 修正表的字段机构 ALTER TABLE 表名 操纵名 -- 操纵名 ADD[ COLUMN] 字段名 -- 增添字段 AFTER 字段名 -- 示意增添在该字段名背面 FIRST -- 示意增添在第一个 ADD PRIMARY KEY(字段名) -- 建立主键 ADD UNIQUE [索引名] (字段名)-- 建立唯一索引 ADD INDEX [索引名] (字段名) -- 建立一般索引 ADD DROP[ COLUMN] 字段名 -- 删除字段 MODIFY[ COLUMN] 字段名 字段属性 -- 支撑对字段属性举行修正,不能修正字段名(一切原有属性也需写上) CHANGE[ COLUMN] 原字段名 新字段名 字段属性 -- 支撑对字段名修正 DROP PRIMARY KEY -- 删除主键(删除主键前需删除其AUTO_INCREMENT属性) DROP INDEX 索引名 -- 删除索引 DROP FOREIGN KEY 外键 -- 删除外键 -- 删除表 DROP TABLE[ IF EXISTS] 表名 ... -- 清空表数据 TRUNCATE [TABLE] 表名 -- 复制表组织 CREATE TABLE 表名 LIKE 要复制的表名 -- 复制表组织和数据 CREATE TABLE 表名 [AS] SELECT * FROM 要复制的表名 -- 搜检表是不是有毛病 CHECK TABLE tbl_name [, tbl_name] ... [option] ... -- 优化表 OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... -- 修复表 REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM] -- 剖析表 ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... /* 数据操纵 */ ------------------ -- 增 INSERT [INTO] 表名 [(字段列表)] VALUES (值列表)[, (值列表), ...] -- 如果要插进去的值列表包含一切字段而且递次一致,则能够省略字段列表。 -- 可同时插进去多条数据纪录! REPLACE 与 INSERT 完全一样,可交换。 INSERT [INTO] 表名 SET 字段名=值[, 字段名=值, ...] -- 查 SELECT 字段列表 FROM 表名[ 其他子句] -- 可来自多个表的多个字段 -- 其他子句能够不运用 -- 字段列表能够用*替代,示意一切字段 -- 删 DELETE FROM 表名[ 删除条件子句] 没有条件子句,则会删除悉数 -- 改 UPDATE 表名 SET 字段名=新值[, 字段名=新值] [更新条件] /* 字符集编码 */ ------------------ -- MySQL、数据库、表、字段都可设置编码 -- 数据编码与客户端编码不需一致 SHOW VARIABLES LIKE 'character_set_%' -- 检察一切字符集编码项 character_set_client 客户端向效劳器发送数据时运用的编码 character_set_results 效劳器端将效果返回给客户端所运用的编码 character_set_connection 衔接层编码 SET 变量名 = 变量值 set character_set_client = gbk; set character_set_results = gbk; set character_set_connection = gbk; SET NAMES GBK; -- 相当于完成以上三个设置 -- 校正集 校正集用以排序 SHOW CHARACTER SET [LIKE 'pattern']/SHOW CHARSET [LIKE 'pattern'] 检察一切字符集 SHOW COLLATION [LIKE 'pattern'] 检察一切校正集 charset 字符集编码 设置字符集编码 collate 校正集编码 设置校正集编码 /* 数据范例(列范例) */ ------------------ 1. 数值范例 -- a. 整型 ---------- 范例 字节 局限(有标记位) tinyint 1字节 -128 ~ 127 无标记位:0 ~ 255 smallint 2字节 -32768 ~ 32767 mediumint 3字节 -8388608 ~ 8388607 int 4字节 bigint 8字节 int(M) M示意总位数 - 默许存在标记位,unsigned 属性修正 - 显现宽度,如果某个数不够定义字段时设置的位数,则前面以0补填,zerofill 属性修正 例:int(5) 插进去一个数'123',补填后为'00123' - 在满足请求的状况下,越小越好。 - 1示意bool值真,0示意bool值假。MySQL没有布尔范例,经由历程整型0和1示意。经常使用tinyint(1)示意布尔型。 -- b. 浮点型 ---------- 范例 字节 局限 float(单精度) 4字节 double(双精度) 8字节 浮点型既支撑标记位 unsigned 属性,也支撑显现宽度 zerofill 属性。 差别于整型,前后均会补填0. 定义浮点型时,需指定总位数和小数位数。 float(M, D) double(M, D) M示意总位数,D示意小数位数。 M和D的大小会决议浮点数的局限。差别于整型的牢固局限。 M既示意总位数(不包含小数点和正负号),也示意显现宽度(一切显现标记均包含)。 支撑科学计数法示意。 浮点数示意近似值。 -- c. 定点数 ---------- decimal -- 可变长度 decimal(M, D) M也示意总位数,D示意小数位数。 保存一个准确的数值,不会发作数据的转变,差别于浮点数的四舍五入。 将浮点数转换为字符串来保存,每9位数字保存为4个字节。 2. 字符串范例 -- a. char, varchar ---------- char 定长字符串,速率快,但糟蹋空间 varchar 变长字符串,速率慢,但节约空间 M示意能存储的最大长度,此长度是字符数,非字节数。 差别的编码,所占用的空间差别。 char,最多255个字符,与编码无关。 varchar,最多65535字符,与编码有关。 一条有用纪录最大不能超过65535个字节。 utf8 最大为21844个字符,gbk 最大为32766个字符,latin1 最大为65532个字符 varchar 是变长的,须要应用存储空间保存 varchar 的长度,如果数据小于255个字节,则采纳一个字节来保存长度,反之须要两个字节来保存。 varchar 的最大有用长度由最大行大小和运用的字符集肯定。 最大有用长度是65532字节,因为在varchar存字符串时,第一个字节是空的,不存在任何数据,然后还需两个字节来寄存字符串的长度,所以有用长度是64432-1-2=65532字节。 例:若一个表定义为 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; 问N的最大值是若干? 答:(65535-1-2-4-30*3)/3 -- b. blob, text ---------- blob 二进制字符串(字节字符串) tinyblob, blob, mediumblob, longblob text 非二进制字符串(字符字符串) tinytext, text, mediumtext, longtext text 在定义时,不须要定义长度,也不会盘算总长度。 text 范例在定义时,不可给default值 -- c. binary, varbinary ---------- 相似于char和varchar,用于保存二进制字符串,也就是保存字节字符串而非字符字符串。 char, varchar, text 对应 binary, varbinary, blob. 3. 日期时候范例 平常用整型保存时候戳,因为PHP能够很轻易的将时候戳举行花样化。 datetime 8字节 日期及时候 1000-01-01 00:00:00 到 9999-12-31 23:59:59 date 3字节 日期 1000-01-01 到 9999-12-31 timestamp 4字节 时候戳 19700101000000 到 2038-01-19 03:14:07 time 3字节 时候 -838:59:59 到 838:59:59 year 1字节 年份 1901 - 2155 datetime “YYYY-MM-DD hh:mm:ss” timestamp “YY-MM-DD hh:mm:ss” “YYYYMMDDhhmmss” “YYMMDDhhmmss” YYYYMMDDhhmmss YYMMDDhhmmss date “YYYY-MM-DD” “YY-MM-DD” “YYYYMMDD” “YYMMDD” YYYYMMDD YYMMDD time “hh:mm:ss” “hhmmss” hhmmss year “YYYY” “YY” YYYY YY 4. 罗列和鸠合 -- 罗列(enum) ---------- enum(val1, val2, val3...) 在已知的值中举行单选。最大数量为65535. 罗列值在保存时,以2个字节的整型(smallint)保存。每一个罗列值,按保存的位置递次,从1最先一一递增。 表现为字符串范例,存储倒是整型。 NULL值的索引是NULL。 空字符串毛病值的索引值是0。 -- 鸠合(set) ---------- set(val1, val2, val3...) create table tab ( gender set('男', '女', '无') ); insert into tab values ('男, 女'); 最多能够有64个差别的成员。以bigint存储,共8个字节。采用位运算的情势。 当建立表时,SET成员值的尾部空格将自动被删除。 /* 挑选范例 */ -- PHP角度 1. 功用满足 2. 存储空间只管小,处置惩罚效力更高 3. 斟酌兼容题目 -- IP存储 ---------- 1. 只需存储,可用字符串 2. 如果需盘算,查找等,可存储为4个字节的无标记int,即unsigned 1) PHP函数转换 ip2long可转换为整型,但会涌现照顾标记题目。需花样化为无标记的整型。 应用sprintf函数花样化字符串 sprintf("%u", ip2long('192.168.3.134')); 然后用long2ip将整型转回IP字符串 2) MySQL函数转换(无标记整型,UNSIGNED) INET_ATON('127.0.0.1') 将IP转为整型 INET_NTOA(2130706433) 将整型转为IP /* 列属性(列束缚) */ ------------------ 1. 主键 - 能唯一标识纪录的字段,能够作为主键。 - 一个表只能有一个主键。 - 主键具有唯一性。 - 声明字段时,用 primary key 标识。 也能够在字段列表今后声明 例:create table tab ( id int, stu varchar(10), primary key (id)); - 主键字段的值不能为null。 - 主键能够由多个字段合营组成。此时须要在字段列表后声明的要领。 例:create table tab ( id int, stu varchar(10), age int, primary key (stu, age)); 2. unique 唯一索引(唯一束缚) 使得某字段的值也不能反复。 3. null 束缚 null不是数据范例,是列的一个属性。 示意当前线是不是可以为null,示意什么都没有。 null, 许可为空。默许。 not null, 不许可为空。 insert into tab values (null, 'val'); -- 此时示意将第一个字段的值设为null, 取决于该字段是不是许可为null 4. default 默许值属性 当前字段的默许值。 insert into tab values (default, 'val'); -- 此时示意强迫运用默许值。 create table tab ( add_time timestamp default current_timestamp ); -- 示意将当前时候的时候戳设为默许值。 current_date, current_time 5. auto_increment 自动增进束缚 自动增进必需为索引(主键或unique) 只能存在一个字段为自动增进。 默许为1最先自动增进。能够经由历程表属性 auto_increment = x举行设置,或 alter table tbl auto_increment = x; 6. comment 解释 例:create table tab ( id int ) comment '解释内容'; 7. foreign key 外键束缚 用于限定主表与从表数据完全性。 alter table t1 add constraint `t1_t2_fk` foreign key (t1_id) references t2(id); -- 将表t1的t1_id外键关联到表t2的id字段。 -- 每一个外键都有一个名字,能够经由历程 constraint 指定 存在外键的表,称之为从表(子表),外键指向的表,称之为主表(父表)。 作用:坚持数据一致性,完全性,重要目标是掌握存储在外键表(从表)中的数据。 MySQL中,能够对InnoDB引擎运用外键束缚: 语法: foreign key (外键字段) references 主表名 (关联字段) [主表纪录删除时的行动] [主表纪录更新时的行动] 此时须要检测一个从表的外键须要束缚为主表的已存在的值。外键在没有关联的状况下,能够设置为null.条件是该外键列,没有not null。 能够不指定主表纪录变动或更新时的行动,那末此时主表的操纵被谢绝。 如果指定了 on update 或 on delete:在删除或更新时,有以下几个操纵能够挑选: 1. cascade,级联操纵。主表数据被更新(主键值更新),从表也被更新(外键值更新)。主表纪录被删除,从表相干纪录也被删除。 2. set null,设置为null。主表数据被更新(主键值更新),从表的外键被设置为null。主表纪录被删除,从表相干纪录外键被设置成null。但注重,请求该外键列,没有not null属性束缚。 3. restrict,谢绝父表删除和更新。 注重,外键只被InnoDB存储引擎所支撑。其他引擎是不支撑的。 /* 建表范例 */ ------------------ -- Normal Format, NF - 每一个表保存一个实体信息 - 每一个具有一个ID字段作为主键 - ID主键 + 原子表 -- 1NF, 第一范式 字段不能再分,就满足第一范式。 -- 2NF, 第二范式 满足第一范式的条件下,不能涌现部份依靠。 消弭相符主键便能够防备部份依靠。增添单列关键字。 -- 3NF, 第三范式 满足第二范式的条件下,不能涌现通报依靠。 某个字段依靠于主键,而有其他字段依靠于该字段。这就是通报依靠。 将一个实体信息的数据放在一个表内完成。 /* select */ ------------------ select [all|distinct] select_expr from -> where -> group by [算计函数] -> having -> order by -> limit a. select_expr -- 能够用 * 示意一切字段。 select * from tb; -- 能够运用表达式(盘算公式、函数挪用、字段也是个表达式) select stu, 29+25, now() from tb; -- 可以为每一个列运用别号。适用于简化列标识,防备多个列标识符反复。 - 运用 as 关键字,也可省略 as. select stu+10 as add10 from tb; b. from 子句 用于标识查询泉源。 -- 可以为表起别号。运用as关键字。 select * from tb1 as tt, tb2 as bb; -- from子句后,能够同时涌现多个表。 -- 多个表会横向叠加到一同,而数据会组成一个笛卡尔积。 select * from tb1, tb2; c. where 子句 -- 从from取得的数据源中举行挑选。 -- 整型1示意真,0示意假。 -- 表达式由运算符和运算数组成。 -- 运算数:变量(字段)、值、函数返回值 -- 运算符: =, <=>, <>, !=, <=, <, >=, >, !, &&, ||, in (not) null, (not) like, (not) in, (not) between and, is (not), and, or, not, xor is/is not 加上ture/false/unknown,磨练某个值的真假 <=>与<>功用雷同,<=>可用于null比较 d. group by 子句, 分组子句 group by 字段/别号 [排序体式格局] 分组后会举行排序。升序:ASC,降序:DESC 以下[算计函数]需合营 group by 运用: count 返回差别的非NULL值数量 count(*)、count(字段) sum 乞降 max 求最大值 min 求最小值 avg 求平均值 group_concat 返回带有来自一个组的衔接的非NULL值的字符串效果。组内字符串衔接。 e. having 子句,条件子句 与 where 功用、用法雷同,实行机遇差别。 where 在最先时实行检测数据,对原数据举行过滤。 having 对挑选出的效果再次举行过滤。 having 字段必需是查询出来的,where 字段必需是数据表存在的。 where 不能够运用字段的别号,having 能够。因为实行WHERE代码时,能够还没有肯定列值。 where 不能够运用算计函数。平常需用算计函数才会用 having SQL规范请求HAVING必需援用GROUP BY子句中的列或用于算计函数中的列。 f. order by 子句,排序子句 order by 排序字段/别号 排序体式格局 [,排序字段/别号 排序体式格局]... 升序:ASC,降序:DESC 支撑多个字段的排序。 g. limit 子句,限定效果数量子句 仅对处置惩罚好的效果举行数量限定。将处置惩罚好的效果的看做是一个鸠合,依据纪录涌现的递次,索引从0最先。 limit 肇端位置, 猎取条数 省略第一个参数,示意从索引0最先。limit 猎取条数 h. distinct, all 选项 distinct 去除反复纪录 默许为 all, 悉数纪录 /* UNION */ ------------------ 将多个select查询的效果组合成一个效果鸠合。 SELECT ... UNION [ALL|DISTINCT] SELECT ... 默许 DISTINCT 体式格局,即一切返回的行都是唯一的 发起,对每一个SELECT查询加上小括号包裹。 ORDER BY 排序时,需加上 LIMIT 举行连系。 须要各select查询的字段数量一样。 每一个select查询的字段列表(数量、范例)应一致,因为效果中的字段名以第一条select语句为准。 /* 子查询 */ ------------------ - 子查询需用括号包裹。 -- from型 from后请求是一个表,必需给子查询效果取个别号。 - 简化每一个查询内的条件。 - from型需将效果生成一个临时表格,可用以原表的锁定的开释。 - 子查询返回一个表,表型子查询。 select * from (select * from tb where id>0) as subfrom where id>1; -- where型 - 子查询返回一个值,标量子查询。 - 不须要给子查询取别号。 - where子查询内的表,不能直接用以更新。 select * from tb where money = (select max(money) from tb); -- 列子查询 如果子查询效果返回的是一列。 运用 in 或 not in 完成查询 exists 和 not exists 条件 如果子查询返回数据,则返回1或0。经常使用于推断条件。 select column1 from t1 where exists (select * from t2); -- 行子查询 查询条件是一个行。 select * from t1 where (id, gender) in (select id, gender from t2); 行组织符:(col1, col2, ...) 或 ROW(col1, col2, ...) 行组织符通经常使用于与对能返回两个或两个以上列的子查询举行比较。 -- 特别运算符 != all() 相当于 not in = some() 相当于 in。any 是 some 的别号 != some() 不等同于 not in,不即是个中某一个。 all, some 能够合营其他运算符一同运用。 /* 衔接查询(join) */ ------------------ 将多个表的字段举行衔接,能够指定衔接条件。 -- 内衔接(inner join) - 默许就是内衔接,可省略inner。 - 只需数据存在时才发送衔接。即衔接效果不能涌现空行。 on 示意衔接条件。其条件表达式与where相似。也能够省略条件(示意条件永远为真) 也可用where示意衔接条件。 另有 using, 但需字段名雷同。 using(字段名) -- 交织衔接 cross join 即,没有条件的内衔接。 select * from tb1 cross join tb2; -- 外衔接(outer join) - 如果数据不存在,也会涌如今衔接效果中。 -- 左外衔接 left join 如果数据不存在,左表纪录会涌现,而右表为null添补 -- 右外衔接 right join 如果数据不存在,右表纪录会涌现,而左表为null添补 -- 天然衔接(natural join) 自动推断衔接条件完成衔接。 相当于省略了using,会自动查找雷同字段名。 natural join natural left join natural right join select info.id, info.name, info.stu_num, extra_info.hobby, extra_info.sex from info, extra_info where info.stu_num = extra_info.stu_id; /* 导入导出 */ ------------------ select * into outfile 文件地点 [掌握花样] from 表名; -- 导出表数据 load data [local] infile 文件地点 [replace|ignore] into table 表名 [掌握花样]; -- 导入数据 生成的数据默许的分隔符是制表符 local未指定,则数据文件必需在效劳器上 replace 和 ignore 关键词掌握对现有的唯一键纪录的反复的处置惩罚 -- 掌握花样 fields 掌握字段花样 默许:fields terminated by '\t' enclosed by '' escaped by '\\' terminated by 'string' -- 停止 enclosed by 'char' -- 包裹 escaped by 'char' -- 转义 -- 示例: SELECT a,b,a+b INTO OUTFILE '/tmp/result.text' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table; lines 掌握行花样 默许:lines terminated by '\n' terminated by 'string' -- 停止 /* insert */ ------------------ select语句取得的数据能够用insert插进去。 能够省略对列的指定,请求 values () 括号内,供应给了依据列递次涌现的一切字段的值。 或许运用set语法。 insert into tbl_name set field=value,...; 能够一次性运用多个值,采纳(), (), ();的情势。 insert into tbl_name values (), (), (); 能够在列值指定时,运用表达式。 insert into tbl_name values (field_value, 10+10, now()); 能够运用一个特别值 default,示意该列运用默许值。 insert into tbl_name values (field_value, default); 能够经由历程一个查询的效果,作为须要插进去的值。 insert into tbl_name select ...; 能够指定在插进去的值涌现主键(或唯一索引)争执时,更新其他非主键列的信息。 insert into tbl_name values/set/select on duplicate key update 字段=值, …; /* delete */ ------------------ DELETE FROM tbl_name [WHERE where_definition] [ORDER BY ...] [LIMIT row_count] 依据条件删除 指定删除的最多纪录数。Limit 能够经由历程排序条件删除。order by + limit 支撑多表删除,运用相似衔接语法。 delete from 须要删除数据多表1,表2 using 表衔接操纵 条件。 /* truncate */ ------------------ TRUNCATE [TABLE] tbl_name 清空数据 删除重修表 区分: 1,truncate 是删除表再建立,delete 是逐条删除 2,truncate 重置auto_increment的值。而delete不会 3,truncate 不晓得删除了几条,而delete晓得。 4,当被用于带分区的表时,truncate 会保存分区 /* 备份与复原 */ ------------------ 备份,将数据的组织与表内数据保存起来。 应用 mysqldump 指令完成。 -- 导出 1. 导出一张表 mysqldump -u用户名 -p暗码 库名 表名 > 文件名(D:/a.sql) 2. 导出多张表 mysqldump -u用户名 -p暗码 库名 表1 表2 表3 > 文件名(D:/a.sql) 3. 导出一切表 mysqldump -u用户名 -p暗码 库名 > 文件名(D:/a.sql) 4. 导出一个库 mysqldump -u用户名 -p暗码 -B 库名 > 文件名(D:/a.sql) 能够-w照顾备份条件 -- 导入 1. 在登录mysql的状况下: source 备份文件 2. 在不登录的状况下 mysql -u用户名 -p暗码 库名 < 备份文件 /* 视图 */ ------------------ 什么是视图: 视图是一个假造表,其内容由查询定义。同实在的表一样,视图包含一系列带有称号的列和行数据。然则,视图并不在数据库中以存储的数据值集情势存在。行和列数据来自在定义视图的查询所援用的表,而且在援用视图时动态生成。 视图具有表组织文件,但不存在数据文件。 对个中所援用的基本表来讲,视图的作用相似于挑选。定义视图的挑选能够来自当前或别的数据库的一个或多个表,或许别的视图。经由历程视图举行查询没有任何限定,经由历程它们举行数据修正时的限定也很少。 视图是存储在数据库中的查询的sql语句,它重要出于两种缘由:平安缘由,视图能够隐蔽一些数据,如:社会保险基金表,能够用视图只显现姓名,地点,而不显现社会保险号和工资数等,另一缘由是可以使庞杂的查询易于明白和运用。 -- 建立视图 CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement - 视图名必需唯一,同时不能与表重名。 - 视图能够运用select语句查询到的列名,也能够自身指定响应的列名。 - 能够指定视图实行的算法,经由历程ALGORITHM指定。 - column_list如果存在,则数量必需即是SELECT语句检索的列数 -- 检察组织 SHOW CREATE VIEW view_name -- 删除视图 - 删除视图后,数据依旧存在。 - 可同时删除多个视图。 DROP VIEW [IF EXISTS] view_name ... -- 修正视图组织 - 平常不修正视图,因为不是一切的更新视图都邑映射到表上。 ALTER VIEW view_name [(column_list)] AS select_statement -- 视图作用 1. 简化营业逻辑 2. 对客户端隐蔽实在的表组织 -- 视图算法(ALGORITHM) MERGE 兼并 将视图的查询语句,与外部查询须要先兼并再实行! TEMPTABLE 临时表 将视图实行终了后,组成临时表,再做外层查询! UNDEFINED 未定义(默许),指的是MySQL自立去挑选响应的算法。 /* 事宜(transaction) */ ------------------ 事宜是指逻辑上的一组操纵,组成这组操纵的各个单位,要不全胜利要不全失利。 - 支撑一连SQL的团体胜利或团体打消。 - 事宜是数据库在数据晚自习方面的一个功用。 - 须要应用 InnoDB 或 BDB 存储引擎,对自动提交的特征支撑完成。 - InnoDB被称为事宜平安型引擎。 -- 事宜开启 START TRANSACTION; 或许 BEGIN; 开启事宜后,一切被实行的SQL语句均被认作当前事宜内的SQL语句。 -- 事宜提交 COMMIT; -- 事宜回滚 ROLLBACK; 如果部份操纵发作题目,映射到事宜开启前。 -- 事宜的特征 1. 原子性(Atomicity) 事宜是一个不可支解的工作单位,事宜中的操纵要么都发作,要么都不发作。 2. 一致性(Consistency) 事宜前后数据的完全性必需坚持一致。 - 事宜最先和终了时,外部数据一致 - 在全部事宜历程当中,操纵是一连的 3. 断绝性(Isolation) 多个用户并发接见数据库时,一个用户的事宜不能被别的用户的事物所滋扰,多个并发事宜之间的数据要互相断绝。 4. 耐久性(Durability) 一个事宜一旦被提交,它对数据库中的数据转变就是永远性的。 -- 事宜的完成 1. 请求是事宜支撑的表范例 2. 实行一组相干的操纵前开启事宜 3. 整组操纵完成后,都胜利,则提交;如果存在失利,挑选回滚,则会回到事宜最先的备份点。 -- 事宜的道理 应用InnoDB的自动提交(autocommit)特征完成。 一般的MySQL实行语句后,当前的数据提交操纵都可被其他客户端可见。 而事宜是临时封闭“自动提交”机制,须要commit提交耐久化数据操纵。 -- 注重 1. 数据定义言语(DDL)语句不能被回滚,比方建立或作废数据库的语句,和建立、作废或变动表或存储的子递次的语句。 2. 事宜不能被嵌套 -- 保存点 SAVEPOINT 保存点称号 -- 设置一个事宜保存点 ROLLBACK TO SAVEPOINT 保存点称号 -- 回滚到保存点 RELEASE SAVEPOINT 保存点称号 -- 删除保存点 -- InnoDB自动提交特征设置 SET autocommit = 0|1; 0示意封闭自动提交,1示意开启自动提交。 - 如果封闭了,那一般操纵的效果对其他客户端也不可见,须要commit提交后才耐久化数据操纵。 - 也能够封闭自动提交来开启事宜。但与START TRANSACTION差别的是, SET autocommit是永远转变效劳器的设置,直到下次再次修正该设置。(针对当前衔接) 而START TRANSACTION纪录开启前的状况,而一旦事宜提交或回滚后就须要再次开启事宜。(针对当前事宜) /* 锁表 */ 表锁定只用于防备别的客户端举行不正当地读取和写入 MyISAM 支撑表锁,InnoDB 支撑行锁 -- 锁定 LOCK TABLES tbl_name [AS alias] -- 解锁 UNLOCK TABLES /* 触发器 */ ------------------ 触发递次是与表有关的定名数据库对象,当该表涌现特定事宜时,将激该死对象 监听:纪录的增添、修正、删除。 -- 建立触发器 CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt 参数: trigger_time是触发递次的行动时候。它能够是 before 或 after,以指明触发递次是在激活它的语句之前或今后触发。 trigger_event指清楚明了激活触发递次的语句的范例 INSERT:将新行插进去表时激活触发递次 UPDATE:变动某一行时激活触发递次 DELETE:从表中删除某一行时激活触发递次 tbl_name:监听的表,必需是永远性的表,不能将触发递次与TEMPORARY表或视图关联起来。 trigger_stmt:当触发递次激活时实行的语句。实行多个语句,可运用BEGIN...END复合语句组织 -- 删除 DROP TRIGGER [schema_name.]trigger_name 能够运用old和new替代旧的和新的数据 更新操纵,更新前是old,更新后是new. 删除操纵,只需old. 增添操纵,只需new. -- 注重 1. 关于具有雷同触发递次行动时候和事宜的给定表,不能有两个触发递次。 -- 字符衔接函数 concat(str1[, str2,...]) -- 分支语句 if 条件 then 实行语句 elseif 条件 then 实行语句 else 实行语句 end if; -- 修正最外层语句终了符 delimiter 自定义终了标记 SQL语句 自定义终了标记 delimiter ; -- 修正回本来的分号 -- 语句块包裹 begin 语句块 end -- 特别的实行 1. 只需增添纪录,就会触发递次。 2. Insert into on duplicate key update 语法会触发: 如果没有反复纪录,会触发 before insert, after insert; 如果有反复纪录并更新,会触发 before insert, before update, after update; 如果有反复纪录然则没有发作更新,则触发 before insert, before update 3. Replace 语法 如果有纪录,则实行 before insert, before delete, after delete, after insert /* SQL编程 */ ------------------ --// 局部变量 ---------- -- 变量声明 declare var_name[,...] type [default value] 这个语句被用来声明局部变量。要给变量供应一个默许值,请包含一个default子句。值能够被指定为一个表达式,不须要为一个常数。如果没有default子句,初始值为null。 -- 赋值 运用 set 和 select into 语句为变量赋值。 - 注重:在函数内是能够运用全局变量(用户自定义的变量) --// 全局变量 ---------- -- 定义、赋值 set 语句能够定义并为变量赋值。 set @var = value; 也能够运用select into语句为变量初始化并赋值。如许请求select语句只能返回一行,然则能够是多个字段,就意味着同时为多个变量举行赋值,变量的数量须要与查询的列数一致。 还能够把赋值语句看做一个表达式,经由历程select实行完成。此时为了防备=被看成关联运算符对待,运用:=替代。(set语句能够运用= 和 :=)。 select @var:=20; select @v1:=id, @v2=name from t1 limit 1; select * from tbl_name where @var:=30; select into 能够将表中查询取得的数据赋给变量。 -| select max(height) into @max_height from tb; -- 自定义变量名 为了防备select语句中,用户自定义的变量与体系标识符(平常是字段名)争执,用户自定义变量在变量名前运用@作为最先标记。 @var=10; - 变量被定义后,在全部会话周期都有用(登录到退出) --// 掌握组织 ---------- -- if语句 if search_condition then statement_list [elseif search_condition then statement_list] ... [else statement_list] end if; -- case语句 CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END -- while轮回 [begin_label:] while search_condition do statement_list end while [end_label]; - 如果须要在轮回内提早停止 while轮回,则须要运用标签;标签须要成对涌现。 -- 退出轮回 退出全部轮回 leave 退出当前轮回 iterate 经由历程退出的标签决议退出哪一个轮回 --// 内置函数 ---------- -- 数值函数 abs(x) -- 绝对值 abs(-10.9) = 10 format(x, d) -- 花样化千分位数值 format(1234567.456, 2) = 1,234,567.46 ceil(x) -- 向上取整 ceil(10.1) = 11 floor(x) -- 向下取整 floor (10.1) = 10 round(x) -- 四舍五入去整 mod(m, n) -- m%n m mod n 求余 10%3=1 pi() -- 取得圆周率 pow(m, n) -- m^n sqrt(x) -- 算术平方根 rand() -- 随机数 truncate(x, d) -- 截取d位小数 -- 时候日期函数 now(), current_timestamp(); -- 当前日期时候 current_date(); -- 当前日期 current_time(); -- 当前时候 date('yyyy-mm-dd hh:ii:ss'); -- 猎取日期部份 time('yyyy-mm-dd hh:ii:ss'); -- 猎取时候部份 date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j'); -- 花样化时候 unix_timestamp(); -- 取得unix时候戳 from_unixtime(); -- 从时候戳取得时候 -- 字符串函数 length(string) -- string长度,字节 char_length(string) -- string的字符个数 substring(str, position [,length]) -- 从str的position最先,取length个字符 replace(str ,search_str ,replace_str) -- 在str顶用replace_str替代search_str instr(string ,substring) -- 返回substring初次在string中涌现的位置 concat(string [,...]) -- 衔接字串 charset(str) -- 返回字串字符集 lcase(string) -- 转换成小写 left(string, length) -- 从string2中的左侧起取length个字符 load_file(file_name) -- 从文件读取内容 locate(substring, string [,start_position]) -- 同instr,但可指定最先位置 lpad(string, length, pad) -- 反复用pad加在string开首,直到字串长度为length ltrim(string) -- 去除前端空格 repeat(string, count) -- 反复count次 rpad(string, length, pad) --在str后用pad补充,直到长度为length rtrim(string) -- 去除后端空格 strcmp(string1 ,string2) -- 逐字符比较两字串大小 -- 流程函数 case when [condition] then result [when [condition] then result ...] [else result] end 多分支 if(expr1,expr2,expr3) 双分支。 -- 聚合函数 count() sum(); max(); min(); avg(); group_concat() -- 其他经常使用函数 md5(); default(); --// 存储函数,自定义函数 ---------- -- 新建 CREATE FUNCTION function_name (参数列表) RETURNS 返回值范例 函数体 - 函数名,应当正当的标识符,而且不应当与已有的关键字争执。 - 一个函数应当属于某个数据库,能够运用db_name.funciton_name的情势实行当前函数所属数据库,不然为当前数据库。 - 参数部份,由"参数名"和"参数范例"组成。多个参数用逗号离隔。 - 函数体由多条可用的mysql语句,流程掌握,变量声明等语句组成。 - 多条语句应当运用 begin...end 语句块包含。 - 肯定要有 return 返回值语句。 -- 删除 DROP FUNCTION [IF EXISTS] function_name; -- 检察 SHOW FUNCTION STATUS LIKE 'partten' SHOW CREATE FUNCTION function_name; -- 修正 ALTER FUNCTION function_name 函数选项 --// 存储历程,自定义功用 ---------- -- 定义 存储存储历程 是一段代码(历程),存储在数据库中的sql组成。 一个存储历程通经常使用于完成一段营业逻辑,比方报名,交班费,定单入库等。 而一个函数平常专注与某个功用,视为其他递次效劳的,须要在其他语句中挪用函数才够,而存储历程不能被其他挪用,是自身实行 经由历程call实行。 -- 建立 CREATE PROCEDURE sp_name (参数列表) 历程体 参数列表:差别于函数的参数列表,须要指明参数范例 IN,示意输入型 OUT,示意输出型 INOUT,示意混合型 注重,没有返回值。 /* 存储历程 */ ------------------ 存储历程是一段可实行性代码的鸠合。比拟函数,更倾向于营业逻辑。 挪用:CALL 历程名 -- 注重 - 没有返回值。 - 只能零丁挪用,不可夹杂在其他语句中 -- 参数 IN|OUT|INOUT 参数名 数据范例 IN 输入:在挪用历程当中,将数据输入到历程体内部的参数 OUT 输出:在挪用历程当中,将历程体处置惩罚完的效果返回到客户端 INOUT 输入输出:既可输入,也可输出 -- 语法 CREATE PROCEDURE 历程名 (参数列表) BEGIN 历程体 END /* 用户和权限治理 */ ------------------ 用户信息表:mysql.user -- 革新权限 FLUSH PRIVILEGES -- 增添用户 CREATE USER 用户名 IDENTIFIED BY [PASSWORD] 暗码(字符串) - 必需具有mysql数据库的全局CREATE USER权限,或具有INSERT权限。 - 只能建立用户,不能给予权限。 - 用户名,注重引号:如 'user_name'@'192.168.1.1' - 暗码也需引号,纯数字暗码也要加引号 - 要在纯文本中指定暗码,需疏忽PASSWORD关键词。要把暗码指定为由PASSWORD()函数返回的混编值,需包含关键字PASSWORD -- 重定名用户 RENAME USER old_user TO new_user -- 设置暗码 SET PASSWORD = PASSWORD('暗码') -- 为当前用户设置暗码 SET PASSWORD FOR 用户名 = PASSWORD('暗码') -- 为指定用户设置暗码 -- 删除用户 DROP USER 用户名 -- 分派权限/增添用户 GRANT 权限列表 ON 表名 TO 用户名 [IDENTIFIED BY [PASSWORD] 'password'] - all privileges 示意一切权限 - *.* 示意一切库的一切表 - 库名.表名 示意某库下面的某表 -- 检察权限 SHOW GRANTS FOR 用户名 -- 检察当前用户权限 SHOW GRANTS; 或 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR CURRENT_USER(); -- 取消权限 REVOKE 权限列表 ON 表名 FROM 用户名 REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用户名 -- 打消一切权限 -- 权限层级 -- 要运用GRANT或REVOKE,您必需具有GRANT OPTION权限,而且您必需用于您正在授与或打消的权限。 全局层级:全局权限适用于一个给定效劳器中的一切数据库,mysql.user GRANT ALL ON *.*和 REVOKE ALL ON *.*只授与和打消全局权限。 数据库层级:数据库权限适用于一个给定数据库中的一切目标,mysql.db, mysql.host GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授与和打消数据库权限。 表层级:表权限适用于一个给定表中的一切列,mysql.talbes_priv GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授与和打消表权限。 列层级:列权限适用于一个给定表中的单一列,mysql.columns_priv 当运用REVOKE时,您必需指定与被受权列雷同的列。 -- 权限列表 ALL [PRIVILEGES] -- 设置除GRANT OPTION以外的一切简朴权限 ALTER -- 许可运用ALTER TABLE ALTER ROUTINE -- 变动或作废已存储的子递次 CREATE -- 许可运用CREATE TABLE CREATE ROUTINE -- 建立已存储的子递次 CREATE TEMPORARY TABLES -- 许可运用CREATE TEMPORARY TABLE CREATE USER -- 许可运用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。 CREATE VIEW -- 许可运用CREATE VIEW DELETE -- 许可运用DELETE DROP -- 许可运用DROP TABLE EXECUTE -- 许可用户运转已存储的子递次 FILE -- 许可运用SELECT...INTO OUTFILE和LOAD DATA INFILE INDEX -- 许可运用CREATE INDEX和DROP INDEX INSERT -- 许可运用INSERT LOCK TABLES -- 许可对您具有SELECT权限的表运用LOCK TABLES PROCESS -- 许可运用SHOW FULL PROCESSLIST REFERENCES -- 未被实行 RELOAD -- 许可运用FLUSH REPLICATION CLIENT -- 许可用户讯问隶属效劳器或主效劳器的地点 REPLICATION SLAVE -- 用于复制型隶属效劳器(从主效劳器中读取二进制日记事宜) SELECT -- 许可运用SELECT SHOW DATABASES -- 显现一切数据库 SHOW VIEW -- 许可运用SHOW CREATE VIEW SHUTDOWN -- 许可运用mysqladmin shutdown SUPER -- 许可运用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL语句,mysqladmin debug敕令;许可您衔接(一次),纵然已达到max_connections。 UPDATE -- 许可运用UPDATE USAGE -- “无权限”的同义词 GRANT OPTION -- 许可授与权限 /* 表保护 */ -- 剖析和存储表的关键字散布 ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE 表名 ... -- 搜检一个或多个表是不是有毛病 CHECK TABLE tbl_name [, tbl_name] ... [option] ... option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED} -- 整顿数据文件的碎片 OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... /* 杂项 */ ------------------ 1. 可用反引号(`)为标识符(库名、表名、字段名、索引、别号)包裹,以防备与关键字重名!中文也能够作为标识符! 2. 每一个库目次存在一个保存当前数据库的选项文件db.opt。 3. 解释: 单行解释 # 解释内容 多行解释 /* 解释内容 */ 单行解释 -- 解释内容 (规范SQL解释作风,请求双破折号后加一空格符(空格、TAB、换行等)) 4. 形式通配符: _ 恣意单个字符 % 恣意多个字符,以至包含零字符 单引号须要举行转义 \' 5. CMD敕令行内的语句终了符可以为 ";", "\G", "\g",仅影响显现效果。其他地方照样用分号终了。delimiter 可修正当前对话的语句终了符。 6. SQL对大小写不敏感 7. 消灭已有语句:\c
5.5.8、经常使用的SQL
/*==============================================================*/ /* DBMS name: MySQL 5.0 */ /* Created on: 2017/3/5 10:29:05 */ /*==============================================================*/ drop table if exists Address; drop table if exists ArticleComment; drop table if exists ArticleType; drop table if exists Articles; drop table if exists DictSub; drop table if exists DictTop; drop table if exists OrderPdt; drop table if exists Orders; drop table if exists ProductComment; drop table if exists Products; drop table if exists Users; /*==============================================================*/ /* Table: Address */ /*==============================================================*/ create table Address ( `AddressId` int not null auto_increment comment '收货地点编号', `UserId` int not null comment '用户编号', `Province` varchar(50) not null comment '省', `City` varchar(50) not null comment '市', `County` varchar(50) not null comment '县/区', `Street` varchar(300) not null comment '细致地点', `RevName` varchar(30) not null comment '收货人姓名', `PostCode` varchar(20) comment '邮政编码', `Mobile` varchar(50) not null comment '手机', `Phone` varchar(50) comment '电话', `IsDefault` bool comment '是不是为默许地点', primary key (AddressId) ); alter table Address comment '收货地点'; /*==============================================================*/ /* Table: ArticleComment */ /*==============================================================*/ create table ArticleComment ( `ArticleCommentId` int not null auto_increment comment '文章批评编号', `ArticleId` int not null comment '文章编号', `UserId` int not null comment '用户编号', `ArticleCommentContent` varchar(4000) not null comment '文章批评内容', `ArticleCommentDate` timestamp default CURRENT_TIMESTAMP comment '文章批评时候', `ArticleCommentState` int default 1 comment '状况', `ArticleRemark` int comment '打分', `ArticleCommentReserver1` varchar(4000) comment '备用1', `ArticleCommentReserver2` varchar(4000) comment '备用2', primary key (ArticleCommentId) ); alter table ArticleComment comment '文章批评'; /*==============================================================*/ /* Table: ArticleType */ /*==============================================================*/ create table ArticleType ( `ArticleTypeId` int not null auto_increment comment '文章栏目编号', `ArticleTypeName` varchar(200) comment '文章栏目称号', `ArticleTypeState` int default 1 comment '状况', `ArticleTypeDesc` varchar(4000) comment '文章栏目形貌', `ArticleTypePicture` varchar(400) comment '文章栏目图片', `ArticleTypeReserve1` varchar(4000) comment '备用1', `ArticleTypeReserve2` varchar(4000) comment '备用2', primary key (ArticleTypeId) ); alter table ArticleType comment '文章栏目'; /*==============================================================*/ /* Table: Articles */ /*==============================================================*/ create table Articles ( `ArticleId` int not null auto_increment comment '文章编号', `ArticleTypeId` int not null comment '文章栏目编号', `ArticleTitle` varchar(400) not null comment '文章题目', `ArticleContent` text comment '文章内容', `ArticleDate` timestamp default CURRENT_TIMESTAMP comment '文章宣布时候', `ArticleAuthor` varchar(200) comment '文章宣布者', `ArticleFileName` varchar(100) comment '静态文件名', `ArticleThumbNail` varchar(200) comment '缩略图片', `ArticleAddition` varchar(200) comment '附件称号', `ArticleLevel` int comment '显现的优先级', `ArticleIsAllowComment` integer default 1 comment '是不是许可批评', `ArticleState` int default 1 comment '状况', `ArticleHotCount` int comment '点击次数', `ArticleReserve1` varchar(4000) comment '备用1', `ArticleReserve2` varchar(4000) comment '备用2', `ArticleReserve3` numeric(8,0) comment '备用3', primary key (ArticleId) ); alter table Articles comment '文章'; /*==============================================================*/ /* Table: DictSub */ /*==============================================================*/ create table DictSub ( `SubId` int not null auto_increment comment '子项编号', `DictId` int not null comment '字典编号', `SubName` varchar(200) not null comment '子项称号', `SubDesc` varchar(4000) comment '子项形貌', `SubReserve1` varchar(4000) comment '保存备用1', primary key (SubId) ); alter table DictSub comment '字典子项'; /*==============================================================*/ /* Table: DictTop */ /*==============================================================*/ create table DictTop ( `DictId` int not null auto_increment comment '字典编号', `DictName` varchar(100) not null comment '字典称号', `DictDesc` varchar(4000) comment '字典形貌', `DictReserve1` varchar(4000) comment '保存备用', primary key (DictId) ); alter table DictTop comment '字典'; /*==============================================================*/ /* Table: OrderPdt */ /*==============================================================*/ create table OrderPdt ( `OrderPdtId` int not null auto_increment comment '定单商品编号', `Id` int not null comment '编号', `UserId` int not null comment '用户编号', `OrderId` int comment '定单号', `PdtAmount` int comment '订购数量', `PdtPrice` decimal comment '单价', `PdtReserve1` varchar(2000) comment '备用1', `PdtReserve2` varchar(4000) comment '备用2', primary key (OrderPdtId) ); alter table OrderPdt comment '定单商品'; /*==============================================================*/ /* Table: Orders */ /*==============================================================*/ create table Orders ( `OrderId` int not null auto_increment comment '定单号', `AddressId` int not null comment '收货地点编号', `OrderState` int default 1 comment '定单状况', `ExpressNO` varchar(50) comment '快递编号', `ExpressName` varchar(50) comment '快递称号', `PayMoney` decimal comment '应付出', `PayedMoney` decimal comment '已付出', `SendInfo` varchar(300) comment '发货人信息', `BuyDate` timestamp default CURRENT_TIMESTAMP comment '下单时候', `PayDate` datetime comment '付出时候', `SendDate` datetime comment '发货时候', `ReceivDate` datetime comment '收货时候', `OrderMessage` varchar(4000) comment '附言', `UserId` integer comment '用户编号', `OrderReserve1` varchar(4000) comment '备用1', `OrderReserve2` varchar(4000) comment '备用2', `OrderReserve3` decimal comment '备用3', primary key (OrderId) ); alter table Orders comment '定单'; /*==============================================================*/ /* Table: ProductComment */ /*==============================================================*/ create table ProductComment ( `ProductCommentId` int not null auto_increment comment '商品批评编号', `ProductId` int not null comment '商品编号', `UserId` int not null comment '用户编号', `ProductCommentContent` varchar(4000) comment '商品批评内容', `ProductCommentDate` timestamp default CURRENT_TIMESTAMP comment '商品批评时候', `ProductCommentState` int comment '状况', `ProductCommentRemark` int comment '打分', `ProductCommentReserve1` varchar(4000) comment '备用1', `ProductCommentReserve2` varchar(4000) comment '备用2', primary key (ProductCommentId) ); alter table ProductComment comment '商品批评'; /*==============================================================*/ /* Table: Products */ /*==============================================================*/ create table Products ( `Id` int not null auto_increment comment '编号', `Name` varchar(200) not null comment '称号', `SubIdColor` int not null comment '所属色彩', `SubIdBrand` int not null comment '所属品牌', `SubIdInlay` int not null comment '所属镶嵌', `SubIdMoral` int not null comment '所属寄意', `SubIdMaterial` int not null comment '所属种水', `SubIdTopLevel` int not null comment '一级分类编号', `MarketPrice` decimal comment '市场参考价', `MyPrice` decimal not null comment '玉源直销价', `Discount` decimal default 1 comment '折扣', `Picture` varchar(200) comment '图片', `Amount` int comment '库存量', `Description` text comment '细致形貌', `State` int default 1 comment '状况', `AddDate` timestamp default CURRENT_TIMESTAMP comment '上货日期', `Hang` int comment '挂件', `RawStone` int comment '赌石', `Size` varchar(200) comment '尺寸', `ExpressageName` varchar(100) comment '快递称号', `Expressage` decimal comment '快递费', `AllowComment` int default 1 comment '是不是许可批评', `Reserve1` varchar(4000) comment '保存备用1', `Reserve2` varchar(4000) comment '保存备用2', `Reserve3` decimal(0) comment '保存备用3', primary key (Id) ); alter table Products comment '商品'; /*==============================================================*/ /* Table: Users */ /*==============================================================*/ create table Users ( `UserId` int not null auto_increment comment '用户编号', `UserName` varchar(200) not null comment '用户名', `Password` varchar(512) not null comment '暗码', `Email` varchar(100) not null comment '邮箱', `Sex` varchar(10) comment '性别', `State` int default 1 comment '状况', `RightCode` int comment '权限状况', `RegDate` timestamp default CURRENT_TIMESTAMP comment '注册时候', `RegIP` varchar(200) comment '注册IP', `LastLoginDate` datetime comment '近来登录时候', `UserReserve1` varchar(4000) comment '保存备用1', `UserReserve2` varchar(4000) comment '保存备用2', `UserReserve3` varchar(4000) comment '保存备用3', primary key (UserId) ); alter table Users comment '用户'; alter table Address add constraint FK_AddressBelongUser foreign key (UserId) references Users (UserId) on delete restrict on update restrict; alter table ArticleComment add constraint FK_ArticleCommentForArticle foreign key (ArticleId) references Articles (ArticleId) on delete restrict on update restrict; alter table ArticleComment add constraint FK_ArticleCommentForUser foreign key (UserId) references Users (UserId) on delete restrict on update restrict; alter table Articles add constraint FK_ArticleBelongType foreign key (ArticleTypeId) references ArticleType (ArticleTypeId) on delete restrict on update restrict; alter table DictSub add constraint FK_BelongDict foreign key (DictId) references DictTop (DictId) on delete cascade on update cascade; alter table OrderPdt add constraint FK_BelongOrder foreign key (OrderId) references Orders (OrderId) on delete cascade on update cascade; alter table OrderPdt add constraint FK_CartForUser foreign key (UserId) references Users (UserId) on delete restrict on update restrict; alter table OrderPdt add constraint FK_OrderDepProduct foreign key (Id) references Products (Id) on delete restrict on update restrict; alter table Orders add constraint FK_OrderBelongAddress foreign key (AddressId) references Address (AddressId) on delete restrict on update restrict; alter table ProductComment add constraint FK_ProductCommentBelongUsers foreign key (UserId) references Users (UserId) on delete restrict on update restrict; alter table ProductComment add constraint FK_ProductCommentForProduct foreign key (ProductId) references Products (Id) on delete restrict on update restrict; alter table Products add constraint FK_BelongBrand foreign key (SubIdMaterial) references DictSub (SubId) on delete restrict on update restrict; alter table Products add constraint FK_BelongColor foreign key (SubIdBrand) references DictSub (SubId) on delete restrict on update restrict; alter table Products add constraint FK_BelongInlay foreign key (SubIdInlay) references DictSub (SubId) on delete restrict on update restrict; alter table Products add constraint FK_BelongMaterial foreign key (SubIdColor) references DictSub (SubId) on delete restrict on update restrict; alter table Products add constraint FK_BelongMoral foreign key (SubIdTopLevel) references DictSub (SubId) on delete restrict on update restrict; alter table Products add constraint FK_BelongTopLevel foreign key (SubIdMoral) references DictSub (SubId) on delete restrict on update restrict;
六、下载递次、协助、视频
最全php递次员东西箱:http://tool.ki4.cn/
MySQL5.7.17装置包官网下载地点: https://dev.mysql.com/downloads/windows/installer/
MYSQL 5.7.12下载地点:http://www.ki4.cn/xiazai/gongju/116
SQLPro for Mysql1.0.13下载地点:http://www.ki4.cn/xiazai/gongju/637
文档中没有您能够查协助:
相干引荐:
MySql中运用正则表达式查询实例详解
详解MySQL完成主从复制历程_Mysql实例详解
MySQL数据库增添新用户详解
以上就是一个小时学会MySQL数据库教程分享的细致内容,更多请关注ki4网别的相干文章!