day1数据库 sql语句&mysql单表
今日任务:
- 数据库的介绍和安装(了解)
- 数据库的操作(理解下数据仓库的操作)
- 数据表的操作(理解***)
- 数据记录的增删改(掌握****)
数据库:保存数据的仓库。它体现我们电脑中,就是一个软件或者文件系统。然后把数据都保存这些特殊的文件中,并且需要使用固定的语言(SQL语言/语句)去操作文件中的数据。
我们开发应用程序的时候,程序中的所有数据,最后都需要保存到专业软件中。这些专业的保存数据的软件我们称为数据库。
我们学习数据库,并不是学习如何去开发一个数据库软件,我们学习的是如何使用数据库以及数据库中的数据记录的操作。而数据库软件是由第三方公司研发。
常见的数据库软件:
Oracle:它是Oracle公司的大型关系型数据库。系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、安全可靠的。但是它是收费的。
DB2:IBM公司的数据库,它是收费的。
SqlServer:微软数据库。收费
Sybase:Sybase公司的。 工具PowerDesigner 数据库建模工具。
MySql:早期由瑞典一个叫MySQL AB公司开发的,后期被sun公司收购,再后期被Oracle收购。
体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
Java开发应用程序主要使用的数据库:MySQL(5.6)、Oracle、DB2。
在开发软件的时候,软件中的数据之间必然会有一定的关系存在。比如商品和客户之间的关系,一个客户是可以买多种商品,而一种商品是可以被多个客户来购买的。
需要把这些数据保存在数据库中,同时也要维护数据之间的关系,这时就可以直接使用上述的那些数据库。而上述的所有数据库都属于关系型数据库。
关系型数据:设计数据库的时候,需要使用E-R实体关系图来描述。
E-R 是两个单词的首字母,E表示Entity 实体 R表示Relationship 关系。
实体:可以理解成我们Java程序中的一个对象。比如商品,客户等都是一个实体对象。在E-R图中使用 矩形(长方形) 表示。
属性:实体对象中是含有属性的,比如商品名、价格等。针对一个实体中的属性,我们称为这个实体的数据,在E-R图中使用椭圆表示。
关系:实体和实体之间的关系:在E-R图中使用菱形表示。
需求: 使用E-R图描述 客户、商品、订单之间的关系。
- 双击之后会出现如下图所示界面,询问是否同意,将我同意的选框勾选上,然后点击next,如下:
- 选择自定义安装,点击下一步
- 根据电脑配置选择要安装的MySql版本,然后点击next
- 如果出现当前界面,则可以配置安装目录,如果出现的不是这个界面请点击Back返回
- 点击back返回后,点击高级选项,配置安装路径,配置成功后点击下一步
说明:安装路径最好不要有中文和空格以及特殊符号。
注意:一定要保证Install Directory和data Directory保存的路径一致,这样才可以保证卸载MySql的时候会很方便。
- 当出现绿色对号时表名安装成功,然后点击下一步
- 开始配置mysql,点击下一步
- 配置MySql开发模式以及端口号相关配置,然后点击下一步
说明:MySql默认端口是3306.这里不要修改,我们访问数据库的时候输入端口号3306即可。
- 设置密码账户信息,然后点击next
- 使用默认配置就可以了,然后点击下一步
- 日志配置
- 点击Execute安装
- 全部画上绿色对勾之后,安装成功点击finish->next->finish
- 配置环境变量,找到MySql的安装目录的bin目录下,将路径复制下来
- 打开电脑的高级设置中的 path 路径,将复制的路径添加进去
- 查看windows服务 ,mysql数据库是否启动。
第一种查看方式:
选择服务:
这样就找到了MySql服务了:
第二种查看方式:
按住window+R键,打开运行窗口并输入services.msc:
同样找到MySql服务:
2、打开dos窗口测试数据库:
按住window+R键,打开运行窗口并输入cmd:
在打开的dos窗口中输入mysql -u root -p命令:
如果出现如上图所示信息,说明MySql数据库安装成功。
显示所有的数据仓库:show databases;
注意:书写的所有sql语句, 要求结尾必须有分号。
使用exit可以断开连接:
1、找到mysql的安装目录:在mysql的安装目录中。找到my.ini 文件。
找到datadir 并且记录路径。
datadir="D:/MySoft/MySql2/data/Data/"
说明:
- datadir路径是用来保存mysql的数据文件的目录,以后我们向Mysql数据库存储的数据都会存放到这个路径;
- 在安装数据库的时候,要求这个路径的下的data文件夹要和数据库在同一文件夹下,这样在卸载的时候会比较方便,直接删除即可。如果没有安装到同一目录,那么找到该data文件夹进行删除;
- 在电脑左下角window图标处-----》右键----》选择控制面板;
- 找到程序和功能;
- 找到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或者安全管家清理垃圾试试。
学习对数据库的操作,首先要学习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、一个数据仓库中是可以有多张表的。
未来关于数据库我们学习的目标:
- 对数据库进行增删改查(CRUD);(主要对整个数据库进行操作,比如删除一个数据库和增加一个数据库)。create(增) read(查) update(改) delete(删)
- 对数据表结构进行增删改查(CRUD);(主要对整张表,比如删除一张表和增加一张表)。
- 对表中的数据进行增删改查(CRUD);(主要对表中的具体数据,比如删除一个表中的一行记录和增加一行数据)。
注意:关于对数据库表的操作,查询是开发中最难的,也是最重要的;
总结:
一个数据库软件,可以管理多个数据仓库(数据库)。
一个数据仓库可以管理多张数据表。
每个数据表中可以存储多行数据记录。
提示:每创建一个数据仓库,会在mysql的数据文件目录(data)中多一个文件夹。
SQL语句:Structured Query Language结构化查询语言。SQL语句不依赖于任何平台,对所有的数据库是通用的。学会了SQL语句的使用,可以在任何的数据库使用。SQL语句功能强大、简单易学、使用方便。
特点:
SQL语句是一个非过程性的语言,每一条SQL执行完都会有一个具体的结果出现。多条语句之间没有影响。
过程性语言:例如java。
int a = 10;
int b = 20;
int sum = a +b;
SQL语句:主要是操作数据库,数据表,数据表中的数据记录。
SQL是用来存取关系数据库的语言,具有定义、操纵、控制和查询关系型数据库的四方面功能。
所以针对四方面功能,我们将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语句的路线:
- 学习SQL数据对数据库的操作;
- 学习SQL语句对数据表整体结构的操作;
- 学习SQL语句对数据表中的数据记录操作(★★★★★);
- 数据仓库中的数据备份和恢复;
-
- 数据仓库的操作:(★)
在操作数据仓库之前,一定要先确认mysql 数据库是否已经启动:
1、运行窗口,输入 services.msc 打开 服务窗口
如果没有启动,选中mysql右键启动。
- 连接到数据库上:
-
-
- 查询所有数据库(了解)
-
目标:
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 库名;
说明:
- 当我们创建数据库的时候,如果没有指定编码表,默认使用的是安装数据库软件时指定的编码表;
2)每一条sql语句需要有 ; 分号,表示结束。
-
-
- 创建数据库(了解)
-
创建数据库的语法:
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的数据库。
- 创建一个使用utf8字符集的mydb2数据库。
语法:drop database 数据库名;
需求:删除前面创建的mydb1数据库
语法:alter database 数据库名称 character set 字符集;
需求:修改mydb2字符集为gbk
当我们创建好了数据库之后,最终需要给数据库中添加数据表。然后给数据表中添加数据。
在需要添加数据表之前,我们需要先切换到这个数据仓库中。
1、切换数据库:
语法: use 数据库名;
- 查询当前正在使用的数据库:
有时过于频繁的切换数据库就会导致忘了正在使用哪个数据库,可以使用查看语句。
语法:select database();
【示例】
当前正在使用的数据库名是mydb2
重点练习: 创建库、删除库、切换库的语句
2.4.6数据库操作语句小结
- 创建
create database 数据库名;
- 查看所有数据库
show databases;
- 查看指定数据库建表语句及字符集
show create database 数据库名;
- 删除数据库
drop database 数据库名;
- 修改数据库字符集-了解
alter database 数据库名 character set 字符集;
- 切换数据库
use 数据库名;
- 查看当前数据库名称
select database();
-
- 数据表结构的增删改查(★★★)
有了数据仓库之后,我们要想保存数据,这时必须在数据库中先有数据表。
接下来我们就开始学习数据表的增删改查操作。
注意:创建表的时候,一定要先切换到某一个具体的数据库。因为只有某一个具体的仓库下才会有数据库表。
语法:use 数据库名;
创建数据库表的语法:
之前创建类的方式:
Class Student
{
String name
Int age
}
语法:
create table 表名(
列名 类型(长度), ----某一列,存放的数据是什么类型.长度表示允许列名存储数据的最大长度.
列名 类型(长度),
..........................
列名 类型(长度)---最后一个列不需要逗号。
);
注意:
1)一个数据表可以存在很多列(字段),每列具有类型和长度。
2)多个列之间使用逗号隔开,最后一个列不需要输入逗号。
3)创建表的时候,一定切换到某一个具体的数据库。
use 数据库名。
数据类型:
Java中的数据类型和MySql中的数据类型是有些不一样的,那么接下来我们就开始学习下MySql数据库中的数据类型。
- 字符类型
- varchar(列的长度):列的长度可变。
name varchar(10):设置name字段的长度为10,name的储存长度在10以内都可以,并且会自动适应长短。
补充:保存字符个数:0-255.
- char(列的长度):列的长度固定,不能改变。
name char(10):设置name字段的长度为10,name的存储长度在10以内,如果不满10,用空格补足。
举例:假设我们要存储 abcd 这个字符串。
如果定义成varchar(10) 这时储存的数据不足10个,这时会把多余取消,只占4个。
如果使用char(10),它会把存储的数据添加到10个长度。剩下的用空格补足。
如果存储的长度超出了表中列的长度,存储报错。
总结:char 的性能好。 varchar可以节省空间。
通常的情况,如果长度不固定,我们使用varchar。
使用char的情况。当某个字段的长度固定的时候,可以采用char。例如身份证号或者手机号。
- 大数据类型--了解
- BLOB-字节:存放二进制内容,即字节数据。
一般可以存放视频、音频、图片等。
- TEXT:保存字符数据,存放大文本。存放可以超过255个字符。
通常我们不会把文件存储到数据库。(占用资源,操作速度慢)
我们会把文件的路径(通常存放在本地磁盘)存到数据库中。
- 数值型
- 整形:TINYINT 、SMALLINT、INT、BIGINT
- 小数:FLOAT(单精度)、DOUBLE(双精度)
- 位数据类型 (逻辑性)--了解 就是java中的boolean
- BIT: 1 或者0组成的数据。
1 表示true
0表示false
- 日期型
- DATE:日期----只有日期, 2013年08月19日
- Time:时间-----时分秒,12时24分30秒
- DateTime:日期和时间都包含,年月日时分秒
- 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
);
建表如下:
-
-
- 查看表(掌握)
-
- show tables : 查看该数据库的所有的表。
- desc 表名:查看表的列的信息(查看表结构)。
-
-
- 单表创建时约束(掌握)
-
约束:通过某些限制,来规定当前某张数据表中的列数据是否可以为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、一张表中只能有一个主键,但是唯一约束可以有多个
- 非空约束,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
);
建表结构如下:
查看数据库的表:
查看表结构:
修改数据表:
可以对表名、表中的列名、列的类型等进行增删改。
语法:alter table 表名 增/删/改 列名 类型(长度) 约束;
1、增加列 语法: alter table 表名 add 列名 类型(长度) 约束;
需求1:在emp2表上增加salary列。
alter table emp2 add salary double;
需求2:在emp2表上增加age列。
alter table emp2 add age int;
- 修改现有列类型、长度和约束
语法: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;
修改的语句:
- 修改现有列名称 。
语法: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;
修改语句:
-
-
- 数据表删除(重要)
-
语法:drop table 表名;
需求:删除emp表。
drop table emp;
删除语句:
-
-
- 操作数据表结构语句小结
-
数据表创建
create table 表名(
列名 数据类型 约束 ,
列名 数据类型 约束,
………
);
查看表
show tables:查看所有的表
show create table 表名: 查看建表语句以及字符集
desc 表名:查看表结构。
修改表的语句
alter table 表名(add|modify|drop|change) 列名 类型(长度) 约束。-了解
rename table 旧表名 to 新表名-了解
删除表
drop table 表名。
-
- 简单数据表内容的增删改(掌握)
对数据表的常见操作简称:CRUD。
create(增) read(查) update(更改) delete(删除)
-
-
- 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替换成新的值。
语法: 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条件语句]
注意:
- 如果删除表中的记录时,没有添加where条件,这时会把表中的所有数据删除。表依然存在,是空的表。
- 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 有什么区别?
- 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可视化工具。
- 解压和安装:
双击 安装软件一路下一步安装(注意要记住自己的安装路径!!!!!!!!)
安装完成后 双击注册机
找到Nacicat下的启动软件
点击打开后,显示OK 激活成功!
然后点击关闭即可。
- 如果是第一次使用,会弹出一个提示框,开机检查更新,我们不需要更新。
- 关闭之后,点击软件左上角的连接按钮,选中MySql:
然后就会弹出如下界面:
- 简单熟悉下可视化工具。
- 一般的可视化工具,都能从界面看到 数据库-》数据库表-》表数据。
- 在可视化工具中可以编写sql语句运行
查询结果:
- 在可视化工具中给内容添加注释快捷键是: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 表名;
表示查询表的所有信息。会把表的所有的列,所有的行都列出来。
说明:
- select 表示选择的意思;
- * 表示所有的数据;
- from 表示从哪个表中选择;
需求:查询学生的所有信息。
查询操作和结果:
4.1.2语法二: 查询某张表中指定的列
语法: select 列名,列名... from 表名;
说明:显示指定列数据。列出所有行信息。
需求:查询所有学生的姓名和成绩。
4.1.3语法三:按条件查询
语法:select 列名,列名..... from 表名 where 条件;
说明:查找符合where条件的数据。
作用:过滤,只有符合条件的,才去列出相应的信息。
需求:查询表中年龄大于等于24岁的学生信息。
4.1.4运算符:
- >(大于) <(小于) >=(大于等于) <=(小于等于) =(相等) <>或者!= (不相等)
需求:查询年龄不是25岁的学生。
2)
and 逻辑与 ,多个条件同时成立。
or 逻辑或 ,多个条件任意一个成立。
not 逻辑非 ,相反的意思。
需求一:查询年龄>23,并且成绩>80的同学信息。
需求二:查询成绩在80~100(包含)之间的学生信息。
- 区间: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(包含)之间的学生信息。
- in(值1,值2,值3) 在指定值中任意取。
举例: in(70,80,90) 值可以是70、80或者90
使用格式:
where 列名 in (值,值,值.......);
等价于
where 列名=值 or 列名=值 or 列名=值 .......
需求:查询年龄为18,23,25的同学信息。
- 模糊查询: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、对成绩排序后输出。
- 对年龄排序按从高到低(降序)的顺序输出。
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。