mysql安装-使用

数据库

什么是数据库

它是一个数据仓库,就像用来存储粮食、衣物的仓库一样。如果没有数据库,我们无法上网查资料、购物。要使用数据库就要了解数据。我们从以下几点来学习了解数据库。

1、 数据库的历史

2、 数据库的模型

3、 数据库的三级模式和二级映像

4、 数据库相关的术语以及数据库设计的完整性

5、范式

6、 实体-联系图的绘制

 

数据的历史

在数据库管理的发展过程中主要经历了3个阶段:人工管理阶段、文件系统阶段、数据库系统阶段。

 

人工管理阶段

世界上第一台技术机(ENIAC)诞生时,存储信息的只有磁带、卡片、纸带等。处理数据的方式只有批处理方式,主要负责数据管理的是人。因此有以下4个特点:

不能长期保存数据、数据并不是由应用软件管理的而是由应用程序自己管管理的,程序要写程序还要编写数据存取的方式、数据不能共享(自己写的程序自己存取数据自己管理数据自己使用)、数据不具有独立性

 

 

 

人工管理阶段程序与数据关系图

 

 

文件系统阶段

20世纪50年代后期到60年代中期,计算机开始应用于数据管理方面,也已可以用磁盘直接存储数据。此时,存储数据使用的是文件系统也称为管理软件,文件系统是操作系统中负责管理和存储文件信息的软件机构。文件系统由三部分组成:与文件管理有关的软件、被管理的文件以及实施文件管理所需的数据结构。

文件系统阶段存储数据就是以文件的形式来存储,由操作系统统一处理。是数据库发展的初始阶段。文件系统阶段有以下4个特点:

可以长期保存数据、有简单的数据管理功能、共享数据能力差、数据不具有独立性

 

 

 

文件系统阶段程序与数据关系图

 

 

数据库系统阶段

20世纪60年代后期开始进入了数据库系统阶段。计算机的普及和外存设备磁盘容量的扩充,需要管理的数据与日俱增。最早的数据库管理系统是在1961年由通用电气公司开发的。此后数据库技术得到飞速发展。数据库存储数据不仅存储数据的本身也存储数据之间的联系,在数据库系统阶段管理数据具有以下4个特点:

实现数据的共享、数据具有了独立性、数据实现集中控制、故障恢复。

 

 

数据库系统阶段程序与数据关系图

 

 

第一节

      一、相关概念

       1. Data:数据,是数据库中存储的基本对象,是描述事物的符号记录。
       2. Database:数据库,是长期储存在计算机内、有组织的、可共享的大量数据的集合。
       3. DBMS:数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,用于科学地组织、存储和管理数据、高效地获取和维护数据。
       4. DBS:数据库系统,指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、数据库管理员(DBA)构成。
       5. 数据模型:是用来抽象、表示和处理现实世界中的数据和信息的工具,是对现实世界的模拟,是数据库系统的核心和基础;其组成元素有数据结构、数据操作和完整性约束。
       6. 概念模型:也称信息模型,是按用户的观点来对数据和信息建模,主要用于数据库设计。
       7. 逻辑模型:是按计算机系统的观点对数据建模,用于DBMS实现。
       8. 物理模型:是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。
       9. 实体和属性:客观存在并可相互区别的事物称为实体。实体所具有的某一特性称为属性。
       10.E-R图:即实体-关系图,用于描述现实世界的事物及其相互关系,是数据库概念模型设计的主要工具。
       11.关系模式:从用户观点看,关系模式是由一组关系组成,每个关系的数据结构是一张规范化的二维表。
       12./值:型是对某一类数据的结构和属性的说明;值是型的一个具体赋值,是型的实例。
       13.数据库模式:是对数据库中全体数据的逻辑结构(数据项的名字、类型、取值范围等)和特征(数据之间的联系以及数据有关的安全性、完整性要求)的描述。
       14.数据库的三级系统结构:外模式、模式和内模式。
       15.数据库内模式:又称为存储模式,是对数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。一个数据库只有一个内模式。
       16.数据库外模式:又称为子模式或用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图。通常是模式的子集。一个数据库可有多个外模式。
       17.数据库的二级映像:外模式/模式映像、模式/内模式映像。

     

 二、重点知识点

       1. 数据库系统由数据库、数据库管理系统、应用系统数据库管理员构成。

       2. 数据模型的组成要素是:数据结构、数据操作、完整性约束条件

       3. 实体型之间的联系分为一对一、一对多多对多三种类型。

       4. 常见的数据模型包括:关系、层次、网状、面向对象、对象关系映射等几种。

       5. 关系模型的完整性约束包括:实体完整性、参照完整性和用户定义完整性

      6. 阐述数据库三级模式、二级映象的含义及作用。
        数据库三级模式反映的是数据的三个抽象层次: 模式是对数据库中全体数据的逻辑结构和特征的描述。内模式又称为存储模式,是对数据库物理结构和存储方式的描述。

                                                外模式又称为子模式或用户模式,是对特定数据库用户相关的局部数据的逻辑结构和特征的描述

        数据库三级模式通过二级映象在 DBMS 内部实现这三个抽象层次的联系和转换。外模式面向应用程序, 通过外模式/模式映象与逻辑模式建立联系, 实现数据的逻辑独立性。 

      模式/内模式映象建立模式与内模式之间的一对一映射, 实现数据的物理独立性。

数据库的模型

层次结构模型

层次结构模型类似于倒置的树型,一个父表可以有多个子表,但是每一个子表都对应着一个父表。用一个学校与学生职工的关系来说明:

 

 

这个机构很难改变,而且在表之间有局限性。所以现在很少有用这样的机构

 

 

网状结构模型

 

网状结构模型是对层次结构模型的改进。网状结构模型打破了层次结构模型使用的限制。可以更全面的描述数据库中表之间的关系。可以一个父表没有子表,也可以一个子表有多个父表。还可以设置两个表之间的多种关系。

 

 

 

网状结构模型虽然有改进,但是对数据库设计者要求非常高,不熟悉数据库很难设计出完善的网状结构模型。

 

 

关系结构模型

是目前使用最多的数据模型。关系数据结构包含数据,并且运行以一种可以预测并防止差错的方法操作数据。关系结构模型实际就是一个二维表。由行和列组成。一个员工信息登记表就是一个二维表,也就是关系模型。

 

 

员工编号

姓名

年龄

性别

所在部门

联系方式

1

张三

28

研发1

13411111111

2

李四

32

研发2

13411111112

3

王五

30

研发2

13411111112

 

把一行称为一个元组,就是一行数据,把每一列称为一个字段或属性。想要在设计数据库时使用关系结构模型,要做到规范化。

目前大多数数据库都是关系型数据库,如: IBM DB2 oracle 、  sql ServerMySqlSyBaseInformixAccessFoxPro

 

 

 

数据库的三级模式

数据库结构分为3级:面向用户或应用程序员的用户级、面向建立和维护数据库人员的概念级、面向系统程序员的物理级。用户级对应外模式,概念级对应模式,物理级对应内模式。

模式

对应概念级,它是由数据库设计者综合所有用户的数据,按照统一的观点构造的全局逻辑结构,是对数据库中全部数据的逻辑结构和特征的总体描述,是所有用户的公共数据视图。它是由数据库管理系统提供的数据模式描述语言(Data Description Language,DDL)来描述、定义的。体现并反映了数据库系统的整体观。

外模式

对应用户级,它是某个或某几个用户所看到的数据视图,是与某一应用有关的数据逻辑的表示。外模式是从模式导出的一个子集,包含模式中允许特定用户使用的那部分数据。用户可以通过外模式描述语言来、定义对应于用户的数据记录(外模式),也可以利用数据操纵语言(Data Manipulation Language,DML)对这些数据记录进行操作。

 

DML语言可以对数据进行4种操作,即创建(create)、读取(read)、更新(update)和删除(delete)、也把它说成是对数据执行CRUD操作。

DDL语言是用于描述数据中要存储的现实世界实体的语言,主要包括drop,  create, alter , grant,  revoke, truncate等操作。

 

 

先简单回顾下sql语言的几种语言:ddldmldcl,它们分别是:

ddldata definition language,例如常用的:createalterdroptruncategrantrevokecomment

dmldata manipulation language,我们经常使用的:selectinsertupdatedelete等都是数据操作语言。

dcldata control language,数据控制语言,平时基本用不到,如commitsavepointrollbackset transaction

 

所以区别主要在:

· deletedml语句,这个操作使用放在rollback segement里,事务提交后才生效,是可以回滚的;

· truncateddl语句,它不在rollback segement里的,事务自动提交,操作立即生效,没有回滚一说,除非自身失败;

· 还有一个关键,虽然truncate是数据定义语言,但是truncatedelete操作一样,都只删除数据不删除表结构,两者的主要区别在于,truncate操作是没有备份的,所以它执行速度比delete快;

· 而另一个ddl语句drop,将删除的是结构包括被依赖的触发器,索引,约束,依赖该表的存储过程会被保留。刚才又搜索了下truncatedrop操作之后数据也还是可以找回来的:http://dbsnake.com/2010/06/truncate-drop-recovery.html

 

内模式

对应物理级。它是数据库中全体数据的内部表示或底层描述,是数据库最底一级的逻辑描述,它描述了数据在存储介质上存储方式的物理结构,对应着实际存储在外存储介质上的数据库。

 

二级映像

数据库系统的三级模式是对数据的3个抽象级别。它把数据的具体组织留给DBMS管理,使用户能逻辑的、抽象的处理数据而不必关心数据在计算机中的具体表示与存储。为了能够在内部实现这3个抽象层次的联系和转换。DBMS在这3个级别之间提供了两层映像:外模式/模式映像  和   模式/内模式映像。

 

外模式/模式映像:使数据具有较高的逻辑独立性。它定义该两个模式的联系。这些映像定义通常包含在各自外模式的描述中。当模式改变时,DBA要对相关的外模式/模式映像做相应的改变以使外模式保持不变。应用程序是依据数据的外模式编写的,外模式不变应用程序就没必要修改。所以,外模式/模式映像功能保证了数据与程序的逻辑独立性。

 

模式/内模式映像:使数据具有较高的物理独立性。它定义了数据库全局逻辑结构与存储结构之间的对应关系。该映像定义通常包含模式描述中。当数据存储结束了,DBA要对模式/内模式映像做相应的改变以使模式保持不变。所以模式/内模式映像功能保证了数据的物理独立性。

 

数据库相关的术语

即在数据库中存放数据用的数据表。每一个数据库中都可以包含多张数据表。但每个表的名字都不能重复。表的一行代表一条记录,每一列都有一个列名,列名不能重复,行与列的交叉点称为字段。

视图

是数据库中的虚拟表。在视图中存放的是从数据库表中查询出来的记录,使用视图主要是为了方便信息查询,同时也能缩短查询数据的时间。

存储过程

是由SQL语句和控制流程语句组成的语句块。存储过程存储在数据库内,可由应用程序通过存储过程的名称来调用执行。

存储过程在开发软件时,可以把大量的数据操作放在服务器端的存储过程中,而只返回需要的数据,这样就减少了数据的传输量,速度也可以大大提高。

触发器

触发器是特殊的存储过程。也是由SQL语句和控制流程语句组成的。但是触发器在数据库中是不需要调用而自动执行的。例如,在触发器中可以定义在修改某张表记录后执行触发器中的内容。

约束

是在数据库中保证表中数据完整性的手段。有主键约束,外键约束,唯一约束,检查约束,非空约束。其中主键约束和唯一约束都被认为是唯一约束,外键约束被认为是参照约束。

主键约束(Primary Key:在每个表中只能有一个,但可以由多个列组成。通常把由多个列组成的主键又叫复合主键或组合主键。主键约束可以保证主键列的数据没有重复且值不为空,是唯一的标识表中的一条记录。

外键约束(Foreign Key:之所以被认为是参照约束,是因为它主要用作把一个表中的数据和另一个表中的数据进行关联。表和表之间的关联是为了保证数据库中数据的完整性,使用外键约束保证数据的完整性,也叫参照完整性。

 

用一个案例来说明:

商品信息表和商品类型表

 

商品编号

名称

类型编号

价格(元)

产地

A01

面包

01

2.0

中国

A02

钢笔

02

10.0

中国

A03

电视

03

1000.0

中国

 

商品类型表

 

类型编号

类型名称

01

食品

02

文具

03

家电

04

餐具

 

商品类型表

 

商品信息表中商品编号就是商品信息表的主键,商品类型表中的类型编号是商品类型表的主键。当把商品类型表中的主键类型编号放到商品信息表中的类型编号设置为外键约束后,在商品信息表中的类型编号的值一定要在商品类型表中存在,同时当在商品类型表中删除一个类型时,如果这个类型已经在商品信息表中使用,那么商品类型表中的这个类型就无法删除。这样就保证了数据库中数据的完整性。

 

唯一约束(unique:和主键一样都是设置表中的列不能有重复的值,区别一是表中只能有一个主键,但可以有多个唯一约束。通常设置唯一约束的目的是使非主键列没有重复的值。

区别二是如果某一列中有空值就不能设置为主键,但可以设置为唯一约束。例如:商品编号设置为了主键,还希望商品名不重复时就可以把商品名称设置为唯一约束。

 

检查约束(check:检查约束是用来指定表中的列的值的取值范围的。比如员工表的年龄要设置在1850之间。那么就可以给年龄列添加一个check约束。当插入不在此范围的数据时就会报错。这样就保证了数据库中数据的有效性。

 

非空约束(not null:用来约束表中的列不允许为空的。比如商品表中的价格列不能为空。可以使用此约束。

 

数据库设计的完整性

数据库设计的完整性实际上是为了保证数据的正确性。主要有3个:

实体完整性、区域完整性、参照完整性。


实体完整性:要求表中主键字段不能为空或重复值。比如商品编号不能重复不能为空。

区域完整性:保证输入到数据库中的数据是在有效的范围内。比如:邮箱字段一定要有@,手机号码一定是11位并且为数字,年龄只能是数字等。

参照完整性:可以保证数据库中相关联的表里数据的正确性。可以避免数据误删和错加。

 

范式-设计关系型数据库的准则

范式分别有第一范式、第二范式、第三范式。

 

第一范式(1NF

关系型数据库设计的第一步。第一范式就是数据库表中的字段都是单一属性的,不可再分的。这个单一属性可以是数据库中任何一种基本数据类型,如整型,字符型,日期型等。

只要是关系型数据库都会满足第一范式。

例如:产品信息表,每字段都单一不可再分的属性

 

字段名

数据类型

产品编号

整型

产品名称

字符型

产品数量

整型

产品价格

Number(2,6)型(oracle

float/double型(mysql

产品描述

字符型

 

第二范式

是在第一范式的基础上进一步对关系型数据库进行规范。官方给出第二范式的定义是要求在数据表中不存在非关键字段对任一候选字段的部分函数依赖。意思就是说在第二范式中组合键(AB)里面的AB字段与其他字段不能存在组合重复。为解决这个问题,通常的做法是不用组合主键,另外添加一个编号列作为单一的主键即可满足第二范式。如果不想添加编号做主键,那就要满足组合键(AB)里面的AB字段与其他字段不能存在组合重复。才可以满足第二范式。

设计一个购物产品表。做如下设计:

字段:客户编号、产品名称、产品数量、产品类型、产品价格、客户账户。如果用客户编号和产品名称作为组合主键,那么在组合主键中产品名称和产品类型存在一定关系。因为产品名称可以决定产品的类型,所以不符合第二范式的要求。如果不按第二范式设计表就会出现以下4个问题:

数据冗余:同一个产品由N个顾客购买,产品类型就重复n-1次;同一个顾客购买了多件产品,那么就会多次记录顾客个人信息。

 

客户编号

客户账户

产品名称

产品类型

产品价格

产品数量

1001

a@126.com

迷你小风扇

电器

10.0

1

1002

ba@126.com

迷你小风扇

电器

10.0

2

1003

ca@126.com

迷你小风扇

电器

10.0

1

1006

dd@a.com

钢笔

文具

10.0

2

1006

dd@a.com

杯子

餐具

10.0

1

1006

dd@a.com

迷你小风扇

电器

10.0

1

 

 

电脑

电器

4000.0

10

 

更新异常:若调整了某个产品的类型,数据表中所有行的产品类型值都要更新,否则会出现同一个产品不同类型的情况。

插入异常:假设新进了一个产品,暂时还没有人购买,产品的名称和类型也无法记录到数据库中。

 

删除异常:假设一批顾客把已购买完的产品退货。那么就要删除删除,但同时也把产品名称类型等信息一起删除掉,这样产品信息也没有了。如果有人再想购买此产品也无法找到数据。

 

为解决这些问题可以把现有的表拆分设计为3张表:

产品类型表:类型编号,产品类型

客户信息表:客户编号,客户账户

产品信息表:产品编号,产品名称,类型编号,产品价格,产品数量

 

第三范式

是在第二范式的基础上对数据库的设计进行规范。第三范式的要求是数据库表中不存在非关键字段对任一候选关键字段的传递函数依赖。所谓传递函数依赖指的是如果存在A决定BB决定C的决定关系,则C传递函数依赖于A。因此满足第三范式的数据库表应该不存在依赖关系。假如:员工信息表为:emp(员工编号,姓名,年龄,所在部门,部门电话),使用员工编号做为员工信息的主键,那么就存在决定关系:员工编号决定了员工姓名、年龄、所在部门,部门电话。那么也会出现不满足第二范式时的数据冗余和更新插入删除异常的情况。为了满足第三范式要求,必须把员工信息表拆分为以下2个表:

员工表:员工编号,姓名,年龄,所在部门编号,

部门表:部门编号,部门名称,电话

 

员工编号

姓名

部门编号

 

 

1

张三

1001

 

 

2

李四

1001

 

 

3

王五

1001

 

 

 

 

部门编号

部门名称

1001

开发1

 

 

 

 

Mysql数据库下载

登录mysql官网:https://www.mysql.com/

 

 

拉到页面最后:

 

进入后是以下页面:


完成上面一步后,拉到最后:

 

 

 

 

注册成功后,再登录就可以下载了,完全免费的.注册时别忘记自己的密码

 

 

mysql绿色版安装

下载完了后,就是这个zip:

Mysql数据库安装包:mysql-5.7.14-winx64.zip

 

绿色版本安装步骤:

1. 先将mysql-5.7.14-winx64.zip解压到要安装的盘符,这里安装在D:\db\mysql\

解压后目录如下:D:\db\mysql\mysql-5.7.14-winx64

 

 

 

 

2. mysql home目录下,复制一个my-default.ini文件,并改名为my.ini如上图所视

my.ini以文本文档打开.

1) 找到内容:    # innodb_buffer_pool_size = 128M

复制一份,解开并粘贴到文件中(在此文件中#是注释,同等于java//功能) ,粘贴好之后文件中内容如下:

 

 

 

2) 找到内容:

# These are commonly set, remove the # and set as required.

# basedir = .....

# datadir = .....

# port = .....

# server_id = .....

复制一份,解开并粘贴到文件中,粘贴好之后文件中内容如下:

 

Basedir表示mysqlroot目录(bin目录之上)

Datadir表示mysqlroot目录下的data目录路径,用于存放数据.要注意的是mysql安装包解压之后,root目前下是没有data目录的,所以在这里需要创建一个data目录放在root目录下.创建好之后如下:

 

Port表示数据库的端口,mysql端口默认为3306

Server_id表示数据库唯一标识,一般都是mysql

 

3) 找到内容:

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

这个内容是解开的,不要做任何变动.

4) 在文件最末尾加上以下内容:

#编码客户端等配置

character-set-server = utf8

[client]

#客户端编码方式,最好和服务端保存一致

loose-default-character-set = utf8

[WinMySQLadmin]  

Server = "D:/db/mysql/mysql-5.7.14-winx64/bin/mysqld.exe"

 

其中:character-set-server 表示指定数据库服务端的编码格式是utf8

loose-default-character-set表示指定客户端链接服务端的编码为utf8

Server 表示是客户端链接服务端的地址.指向bin目录下的mysqld.exe

 

3. cmd(一定要以管理员身份运行CMD,windows-system32-cmd.exe)

然后cdmysql安装目录的bin下面执行:

1) 

mysqld --initialize-insecure --explicit_defaults_for_timestamp

如图:

 

如果没有提示can not  fail 等字眼,表示没有问题.

2) 再执行:

mysqld -install  (删除用:mysqld -remove)

3) net start mysql 启动数据库.然后可以查看服务检查是否有启动mysql服务

 

 

4. 执行成功后登录数据库

输入mysql -u root -p 回车

提示输入密码,默认密码是空,回车就可以。

 


5. 改密码:

cmd (一定要以管理员身份运行CMD) ->mysql home \bin目录下:

mysqladmin -uroot -p password <新密码>

<新密码>替换为你的自定义密码,然后按回车。

这时会提示输入密码,其实是指的原密码,原密码因为是空,所以这里再回车即可完成设置。然后用上面的方法和新密码登入mysql,即可正常工作。

 



 

6. exit退出数据库

 

 

 

7. 查看版本:

show variables like '%version%'

 

 

 

Mysql客户端工具

Navicat是比较好用也比较常用的mysql客户端工具,当然还有别的客户端工具,比如:MySQL-Front也是比较好用的mysql客户端工具

在这里我们使用navicat-mysql

中文版 navicat_mysql_x64_11.2.15_xiazaiba.zip_sgdl.exe

英文版:navicat112_mysql_en_x64.exe

双击exe安装.

 

安装完成之后,点快捷方式启动:

 

 

客户端链接数据库

打开navicat,Connection如图:

 

选择mysql,因为我们链的是mysql

跳出以下页面:

 

 

账号密码填写好后,点下面的Test Connection测试一下是否可以链接成功

 

 

再点OK

 

 

 

表示客户端已经成功链接到服务端了,

选中上面的mysql右键,open Connection

 

现在就可以在这里操作数据库了.

 

 

用客户端建数据库

以上看到的

都是mysql内置的数据库,权限,用户等系统库.这些库不用动,

我们需要用数据库,则需要另外建自己使用的数据库.

这里建立一个名为mysqlTest的数据库

选中mysql 右键选中New Database

 

 

 

 

建完之后:

 

 

双击mysqlTest:

 

 

 

 

此时数据库就建立完了,数据下没有表也没有数据

 

用客户端建表和编辑表

 

 

 

New Table

 

 

 

 


 

 

 

再点Tables就能看到刚刚建立的表

 

 

同时还可以:

 

 

用客户端给表插入数据

 

 

 

 

如下:

 

 

Sql

结构化查询语言 Structured Query Language的缩写

 

利用sql语句可以查询,插入,删除,更新数据库中的数据,还可以创建数据库,删除数据库,创建表,删除表.Sql拥有强大操作数据的功能

 

sql创建数据库

创建一个名为test的数据库:

create database test;

 

如下图:

注意看左边最后一个数据库名叫test

 

 

删除数据库

 

删除成功了,左边已看不到test数据库

sql创建表

创建一个仓库表lib

 

 

create table lib

(

id   int not null,

libNum varchar(50),

city  varchar(50),

libArea int,

isUse varchar(2) default ''

)

 

Not null表示不能为空,

Default 表示默认值

 

 

 

 

 

Sql种类-数据定义语言DDL

包括数据库中 对数据库,表,视图,索引等  的创建,修改,删除

 

创建表

 

create table productCate(

id int PRIMARY key not null,

typeName VARCHAR(10)

)

 

create table product (

 id int PRIMARY key not null,

 proCateId int not null,

 proName varchar(50),

 proPrice double,

 proNum int ,

 proCate varchar(10),

 descption varchar(255),

foreign key(proCateId) REFERENCES productCate(id)

)

 

create table test(

id int auto_increment not null primary key,

tname varchar(50),

tdesc varchar(100)

)

 

 

创建表时添加主键:

 id int PRIMARY key not null,

 

添加主键盘,主键的值会自动从1开始增长:

id int auto_increment not null primary key,

 

主键的值从100开始增长:

create table test(

id int auto_increment not null primary key,

tname varchar(50),

tdesc varchar(100)

)AUTO_INCREMENT = 100  -- 表示从100开始增长

 

 

添加外键:

foreign key(proCateId) REFERENCES productCate(id)

 

 

 

查出现有的表中的数据创建为一个新的表:

 

create table  表名  as  select id,typeName from productcate   

 

create table  productcateTemp as select id,typeName from productcate

修改表

给创建好的表添加字段

 

Alter table 表名 add新列名 列类型

 

alter table product add proMdAddr varchar(100)

 

 

修改列名:

 

Alter  table  change  要修改的列名  新列名 类型

 

alter table product change  proMdAddr  proMdAddr1 varchar(110)

 

修改已有字段类型:

 

Alter table 表名 Modify  要修改的列名 新列类型  

 

alter table product Modify  proMdAddr  varchar(110)

 

删除表已有字段:

 

Alter table drop  要删除的列名  

 

alter table product drop  proMdAddr1  

 

添加约束

表已建好,但建表时没有添加主键,外另添加的方法:

alter table product add   PRIMARY key (id); --表示把id这个列做为主键

 

将主键改为自动增长:

alter table 表名change id  id  int AUTO_INCREMENT;

 

删除主键约束:

 

alter table product drop primary key;

 

 

添加外键约束:

 

alter talbe 表名 add CONSTRAINT外键名 FOREIGN KEY(要做为外键的列) REFERENCES要关联的表(列)

 

ALTER TABLE product ADD CONSTRAINT c_fk FOREIGN KEY(proCateId)

 

REFERENCES productCate(id);

 

删除外键约束:

alter table 表名 drop FOREIGN KEY外键名

 

alter table product drop FOREIGN KEY c_fk

 

Check约束:

 

语法:alter table product add constraint ck_proNum check( proNum(1,10000));

 

但:MySQL不支持check约束,但可以使用check约束,而没有任何效果;

 

 

添加唯一约束:

 

ALTER TABLE 表名ADD CONSTRAINT唯一约束名 unique key();

ALTER TABLE 表名ADD CONSTRAINT唯一约束名 unique ();

 

 

 

ALTER TABLE product ADD CONSTRAINT pn_uk unique key(proName);

 

删除唯一约束:

 

alter table product drop index 唯一约束名

 

 

alter table product drop index pn_uk

 

添加not null 约束:

 

 

alter table 表名 modify  字段名 字段类型not null ;  

-- 注意不要改字段类型否则一起将字段 类型也改了

 

alter table product modify   proPrice double not null

 

 

删除表

Drop table 表名

 

Drop table product

 

 

删除数据库

Drop database 数据库名

Sql种类-数据操纵语言DML

是对数据中表的数据进行操作的。 添加数据,删除数据,修改数据

 

添加数据到表中

 

Insert into productcate (id,typeName) values (2,'餐具')

 

修改表中数据

update  productcate  set  typeName = '餐具1' where id = 1

 

删除表中数据

 

清空mysql表内容常见的有两种方法:一种delete,一种是truncate

不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容。

效率上truncatedelete快,但truncate删除后不记录mysql日志,不可以恢复数 据。

 

Delete from 表名 where id = 1

 

truncate table 表名

Sql种类-数据查询语言DQL

对数据库中表中的数据进行查询的,可以按不同的条件来检索数据

 

Select * from 表名 where条件

 

distinct去除相同的数据

select  distinct typeName from productcate

Sql种类-数据控制语言DCL

是对数据库中的对象权限进行设置和取消等操作,可以提高数据库的安全性

 

1.distinct去除相同的数据

例:select  distinct列名 from表名

2.group by 分组,分组一般是与函数结合使用(min max sum avg count)

group by 带条件不是使用where是使用having

例:select sex from test group by sex ;

select  要统计的字段 from 表名group by 要统计的字段  

3.sum 计算总和

例:select sum(列名) from表名

select sum(salary) from salary

count()统计条件过滤后总数

例:select count(*) from表名 where条件

avg(要统计的字段)统计字段平均值

select avg(salary) from salary

select avg (要统计的字段) from表名

 

 4.max找出字段最大值

select max(salary) from salary

select max(要统计的字段) from表名

 

 min找出字段最小值

select min(salary) from salary

select min(要统计的字段) from表名

 

comment  注释

limit 下标,查询个数

select * from dept limit 0,3

select * from 表名 limit 0,3

default  默认值       NULL DEFAULT      默认为null

exists in的区别

如果主表数据大,子表数据小,IN来查询,效率高

如果主表数据小,子表数据大,EXISTS来查询,效果高

select * from person where id in(select id from person_1 where id > 3)

select * from person p where exists (select * from person_1 p1 where p.id = p1.id and p1.id > 3)

 

 

  内连接查询

      select *from number p inner join number_1 p1 on n.id = n1.id

 

外连接查询

   左外连接   不管是否符合条件,左边表记录都会显示.右边表要符合条件才会显示  left JOIN

      select * from person p left join person_1 p1 on p.id = p1.id

   右外连接

select * from person p right join person_1 p1 on p.id = p1.id

show index from emp;  //查看表索引

column_name like 'Tdesc';   //查看表某个字段索引

EXPLAIN 用来查看查询语句是否使用索引,返回多少行,查询是否使用子查询,是否连接查询

  group by 带条件不是使用where是使用having

 

 

总数select count as totalcount from table1
求和select sum(field1) as sumvalue from table1
平均select avg(field1) as avgvalue from table1
最大select max(field1) as maxvalue from table1
最小select min(field1) as minvalue from table1

 

 

连接查询

条件 :where

group by : HAVING

join : on

        

mysql  sqlserver  oracle分页方式

limit  top   rownum

 

 

 

create table person_2 select * from person where sex = ''  

-- 复制表结构与符合条件的数据

 

create table person_3 select id ,sex from person             

-- 复制指定的字段与符合条件的数据

 

create table person_4 select * from person where id = 100;

insert into person_4 select * from person ;   

                

 -- 从一个表复制数据到另一个表

create table person_5 select id,sex from person where id = 100;

 

insert into person_5 select id ,sex from person where id = 2;

 

insert into  新表 select * from 旧表

 

索引:

     1.索引为了加快数据检索

     2.惟一性

     3.加快连接(inner join ,left join ,right join ,group by)

 

索引类型:

聚簇索引:  主键   属于聚簇类型     与数据绑定在一起,    一个表,只能有一个聚簇索引.自动会按索引把数据排序好

           1,插入速度慢

           2,存储空间变大

           3,修改速度变慢

           4,删除速度变慢

一个列可以创建多个索引

非聚簇     不是与数据绑定在一起     一个表,有多个非聚簇索引

 

show index from emp;  //查看表索引

show index from emp where column_name like 'name';   //查看表某个字段索引

explain select * from emp as a where  name like 'a%'

possible_keys 列  可能被用到的索引

key 列 查询过程中实际使用的索引

key_len 列 索引字段最大可能使用的长度。

 

网址链接:

http://blog.csdn.net/gevolution90/article/details/6856922

http://www.cnblogs.com/phpfans/p/4213096.html

http://blog.csdn.net/z69183787/article/details/46731679

http://mrxiong.blog.51cto.com/287318/1651098/

Mysql赋值

(1) set @a = 122;     set @b := 2;

     mysql中变量不用事前申明,在用的时候直接用“@变量名使用就可以了。

     第一种用法:set @num=1;set @num:=1;  这里要使用变量来保存数据,直接使用@num变量

     第二种用法:select@num:=1; select @num:=字段名from 表名where ...

     注意上面两种赋值符号,使用set时可以用“=”=”,但是使用select时必须用=赋值

(2)if(表达式,结果1,结果2)  表达式正确执行结果1,表达式错误执行结果2

    IFnull(a,结果1)   anull输出结果1a不为null输出结果a

 

(3)第一种方式:

   case  when变量=值1 then结果1

          when变量=值2 then结果2

          else结果3

     End

 

第二种方式:

case 变量

     when 1  then结果1

     when 2  then结果2

     else  结果3

end

数据类型

TINYINT        1字节        (-128127)          (0255)            小整数值

 

SMALLINT       2字节     (-32 76832 767)       (065 535)         大整数值

 

MEDIUMINT      3字节    (-8 388 6088 388 607) (016 777 215)      大整数值

 

INTINTEGER   4字节   (-2 147 483 6482 147 483 647) (04 294 967 295)大整数值

 

BIGINT         8字节   (-9 233 372 036 854 775 8089 223 372 036 854 775 807) (018 446 744 073 709 551 615) 极大整数值

 

FLOAT          4字节   (-3.402 823 466 E+381.175 494 351 E-38)0(1.175 494 351 E-383.402 823 466 351 E+38) 0(1.175 494 351 E-383.402 823 466 E+38) 单精度浮点数值

 

DOUBLE         8字节 (1.797 693 134 862 315 7 E+3082.225 073 858 507 201 4 E-308)0(2.225 073 858 507 201 4 E-3081.797 693 134 862 315 7 E+308) 0(2.225 073 858 507 201 4 E-3081.797 693 134 862 315 7 E+308) 双精度浮点数值

 

DECIMAL DECIMAL(M,D),如果M>D,为M+2否则为D+2依赖于MD的值 依赖于MD的值 小数值

 

CHAR         0-255字节          定长字符串

 

VARCHAR      0-255字节          变长字符串

 

TINYBLOB     0-255字节        不超过 255个字符的二进制字符串

 

TINYTEXT     0-255字节        短文本字符串

 

BLOB         0-65535字节      二进制形式的长文本数据

 

TEXT         0-65535字节      长文本数据

 

MEDIUMBLOB   0-16 777 215字节 二进制形式的中等长度文本数据

 

MEDIUMTEXT   0-16 777 215字节 中等长度文本数据

 

LOGNGBLOB    0-4 294 967 295字节 二进制形式的极大文本数据

 

LONGTEXT     0-4 294 967 295字节 极大文本数据

 

VARBINARY(M)                   允许长度0-M个字节的定长字节符串,值的长度+1个字节

 

BINARY(M)    M                 允许长度0-M个字节的定长字节符串

 

DATE       4        1000-01-01/9999-12-31 YYYY-MM-DD    日期值

 

 TIME       3        '-838:59:59'/'838:59:59' HH:MM:SS    时间值或持续时间

 

 YEAR       1         1901/2155               YYYY       年份值

 

 DATETIME   8       1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS混合日期和时间值

 

 TIMESTAMP  4       1970-01-01 00:00:00/2037 年某时 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

 

 

 

总结:

前言:

    1. 数据模型(通过E-R图表示)

       a). 层次数据模型

       b). 网状数据模型

       c). 关系数据模型(类似一张二维表,也就是JAVA当中的二维数组)

mysql是使用关系数据模型(所以MYSQL是关系数据库)

 

    2.

DDL 数据库定义语句(用于定义,常用的关键字有create drop alter)

DML 数据库操纵语句(用于操纵,常用的关键字有insert delete update select)

DCL 数据库控制语句(用于控制不同数据段权限,常用的关键字有grant revoke)

 

一、mysql安装与配置()区别LINUXWINDOWS)

  1. 下载MYSQL  https://dev.mysql.com/downloads/mysql/

  2. 安装MYSQL

  3. 配置MYSQL

  4. 启动与关闭MYSQL服务

  4. 卸载MYSQL

 

二、SQL基础

 

  1. 数据库创建      create database数据库名;

  2. 使用指定数据库      use数据库名;

  3. 查询所有数据库    show databases;

  4. 删除数据库      drop database数据库名;

  5. 查询所有数据表 (前提要进入到某一个数据库) show tables;

  6. 创建表 create table表名(字段 类型,字段 类型, ...);

  7. 删除表 drop table表名;

  8. 查看表结构  desc表名;

  9. 修改表字段:

     a). 修改字段类型 alter table表名 modify字段名 类型;

     b). 添加字段 alter table表名 add column字段名 类型;

     c). 删除字段 alter table表名 drop column字段名;

     d). 修改字段名 alter table change修改前字段名  修改后字段名 修改名字段类型;

     e). 上面的add新增一个字段默认会添加到数据表最后,change/modify不会改变字段位置;

         如果要修改字段位置可以在上面的语句后面加上 first/after字段名;

  10. 修改表名 alter table旧表名 rename新表名;

---------------------------------------------------------------------------------------

  11. 插数据   insert into表名(字段名,....) values (字段对应值,...);

  12. 修改数据  update表名,... set字段名=字段值,... where(可不要)  条件...;

  13. 删除数据  

     a). 一张表: delete from表名 where(可不要)条件,...;

     b). 多张表: delete表别名1,表别名2,... from1表别名1,2表别名2,.... where(可不要)条件...;

  14. 查询数据

     a). 普通查询 select字段,...(可用*代表所有) from 表名,.. where(可不要)条件...;

     b). 排序查询 select字段,...(可用*代表所有) from 表名,.. where(可不要)条件... order by字段名 desc/asc,...;

     c). 限制查询 select字段,...(可用*代表所有) from 表名,.. where(可不要)条件... limit开始下标,查询数量;

     d). 聚合查询 select聚合函数(包括max min count...) from表名,... where(可不以)条件...;

     e). 分组查询 select分组字段或聚合函数 from表名,... where(可不要)条件... group by字段,.... having条件,...;

     f). 左连接查询 select字段,... from1 left join2 on条件,...;

     g). 右连接查询 select字段,... from1 right join2 on条件,...;

     h). 子查询 select字段,... fromwhere字段 in/=/not in/exists  (select字段 from);

     i). 联合查询 select字段 fromwhere(可不要)条件... union/union all  select字段 fromwhere(可不要)条件...;

     j). 关联查询 select字段 from1 ,2 where条件,....;

     k). 结果集做为表查询   select字段 from (结果集)别名;

 

三、数据类型(你们帮忙补充)

    mysql           java

   1. int           int

   2. varchar       string

   3. double        DOUBLE

   4. float         FLOAT

   5. DATE

   6. datetime

   7. TIME

   8. TIMESTAMP

   9. BLOB

   10. text

 

四、运算符

   1. +   

   2. -

   3. *

   4. /

   5. %

---------------

   6. =

   7. !=  <>

   8. <

   9. >

   10. <=

   11. >=

   12. BETWEEN

   13. in

   14. is NULL

   15. is not NULL

   16. like

   17. rlike/regexp (正则表达式配置)

   18. not / !

   19. and / &&

   20. or / ||

   21. xor 异或

   22. &

   23. |

   24. ^

   25. ~

   26. >>

   27. <<

 

五、函数

  1. 自定义函数语法

     create function 函数(参数)

     returns 类型

     BEGIN

       return ;

     end

   2. 系统函数

     a). CONCAT(str1,str2,...)     字符串相加

     b). INSERT(str,pos,len,newstr)    替换

     c). LOWER(str)  全部转换小写

     d). UPPER(str) 全部转换成大写

     e). RIGHT(str,len)

     f). `LEFT`(str,len)

     g). LTRIM(str)

     h). RTRIM(str)

     i). TRIM(str)

     j). REPEAT

     k). substring

-----------------------------------

     l). CURDATE()

     m). CURTIME()

     n). NOW()

     o). week year `MINUTE`(time)  `SECOND`(time)  

     p). DATE_FORMAT(date,format)

-----------------------------------------

     q). IF

     r). IFNULL(expr1,expr2)

     s). case when 表达式 then ....  else(可无) end case;   case变量 whenthen .... else(可无) end case;

------------------------------------------

     t). database()

     u). version()

     v). user()

     w). MD5(str)

     x). `PASSWORD`(str)

 

 

六、视图

   1. create view 视图名 as结果集

   2. drop view 视图名

   3. alter view

   4. 视图优缺点

   注:视图数据可以修改?不能修改? 什么情况可以修改,什么情况不能修改。

 

七、索引

   1. 聚簇索引    (主键)只有一个;

   2. 非聚簇索引  多个;

   3. 一个索引可以建立在多个字段,称为组合索引;

   4. create index on表名(字段名,字段名);

   5. drop index on表名;

   6. 索引优缺点;

 

八、存储过程

   1. create PROCEDURE (in/out/inout参数名 参数类型,...)

      BEGIN

      end

   2. call

 

九、触发器

   1. create TRIGGER

   2. drop trigger

 

十、TSQL

   1. WHILE

   2. if elseif else

   3. loop

   4. DECLARE

   5. DEFAULT

   6. set  :=  into

   7. 游标(多个游标嵌套)

 

十一、定时器

   事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这里。

   查看当前是否已开启事件计划(调度器)有3种方法

     SHOW VARIABLES LIKE 'event_scheduler';

     SELECT @@event_scheduler;

     SHOW PROCESSLIST;

  可以通过以下方式开启或关闭计划:

 开启:SET GLOBAL event_scheduler =1

       SET GLOBAL event_scheduler = ON;  

 语法:

   CREATE EVENT [IF NOT EXISTS] event_name

ON  SCHEDULE schedule

[ON COMPLETION [NOT] PRESERVE]

[ENABLE | DISABLE]

[COMMENT 'comment']

DO sql_statement;

 

例:CREATE EVENT  JOB_ALARM  

        ON SCHEDULE EVERY 10 second  

     DO  

        insert into b(name,type) values('Name 5','Other 5');

 

 关闭事件任务alter event JOB_ALARM ON COMPLETION PRESERVE  DISABLE;

十二、事务

 

    事务  不是SQL语句    http://www.jellythink.com/archives/952

    MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关

       1.MyISAM:不支持事务,用于只读程序提高性能

       2.InnoDB:支持ACID事务、行级锁、并发   (支持事务)

       3.Berkeley DB:支持事务

概念:

    rollback  commit 都可以结束一个事务,(标志一个事务完成)

    CONTINUE表示遇到错误不处理,继续执行;  EXIT表示遇到错误时马上退出;  UNDO表示遇到错误后撤回之前的操作,MySQL暂不支持回滚操作;

    一个事务是一个连续的一组数据库操作,就好像它是一个单一的工作单元进行。换言之,永远不会是完整的事务,

    除非该组内的每个单独的操作是成功的。如果在事务的任何操作失败,则整个事务将失败。

    实际上,会将许多SQL查询到一个组中,将执行所有的人都一起作为事务的一部分。

 

    autocommit   0禁止自动提交,1自动提交,默认为1

    rollback   回滚事务    把一整个事务一起回滚,所有的SQL不执行

    commit     提交事务

    savepoint 设置事务保存点(名字)  

    rollback to 事务保存点名字  回滚事务

start TRANSACTION 开始新事务,自动提交上一个事务

 (1).事务的特性: ACID

 

     事务有以下四个标准属性的缩写ACID,通常被称为:

 

     原子性: 确保工作单元内的所有操作都成功完成,否则事务将被中止在故障点,和以前的操作将回滚到以前的状态。

 

     一致性: 确保数据库正确地改变状态后,成功提交的事务。

 

     隔离性: 使事务操作彼此独立的和透明的。

 

     持久性: 确保提交的事务的结果或效果的系统出现故障的情况下仍然存在。

 

  (2).事务级别    

     select @@tx_isolation;    查看事务级别

     SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

     set session transaction isolation level repeatable read;

 

     默认的行为(不带sessionglobal)是为下一个(未开始)事务设置隔离级别。

     如果使用GLOBAL关键字,语句在全局对从那点开始创建的所有新连接(除了不存在的连接)设置默认事务级别。

     你需要SUPER权限来做这个。使用SESSION关键字为将来在当前连接上执行的事务设置默认事务级别。

     任何客户端都能自由改变会话隔离级别(甚至在事务的中间),或者为下一个事务设置隔离级别。

     set session transaction isolation level read UNCOMMITTED;

     select @@tx_isolation;

     start TRANSACTION;  

 

十三、待定,DBA使用。

 

  

 面试题 http://wenku.baidu.com/view/ebcf5145a8956bec0975e33b.html?re=view

    http://www.cnblogs.com/mr-guan/p/5402726.html

    http://blog.itpub.net/23890223/viewspace-1223177/(纵转横,横转纵)

    http://www.cnblogs.com/jinshui/p/5545695.html 45道练习题


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值