mysql5.6的安装

版权声明:@徐小冠 https://blog.csdn.net/weixin_42114097/article/details/82356881

day1数据库 sql语句&mysql单表

今日任务:

  1. 数据库的介绍和安装(了解)
  2. 数据库的操作(理解下数据仓库的操作)
  3. 数据表的操作(理解***)
  4. 数据记录的增删改(掌握****)
  1. 数据库介绍&安装

 

    1. 什么是数据库

数据库:保存数据的仓库。它体现我们电脑中,就是一个软件或者文件系统。然后把数据都保存这些特殊的文件中,并且需要使用固定的语言(SQL语言/语句)去操作文件中的数据。

    1. 数据库介绍

我们开发应用程序的时候,程序中的所有数据,最后都需要保存到专业软件中。这些专业的保存数据的软件我们称为数据库。

我们学习数据库,并不是学习如何去开发一个数据库软件,我们学习的是如何使用数据库以及数据库中的数据记录的操作。而数据库软件是由第三方公司研发。

 

常见的数据库软件:

Oracle:它是Oracle公司的大型关系型数据库。系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、安全可靠的。但是它是收费的。

DB2:IBM公司的数据库,它是收费的。

SqlServer:微软数据库。收费

Sybase:Sybase公司的。 工具PowerDesigner 数据库建模工具。

MySql:早期由瑞典一个叫MySQL AB公司开发的,后期被sun公司收购,再后期被Oracle收购。

体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

 

Java开发应用程序主要使用的数据库:MySQL(5.6)、Oracle、DB2。

 

    1. 关系型数据库 

在开发软件的时候,软件中的数据之间必然会有一定的关系存在。比如商品和客户之间的关系,一个客户是可以买多种商品,而一种商品是可以被多个客户来购买的。

需要把这些数据保存在数据库中,同时也要维护数据之间的关系,这时就可以直接使用上述的那些数据库。而上述的所有数据库都属于关系型数据库。

关系型数据:设计数据库的时候,需要使用E-R实体关系图来描述。

E-R 是两个单词的首字母,E表示Entity 实体   R表示Relationship  关系。

 

实体:可以理解成我们Java程序中的一个对象。比如商品,客户等都是一个实体对象。在E-R图中使用 矩形(长方形) 表示。

属性:实体对象中是含有属性的,比如商品名、价格等。针对一个实体中的属性,我们称为这个实体的数据,在E-R图中使用椭圆表示。

关系:实体和实体之间的关系:在E-R图中使用菱形表示。

 

需求: 使用E-R图描述 客户、商品、订单之间的关系。

 

 

    1. 数据库的安装和卸载
      1. 安装:
  1. 在今天的资料下有Mysql的安装包,找到如下所示文件后双击

  1. 双击之后会出现如下图所示界面,询问是否同意,将我同意的选框勾选上,然后点击next,如下:

 

  1. 选择自定义安装,点击下一步

  1. 根据电脑配置选择要安装的MySql版本,然后点击next

 

  1. 如果出现当前界面,则可以配置安装目录,如果出现的不是这个界面请点击Back返回

  1.  
  2. 点击back返回后,点击高级选项,配置安装路径,配置成功后点击下一步

说明:安装路径最好不要有中文和空格以及特殊符号。

注意:一定要保证Install  Directory和data  Directory保存的路径一致,这样才可以保证卸载MySql的时候会很方便。

 

  1. 当出现绿色对号时表名安装成功,然后点击下一步
  2. 开始配置mysql,点击下一步

 

  1. 配置MySql开发模式以及端口号相关配置,然后点击下一步

说明:MySql默认端口是3306.这里不要修改,我们访问数据库的时候输入端口号3306即可。

  1. 设置密码账户信息,然后点击next

 

  1. 使用默认配置就可以了,然后点击下一步

 

  1. 日志配置

  1. 点击Execute安装

  1. 全部画上绿色对勾之后,安装成功点击finish->next->finish

  1. 配置环境变量,找到MySql的安装目录的bin目录下,将路径复制下来

  1. 打开电脑的高级设置中的 path 路径,将复制的路径添加进去

 

      1. 测试:
  1. 查看windows服务 ,mysql数据库是否启动。

第一种查看方式:

选择服务:

这样就找到了MySql服务了:

第二种查看方式:

按住window+R键,打开运行窗口并输入services.msc:

同样找到MySql服务:

 

2、打开dos窗口测试数据库:

按住window+R键,打开运行窗口并输入cmd:

在打开的dos窗口中输入mysql -u root -p命令:

如果出现如上图所示信息,说明MySql数据库安装成功。

显示所有的数据仓库:show databases;

 

 

注意:书写的所有sql语句, 要求结尾必须有分号

使用exit可以断开连接:

 

      1. 卸载:

1、找到mysql的安装目录:在mysql的安装目录中。找到my.ini 文件。

找到datadir 并且记录路径。

datadir="D:/MySoft/MySql2/data/Data/"

 

说明:

  1. datadir路径是用来保存mysql的数据文件的目录,以后我们向Mysql数据库存储的数据都会存放到这个路径;
  2. 在安装数据库的时候,要求这个路径的下的data文件夹要和数据库在同一文件夹下,这样在卸载的时候会比较方便,直接删除即可。如果没有安装到同一目录,那么找到该data文件夹进行删除;
  1. 在电脑左下角window图标处-----》右键----》选择控制面板
  2. 找到程序和功能;
  3. 找到Mysql---->卸载mysql

5、删除mysql的安装目录,删除mysql的数据文件目录datadir.第一步中记录的文件目录

注意:mysql默认的数据文件目录,在ProgramData这个目录下,并且ProgramData这个目录是隐藏目录,需要设置显示隐藏目录。

删除ProgramData下的mysql的相关目录。

6、打开运行窗口-----》输入regedit----》打开注册表-----》删除

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL文件夹

注意:一般情况下执行5步即可,如果还不能安装,就执行步骤6,运行regedit,试着删除注册表的数据或者也可以使用360或者安全管家清理垃圾试试。

 

  1. 数据库的操作

学习对数据库的操作,首先要学习mysql数据库的内部存储方式。

    1. mysql数据库的内部存储结构

当一台电脑安装了mysql数据库软件,这台电脑就可以称为一个数据库服务器。用户可以连接这台电脑中的mysql数据库。

用户通过在dos窗口中输入:

  mysql [-h 连接的主机ip -P端口3306] -u 用户名 -p 密码

 

      mysql -h 192.168.1.251 -P 3306 -u root -p 1234 。

      如果连接的是本机:可以省略 -h  -P  主机IP和端口。这样就可以登录mysql数据库了。

当一个电脑安装了数据库之后,那么这台电脑中就可以使用数据库来保存数据了:

具体理解如下图所示:

 

说明:

1、一个数据库软件可以安装多个数据仓库,数据仓库可以简称为数据库,在数据库中创建数据表来保存数据。

2、数据库的一行称为记录,可以理解成java实例化后的一个对象。

3、数据库的一列称为字段,理解成java类中的属性。

4、一个数据仓库中是可以有多张表的。

 

未来关于数据库我们学习的目标:

  1. 对数据库进行增删改查(CRUD);(主要对整个数据库进行操作,比如删除一个数据库和增加一个数据库)。create(增) read(查) update(改) delete(删)
  2. 对数据表结构进行增删改查(CRUD);(主要对整张表,比如删除一张表和增加一张表)。
  3. 对表中的数据进行增删改查(CRUD);(主要对表中的具体数据,比如删除一个表中的一行记录和增加一行数据)。

注意:关于对数据库表的操作,查询是开发中最难的,也是最重要的;

总结:

一个数据库软件,可以管理多个数据仓库(数据库)。

一个数据仓库可以管理多张数据表。

每个数据表中可以存储多行数据记录。

提示:每创建一个数据仓库,会在mysql的数据文件目录(data)中多一个文件夹。

    1. SQL语句

SQL语句:Structured Query Language结构化查询语言。SQL语句不依赖于任何平台,对所有的数据库是通用的。学会了SQL语句的使用,可以在任何的数据库使用。SQL语句功能强大、简单易学、使用方便。

特点:

SQL语句是一个非过程性的语言,每一条SQL执行完都会有一个具体的结果出现。多条语句之间没有影响。

过程性语言:例如java。

int a = 10;

int b = 20;

int sum = a +b;

SQL语句:主要是操作数据库,数据表,数据表中的数据记录

SQL是用来存取关系数据库的语言,具有定义、操纵、控制和查询关系型数据库的四方面功能。

所以针对四方面功能,我们将SQL进行了分类。

    1. SQL分类

DDL (数据定义语言)

数据定义语言 - Data Definition Language

用来定义数据库的对象,如数据表 和数据库

create drop alter truncate(清空数据记录)等

DML  (数据操纵语言)★★★

数据处理语言 - Data Manipulation Language

在数据库表中更新,增加和删除记录

如 update(更新), insert(插入), delete(删除) 不包含查询

DCL (数据控制语言)

数据控制语言 – Data Control Language

指用于设置用户权限和控制事务语句

如grant(设置权限),revoke(撤销权限),begin transaction等

DQL (数据查询语言)(★★★★★)

数据查询语言 – Data Query Language

数据表记录的查询。

select。。。

 

我们学习SQL语句的路线:

  1. 学习SQL数据对数据库的操作;
  2. 学习SQL语句对数据表整体结构的操作;
  3. 学习SQL语句对数据表中的数据记录操作(★★★★★);
  4. 数据仓库中的数据备份和恢复;

 

    1. 数据仓库的操作:(★)

在操作数据仓库之前,一定要先确认mysql 数据库是否已经启动:

1、运行窗口,输入 services.msc 打开 服务窗口

 

如果没有启动,选中mysql右键启动。

 

  1. 连接到数据库上:

 

      1. 查询所有数据库(了解)

目标:

1、如何查询mysql数据库软件的所有数据仓库?

2、如何查看具体数据仓库的编码?

 

1、查询当前所有的数据库:

语法: show databases;

information_schema数据库:

information_schema数据库是在mysql的版本5.0之后产生的,一个虚拟数据库,物理上并不存在。我们可以查看数据存在目录(data),并看不到information_schema文件夹。可以看出并不存在information_schema数据库。

其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。

performance_schema 数据库:

存储引擎:命名PERFORMANCE_SCHEMA  ,主要用于收集数据库服务器性能参数。

例如:保存历史的事件汇总信息,为提供MySQL服务器性能做出详细的判断通过以上得到的信息,DBA能够较明细得了解性能降低可能是由于哪些瓶颈

mysql 数据库:

mysql库是系统库,里面保存有账户信息,权限信息,存储过程,event,时区等信息。

test 数据库:

这个是安装时候创建的一个测试数据库,和它的名字一样,是一个完全的空数据库,没有任何表,可以删除。

 

2、查看当前数据库的创建方式:查看数据库的编码表。

语法:show create database 库名;

说明:

  1. 当我们创建数据库的时候,如果没有指定编码表,默认使用的是安装数据库软件时指定的编码表;

2)每一条sql语句需要有 ; 分号,表示结束。

      1. 创建数据库(了解)

创建数据库的语法:

 

1、create database 数据库名 :由于创建数据库时没有指定编码表,因此会使用安装数据库时默认的编码表

2、create database 数据库名 character set 编码表名; 创建数据库会使用指定的编码表

注意:如果创建数据库指定的编码表是utf8,记住不能写utf-8.。utf-8 是错误

(mysql不认识utf-8)。

java中的常用编码        : UTF-8; GBK;GB2312;ISO-8859-1;

对应mysql数据库中的编码: utf8;  gbk;gb2312; latin1;

 

需求:

1、创建一个名称为mydb1的数据库。

2、创建一个使用utf8字符集的mydb2数据库。

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

1、创建一个名称为mydb1的数据库。

 

 

  1. 创建一个使用utf8字符集的mydb2数据库。

 

      1. 删除数据库

语法:drop database 数据库名;

 

需求:删除前面创建的mydb1数据库

      1. 修改数据库编码集

语法:alter database 数据库名称 character set 字符集;

需求:修改mydb2字符集为gbk

 

 

      1. 切换数据库和查看正在使用的数据库

当我们创建好了数据库之后,最终需要给数据库中添加数据表。然后给数据表中添加数据。

在需要添加数据表之前,我们需要先切换到这个数据仓库中。

 

1、切换数据库:

语法: use 数据库名;

 

  1. 查询当前正在使用的数据库:

有时过于频繁的切换数据库就会导致忘了正在使用哪个数据库,可以使用查看语句。

语法:select database();

【示例】

当前正在使用的数据库名是mydb2

 

重点练习: 创建库、删除库、切换库的语句

2.4.6数据库操作语句小结

  1. 创建

create database 数据库名;

  1. 查看所有数据库

show databases;

  1. 查看指定数据库建表语句及字符集

show create database  数据库名;

  1. 删除数据库

drop database 数据库名;

  1. 修改数据库字符集-了解

alter database 数据库名 character set 字符集;

  1. 切换数据库

use 数据库名;

  1. 查看当前数据库名称

select database();

    1. 数据表结构的增删改查(★★★)

有了数据仓库之后,我们要想保存数据,这时必须在数据库中先有数据表。

接下来我们就开始学习数据表的增删改查操作。

      1. 数据表的创建

注意:创建表的时候,一定要先切换到某一个具体的数据库因为只有某一个具体的仓库下才会有数据库表。

语法:use 数据库

创建数据库表的语法:

之前创建类的方式:

Class Student

{

String name

Int age

}

语法:

create table 表名(

列名 类型(长度), ----某一列,存放的数据是什么类型.长度表示允许列名存储数据的最大长度.

列名 类型(长度),

..........................

列名 类型(长度)---最后一个列不需要逗号。

);

 

注意:

1)一个数据表可以存在很多列(字段),每列具有类型和长度。

2)多个列之间使用逗号隔开,最后一个列不需要输入逗号。

3)创建表的时候,一定切换到某一个具体的数据库。

use 数据库名。

 

数据类型:

Java中的数据类型和MySql中的数据类型是有些不一样的,那么接下来我们就开始学习下MySql数据库中的数据类型。

  1. 字符类型
  1. varchar(列的长度):列的长度可变。  

name varchar(10):设置name字段的长度为10,name的储存长度在10以内都可以,并且会自动适应长短。

补充:保存字符个数:0-255.

  1. char(列的长度):列的长度固定,不能改变。

name char(10):设置name字段的长度为10,name的存储长度在10以内,如果不满10,用空格补足。

 

举例:假设我们要存储 abcd 这个字符串。

如果定义成varchar(10) 这时储存的数据不足10个,这时会把多余取消,只占4个。

如果使用char(10),它会把存储的数据添加到10个长度。剩下的用空格补足。

如果存储的长度超出了表中列的长度,存储报错。

总结:char 的性能好。 varchar可以节省空间。

通常的情况,如果长度不固定,我们使用varchar。

使用char的情况。当某个字段的长度固定的时候,可以采用char。例如身份证号或者手机号

  1. 大数据类型--了解
  1. BLOB-字节:存放二进制内容,即字节数据。

一般可以存放视频、音频、图片等。

  1. TEXT:保存字符数据,存放大文本。存放可以超过255个字符。

通常我们不会把文件存储到数据库。(占用资源,操作速度慢)

我们会把文件的路径(通常存放在本地磁盘)存到数据库中。

  1. 数值型
  1. 整形:TINYINT 、SMALLINT、INT、BIGINT
  2. 小数:FLOAT(单精度)、DOUBLE(双精度)

 

  1. 位数据类型 (逻辑性)--了解 就是java中的boolean
  1. BIT: 1 或者0组成的数据。

1 表示true

0表示false

  1. 日期型
  1. DATE:日期----只有日期, 2013年08月19日
  2. Time:时间-----时分秒,12时24分30秒
  3. DateTime:日期和时间都包含,年月日时分秒
  4. TIMESTAMP :日期和时间都包含 ------->当表中其他数据被修改的时候,那么此时时间就会自动更改为更改数据时的时间。

举例:

id  name     updatetime

1   lisi       12时24分30秒

 

如果修改name的值为zhangsan,此时时间是: 12时25分00秒.

修改完成之后,updatetime的值就会变为12时25分00秒.

 

【示例】

需求:创建雇员表,包含雇员的姓名,密码,性别, 生日信息。

注意如果刚连数据库的话,需要先切换一个数据库才能进行建表

建表语句如下:

create table emp(

name varchar(50),

password varchar(50),

sex char(10),

birthday date

);

建表如下:

 

      1. 查看表(掌握)
  1. show tables : 查看该数据库的所有的表。

  1. desc 表名:查看表的列的信息(查看表结构)。

 

      1. 单表创建时约束(掌握)

约束:通过某些限制,来规定当前某张数据表中的列数据是否可以为null,是否可以重复,当前某一列中的数据在当前表中必须唯一等限制。

 

约束的目的:只是为了保证存储在数据表中的数据完整性和有效性。从而可以确保数据库满足业务规则。

约束语法:

列名 数据类型 约束条件

 

1、主键约束:primary key

  主键一般表示数据库中的某一列,使用这一列来区分数据表中的数据和其他数据不同。这一列的数据在整个数据表中是不允许重复的,并且不为空

  注意:只要某一列被声明为主键,那么这个列就不能重复,并且不能为空。

举例:创建一张表,保存学生的信息,需要在表中创建一列,来区分当前的这个一行数据和其他的行不同。这个列称为主键。这里可以将主键理解为学生学号。

在实际开发中,通过主键是可以快速找到要查找的数据。

主键的定义格式:

列名  列的类型  primary key  

 

补充:自增长 auto_increment

如果表的主键是int 类型,这时可以在主键的后面添加 auto_increment ,这时表中这一列在添加数据的时候,会自动的增长。

 

示例:

create table 表名 (

id int primary key auto_increment,

name varchar(20),

………….

);

 

2、唯一约束:unique

      该列(字段)的值不允许重复。可以为null(null不算重复)。

      解释:一张表中可以有很多个唯一约束。

写法: 列名 类型(长度) unique

【示例】

create table 表名 (

id int primary key auto_increment,

name varchar(20) unique,

………….

);

唯一约束和主键约束的区别

1、唯一约束可以是空(null)。 但是主键约束不能为空

2、一张表中只能有一个主键,但是唯一约束可以有多个

 

  1. 非空约束,not null。表示该列的内容不允许为空。该字段的值不能为空。

写法: 列名 类型(长度) not null,

【示例】

create table emp(

id int primary key auto_increment,

name varchar(20) unique,

age int not null,

………….

);

 

【示例】

需求:创建一个员工表2,员工有工号(整型)、姓名、密码、性别、生日。

1、要求工号是主键并且设置主键自增长;

2、姓名必须是唯一性且不为空的;

3、密码必须是非空的;

建表语句如下:

create table emp2(

id int primary key auto_increment,

name varchar(50) unique not null,

password varchar(50) not null,

sex varchar(50),

birthday date

);

建表结构如下:

 

查看数据库的表:

 

查看表结构:

 

 

 

      1. 数据表结构修改

修改数据表:

可以对表名、表中的列名、列的类型等进行增删改。

 

语法:alter table 表名 增/删/改 列名 类型(长度) 约束;

 

1、增加列 语法: alter table 表名 add 列名 类型(长度) 约束;

 

需求1:在emp2表上增加salary列。

alter table emp2 add salary double;

需求2:在emp2表上增加age列。

alter table emp2 add age int;

 

 

  1. 修改现有列类型、长度和约束

语法:alter table 表名 modify 列名 类型(长度) 约束;

需求1:修改birthday列不能为null。

alter table emp2 modify birthday date not null;

需求2:修改name列的长度为60。

alter table emp2 modify name varchar(60) unique not null;

修改的语句:

 

  1. 修改现有列名称 。

语法:alter table 表名 change 旧列名 新列名 类型(长度) 约束;

需求:修改列名name变为username。

alter table emp2 change name username varchar(60) unique not null;

 

4、删除现有列 语法:alter table 表名 drop 列名 ;

需求:删除age列。

alter table emp2 drop age;

删除语句:

 

5、修改表名 语法: rename table 旧表名 to 新表名;

需求:将emp2表名修改为person表

rename table emp2 to person;

修改语句:

 

6、修改表的字符集 语法:alter table 表名 character set 编码集;

需求: 将emp的编码修改成utf8。

第一步:查询此时表的编码。

show create table emp;

查询语句:

第二步:将emp的编码修改成utf8

alter table emp character set utf8;

修改语句:

 

      1. 数据表删除(重要)

语法:drop table 表名;

需求:删除emp表。

drop table emp;

删除语句:

 

      1. 操作数据表结构语句小结

数据表创建

create table 表名(

列名 数据类型 约束 ,

列名 数据类型 约束,

………

);

 

查看表

show tables:查看所有的表

show create table 表名: 查看建表语句以及字符集

desc 表名:查看表结构。

 

 

修改表的语句

alter table 表名(add|modify|drop|change) 列名 类型(长度) 约束。-了解

rename table 旧表名 to 新表名-了解

删除表

drop table 表名

 

    1. 简单数据表内容的增删改(掌握)

对数据表的常见操作简称:CRUD。

create(增)  read(查)  update(更改) delete(删除)

      1. insert语句----向数据表插入数据

2.6.1.1方式一:全写

语法:insert into 表名 (列名1,列名2,列名3......)  values (值1,值2,值3......);

注意事项:

1、值与列一一对应。有多少个列,就需要写多少个值。如果某一个列没有值。可以使用null。表示插入空。

2、值的数据类型,与列被定义的数据类型要相匹配。并且值的长度,不能够超过定义的列的长度。

3、字符串:插入字符类型的数据,建议写英文单引号括起来。在mysql中,使用单引号表示字符串。

4、date 时间类型的数据也得使用英文单引号括起来: 如’yyyy-MM-dd’,’yyyy/MM/dd’ 。

5、如果主键是自动增长,可以直接插入数值null。

 

注意:使用   select * from 表名 ---查看该表的所有信息。

练习一:给person表中的所有列插入数据。

插入语句:

 insert into person(id,username,password,sex,birthday,salary)

  values(null,'zhangsan','123','nan','1992-8-19',12000);

 

2.6.1.2方式二:省略部分列

insert into 表名(列名,列名,列名。。。。) values(值,值,值。。。。)

注意:

可以省略部分列名。某一列 有默认值,或者允许为空,才可以省略。

 

主键是自增长的认为是有默认值的。也可以省略

注意:在插入数据的时候,如果某些列可以为null,或者是自动增长的列,或者有默认值的,在插入的时候可以省略。

练习:给表中不为空的列插入数据。

插入语句:insert into person(username,password,birthday) values('suoge','123','1995-10-19');

2.6.1.3方式三:省略所有的列(掌握)

insert into 表名 values(值,值,值,值);

1、表中有多少列,就有多个值。

2、按照表的结构,列和值去对应。 desc 表名 得到列的顺序。 从上倒下,对应的值,从左到右插入数据。

注意:如果给表中的所有列插入数据,这时可以省略表名后面的列名,直接写values。

插入语句:

insert into person values(null,'wangwu','123','nv','1987-8-9',13000);

 

总结:

1)如果主键:是自增长。不需要人工赋值(可以给值null)。数据库会按照自己的算法,为主键填充值。

2)通常遇到主键自增长,人工赋值的时候,赋值null。mysql会自己把null替换成新的值

      1. update语句---数据记录修改操作

语法: update 表名 set 列名=值,列名=值.... [ where条件语句 ];

注意事项:

1、如果不加条件语句,将会修改某一列的所有值。

2、一般修改数据时,都需要增加条件。(重点)

 

练习一:修改person表中的所有用户的password 为 abcdef。

分析:因为要修改所有的用户,所以这里不需要添加条件。

更新语句:update person set password='abcdef';

练习二:修改姓名为zhangsan的这个用户的薪水 88888。

分析:由于姓名要求是zhangsan,所以这里条件就是username=’zhangsan’

更新语句:update person set salary=88888 where username='zhangsan';

 

练习三:把id为 3 的用户的username和password修改为 zhaoliu。

修改语句:

 update person set username='zhaoliu',password='zhaoliu' where id=3;

2.6.3delete语句-----删除表中数据的语句

语法:delete from 表名 [where条件语句]

注意:

  1. 如果删除表中的记录时,没有添加where条件,这时会把表中的所有数据删除。表依然存在,是空的表。
  2. delete是删除行的数据。

练习1:删除person表中username为zhaoliu的用户记录。

删除语句: delete from person where username='zhaoliu';

练习2:删除表中所有记录。

删除语句:delete from person;

练习3:向person表中在添加一个新的数据。

插入语句:insert into person(username,password,birthday) values('tianqi','123','1990-9-7');

问题:我们发现使用delete语句将数据库表中所有的数据删除之后,在新添加的数据之后,id是在原来基础上继续递增,而不是1。那么我们想让新添加的数据id从1开始,怎么办呢?

2.6.4truncate 语句----删除数据

truncate table 表名:

先删除表,再创建表,等于将数据全部删除了。也就是说上述语句执行时会把表的所有内容都删除掉,然后在创建一个新的表。

性能问题: truncate table的性能相对来说更好,尤其删除的数据越多,越明显。

练习1:向person表中插入数据,然后使用:truncate table 表名。 来删除所有的数据。

插入语句:

 

删除语句:

 

如果要删除一张表中的所有数据,也可以使用 truncate table 表名;

执行时会把表的所有内容都删除掉,然后在创建一个新的表。

truncate 缺点:不能有条件的删除。

delete 是逐行删除,并没有恢复初始化值。

2.6.5面试题1:

delete删除表中的数据时没有加where 条件,会删除表中的所有数据,它与truncate 有什么区别?

 

  1. DELETE
     ・DML语言

・数据还可以找回来,恢复回来
 ・可以有条件的删除。DELETE FROM 表名 WHERE 条件

2.TRUNCATE TABLE
 ・DDL语言

・数据不可以恢复
 ・先将整个表删除,再重新创建

 ・删除速度比delete快。

  语法: TRUNCATE TABLE 表名 或者 TRUNCATE 表名

2.6.6面试题2:

delete from person; 和 drop table person; 有什么区别:

 

 

delete from person; 把person表中的所有数据全部删除,但是person的表还存在。还可以向表中继续添加数据。

drop table person; 把person数据表从数据库中删除。表已经不存在,不能再向表中添加数据。

 

3.可视化工具的介绍

在dos窗口中使用sql语句操作mysql数据库相对来说,太麻烦了,我们在实际开发中不会使用dos窗口来操作的,一定要使用可视化工具来操作mysql数据库,而会有多种可视化工具来操作mysql数据库,比如:Navicat、SQLyog等。我们这里使用Navicat可视化工具。

 

  1. 解压和安装:

双击 安装软件一路下一步安装(注意要记住自己的安装路径!!!!!!!!)

安装完成后  双击注册机

找到Nacicat下的启动软件

点击打开后,显示OK 激活成功!

然后点击关闭即可。

 

  1. 如果是第一次使用,会弹出一个提示框,开机检查更新,我们不需要更新。

 

  1. 关闭之后,点击软件左上角的连接按钮,选中MySql:

    

 

然后就会弹出如下界面:

  1. 简单熟悉下可视化工具。

  1. 一般的可视化工具,都能从界面看到 数据库-》数据库表-》表数据。

  1. 在可视化工具中可以编写sql语句运行

查询结果:

  1. 在可视化工具中给内容添加注释快捷键是:ctrl+/

 

这样我们就简单熟悉了下可视化工具,接下来我们所有的操作都会在该可视化工具中进行操作。

 

 

4.查询

4.1数据表记录的查询 (掌握)

在企业中数据库运用最多的就是数据库中对于表记录的查询。

 

准备工作:

创建数据库,并向数据库表中插入数据。

create database day02;

 

use day02;

 

create table student(

id int primary key auto_increment,

    name varchar(32) not null,

age int ,

gender varchar(10) not null,

score double not null,

birthday date

);

 

insert into student (id,name,age,gender,score,birthday) values(null,'zhangsan',23,'male',98.99,'1990-09-09');

insert into student (id,name,age,gender,score,birthday) values(null,'lisi',23,'男',56.99,'1990-02-09');

insert into student (id,name,age,gender,score,birthday) values(null,'王五',24,'女',75.99,'1988-01-01');

insert into student (id,name,age,gender,score,birthday) values(null,'赵六',25,'男',80.99,'1980-11-12');

insert into student (id,name,age,gender,score,birthday) values(null,'柳岩',null,'女',84,null);

 

Navicat -- 运行选中的行的快捷键 ctrl + shift + r;

4.1.1语法一:查询数据库中的某张表的所有数据

语法:select * from 表名;

表示查询表的所有信息。会把表的所有的列,所有的行都列出来。

说明:

  1. select 表示选择的意思;
  2. * 表示所有的数据;
  3. from 表示从哪个表中选择;

 

需求:查询学生的所有信息。

查询操作和结果:

4.1.2语法二: 查询某张表中指定的列

语法: select 列名,列名...  from 表名;

说明:显示指定列数据。列出所有行信息。

需求:查询所有学生的姓名和成绩。

 

4.1.3语法三:按条件查询

语法:select 列名,列名..... from 表名  where 条件;

说明:查找符合where条件的数据。

作用:过滤,只有符合条件的,才去列出相应的信息。

 

需求:查询表中年龄大于等于24岁的学生信息。

4.1.4运算符:

 

  1. >(大于)  <(小于)  >=(大于等于)  <=(小于等于)  =(相等)  <>或者!= (不相等)

 

需求:查询年龄不是25岁的学生。

 

 

2)

and 逻辑与 ,多个条件同时成立。

or 逻辑或 ,多个条件任意一个成立。

not 逻辑非 ,相反的意思。

需求一:查询年龄>23,并且成绩>80的同学信息。

 

 

 

需求二:查询成绩在80~100(包含)之间的学生信息。

 

 

  1. 区间:between  ...  and ... 在两者之间取值。  格式:列名 between 开始值 and 结束值;

注意:前面那个数即开始值要比后面那个数即结束值要小 。

例如:between 70 and 80 在70和80之间。

    等价于 >=70  and  <=80    

age >=24 and age<=50 等价于 age between 24 and 50

 

原理说明图:

 

 

需求:查询成绩在80~100(包含)之间的学生信息。

 

 

 

  1. in(值1,值2,值3) 在指定值中任意取。

 举例: in(70,80,90) 值可以是70、80或者90

 使用格式:

where 列名 in (值,值,值.......);

等价于

where 列名=值 or 列名=值 or 列名=值 .......

 

需求:查询年龄为18,23,25的同学信息。

 

 

  1. 模糊查询:like '模糊查询部分'

 表达式有两个占位符:

A:  % 表示零或任意多个字符 ;

B:  _ 任意单个字符;

例如:  name like '张%' 所有姓张学员。

name like '%张%' 只要有张就可以。

name like '张_' 所有姓张名字为两个字学员。

name like '_张_'  只有中间是张,前面一个字,后面一个字。

 

需求:查询所有含有 岩 的学生信息。

注意:含有某个值:  %xx%

 

6)is null 判断该列值是否为空。

sql中对null的判断,不能写 = null   在sql 中 null = null 结果不成立。 正确格式:is null

不是空 : is not null。

 

需求1:查询没有生日学员信息。就是生日是null。

 

需求2:查询有年龄学员信息。就是年龄不是空。

 

4.1.5语法四 :过滤重复数据:

查询排重:select distinct 列名 from 表名 [where 条件];

说明:distinct: 去重复。显示distinct后面列的内容,并且过滤掉重复的数据。

需求:显示不重复的年龄。

 

 

4.1.6语法五 :对查询的结果进行排序:

使用order by 子句排序查询结果。

语法:select * from 表名 order by 列名1  asc|desc,列名2(asc|desc),列名3(asc|desc) 。。。。。;

按照列名1,列名2,列名3 进行排序输出。

asc是升序排列,desc是降序排列。默认是asc升序。

 

按照第一列进行排序,如果第一列相同,按照第二列在进行排序。

 

注意: order by a asc,b  asc

a, b              

1, 2

1, 3

4, 5

3, 1

结果:

       1,2

       1,3

       3,1

       4,5

 

需求:

1、对成绩排序后输出。

2、对年龄排序按从高到低(降序)的顺序输出。

3、对学生年龄按照降序排序,年龄相同按照成绩降序。

 

1、对成绩排序后输出。

 

 

  1. 对年龄排序按从高到低(降序)的顺序输出。

 

 

 

3、对学生年龄按照降序排序,年龄相同按照成绩降序。

 

 

4.1.7别名:可以对查询出来的列名起别名

语法:select 列名 as 别名,列名 as 别名,列名 as 别名.... from 表名 where 条件;

注意:在使用别名的时候,as 关键字可以省略。

 

 

需求1、给年龄和分数起别名。

 

需求2、省略关键as 再次查询。

 

4.1.8面试题:

1、select age , score from student;

2、select age score from student;

上述SQL语句有什么区别?

第一个Sql语句查询结果如下图所示:

查询结果有两列,分别是age和score。

第二个Sql语句查询结果如下图所示:

查询结果只有一列,其实显示的数据是age列,数据上面的名字是别名score。

 

 

猜你喜欢

转载自blog.csdn.net/weixin_42114097/article/details/82356881