好程序员Java分享MySQL之SQL入门(一)
好程序员Java分享MySQL之SQL入门(一)前言:各种版本的数据库中,有一种通用的语言用于管理数据库中的数据,它就是SQL,本章我们将学习基本的SQL语句。
SQL的概述
Structured Query Language 结构化查询语言,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
各种主流的数据库系统都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用,但大部分是相同的,后面我们学习的是MySQL的版本,掌握SQL主要语法之后,要迁移到其它数据库也是比较容易的。
结构化查询语言包含6个部分:
一:数据查询语言(DQL:Data Query Language):
其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
二:数据操作语言(DML:Data Manipulation Language):
其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
三:事务处理语言(TPL):
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
四:数据控制语言(DCL):
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
五:数据定义语言(DDL):
其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
六:指针控制语言(CCL):
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
本章我们主要介绍的是DDL和DML。
MySQL数据库的操作
创建数据库的基本语法是:
create database 数据库名;
还可以给数据库指定默认的字符集以及排序规则:
create database 数据库名
default character set 字符集 collate 排序规则;
选择数据库
use 数据库名;
修改数据库的字符集和排序规则:
alter database 数据库名
default character set 字符集 collate 排序规则;
删除数据库:
drop database 数据库名;
删除时检查数据库是否存在:
drop database if exists 数据库名;
代码示例:
1.-- 删除数据库
2.drop database if exists java1903;
3.-- 创建数据库
4.create database java1903
5.default character set utf8mb4
6.collate utf8mb4_general_ci;
7.-- 使用数据库
8.use java1903;
MySQL常见的数据类型
创建好数据库后,我们就需要建表,建表我们需要设置字段的数据类型,我们先来了解MySQL中常见的数据类型。
类型名称 |
说明 |
存储需求 |
TINYINT |
很小的整数 |
1个字节 |
SMALLINT |
小的整数 |
2个宇节 |
MEDIUMINT |
中等大小的整数 |
3个字节 |
INT (INTEGHR) |
普通大小的整数 |
4个字节 |
BIGINT |
大整数 |
8个字节 |
2)小数类型
类型名称 |
说明 |
存储需求 |
FLOAT |
单精度浮点数 |
4 个字节 |
DOUBLE |
双精度浮点数 |
8 个字节 |
DECIMAL (M, D),DEC |
压缩的“严格”定点数 |
M+2 个字节 |
3) 日期/时间类型
类型名称 |
日期格式 |
日期范围 |
存储需求 |
YEAR |
YYYY |
1901 ~ 2155 |
1 个字节 |
TIME |
HH:MM:SS |
-838:59:59 ~ 838:59:59 |
3 个字节 |
DATE |
YYYY-MM-DD |
1000-01-01 ~ 9999-12-3 |
3 个字节 |
DATETIME |
YYYY-MM-DD HH:MM:SS |
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
8 个字节 |
TIMESTAMP |
YYYY-MM-DD HH:MM:SS |
1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC |
4 个字节 |
3) 字符串类型
类型名称 |
说明 |
存储需求 |
CHAR(M) |
固定长度非二进制字符串 |
M 字节,1<=M<=255 |
VARCHAR(M) |
变长非二进制字符串 |
L+1字节,在此,L< = M和 1<=M<=255 |
TINYTEXT |
非常小的非二进制字符串 |
L+1字节,在此,L<2^8 |
TEXT |
小的非二进制字符串 |
L+2字节,在此,L<2^16 |
MEDIUMTEXT |
中等大小的非二进制字符串 |
L+3字节,在此,L<2^24 |
LONGTEXT |
大的非二进制字符串 |
L+4字节,在此,L<2^32 |
ENUM |
枚举类型,只能有一个枚举字符串值 |
1或2个字节,取决于枚举值的数目 (最大值为65535) |
SET |
一个设置,字符串对象可以有零个或 多个SET成员 |
1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员) |
4) 二进制类型
类型名称 |
说明 |
存储需求 |
BIT(M) |
位字段类型 |
大约 (M+7)/8 字节 |
BINARY(M) |
固定长度二进制字符串 |
M 字节 |
VARBINARY (M) |
可变长度二进制字符串 |
M+1 字节 |
TINYBLOB (M) |
非常小的BLOB |
L+1 字节,在此,L<2^8 |
BLOB (M) |
小 BLOB |
L+2 字节,在此,L<2^16 |
MEDIUMBLOB (M) |
中等大小的BLOB |
L+3 字节,在此,L<2^24 |
LONGBLOB (M) |
非常大的BLOB |
L+4 字节,在此,L<2^32 |
表的操作
创建表:
create table 表名
(
字段名 数据类型 [约束],
字段名 数据类型 [约束],
....
)
主要的约束类型有:
primary key 主键,表中只能有一个,不能重复,不能为空
not null 非空,必须填写
unique 唯一,不能重复
auto_increment 自动增长,必须是整数类型,不需要手动插入
foreign key 外键,建立表之间的引用关系
删除表:
drop table 表名;
删除表时进行检查:
drop table if exists 表名;
修改表,添加字段:
alter table 表名 add column 字段名 数据类型;
修改表,删除字段:
alter table 表名 drop column 字段名;
查看表结构:
desc 表名;
代码示例:
9.-- 删除表
10.drop table if exists tb_student;
11.-- 创建学生表
12.create table tb_student
13.(
14. stu_id int primary key auto_increment,
15. stu_name varchar(20) not null,
16. stu_age int not null,
17. stu_gender varchar(1) not null,
18. stu_address varchar(200)
19.);
数据操作语言DML
数据操作语言有插入、删除和更新语句组成。
单行插入:
insert into 表名(字段名,字段名,字段名..) values(值,值,值..);
多行插入
insert into 表名(字段名,字段名,字段名..)
values(值,值,值..),(值,值,值..),(值,值,值..);
将一张表数据插入另一张表
insert into 表1(字段名,字段名,字段名..)
select 字段名,字段名,字段名 from 表2;
删除所有数据
delete from 表名;
清空表
truncate table 表名;
带条件的删除
delete from 表名 [where 条件];
更新
update 表名 set 字段 = 值,字段 = 值... [where 条件];
代码示例:
20.-- 插入一行学生记录
21.insert into tb_student(stu_name,stu_age,stu_gender,stu_address)
22.values('赵六',30,'男','上海');
23.-- 插入多行学生
24.insert into tb_student(stu_name,stu_age,stu_gender,stu_address)
25.values('陈七',20,'男','武汉'),('陈大七',28,'男','上海'),('陈小七',18,'男','北京');
26.-- 删除学号为3的学生
27.delete from tb_student where stu_id = 3;
28.-- 全部删除
29.delete from tb_student;
30.-- 清空表
31.truncate table tb_student;
32.-- 更新陈七的年龄为23,性别为女
33.update tb_student set stu_age = 23,stu_gender = '女'
34.where stu_name = '陈七';
总结
本章我们学习了SQL语言中的DDL和DML,能实现建表建表和数据的增删改操作,还有一个重要的查询操作,也就是DQL,会在下章介绍。
前言:各种版本的数据库中,有一种通用的语言用于管理数据库中的数据,它就是SQL,本章我们将学习基本的SQL语句。
SQL的概述
Structured Query Language 结构化查询语言,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
各种主流的数据库系统都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用,但大部分是相同的,后面我们学习的是MySQL的版本,掌握SQL主要语法之后,要迁移到其它数据库也是比较容易的。
结构化查询语言包含6个部分:
一:数据查询语言(DQL:Data Query Language):
其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
二:数据操作语言(DML:Data Manipulation Language):
其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
三:事务处理语言(TPL):
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
四:数据控制语言(DCL):
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
五:数据定义语言(DDL):
其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
六:指针控制语言(CCL):
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
本章我们主要介绍的是DDL和DML。
MySQL数据库的操作
创建数据库的基本语法是:
create database 数据库名;
还可以给数据库指定默认的字符集以及排序规则:
create database 数据库名
default character set 字符集 collate 排序规则;
选择数据库
use 数据库名;
修改数据库的字符集和排序规则:
alter database 数据库名
default character set 字符集 collate 排序规则;
删除数据库:
drop database 数据库名;
删除时检查数据库是否存在:
drop database if exists 数据库名;
代码示例:
1.-- 删除数据库
2.drop database if exists java1903;
3.-- 创建数据库
4.create database java1903
5.default character set utf8mb4
6.collate utf8mb4_general_ci;
7.-- 使用数据库
8.use java1903;
MySQL常见的数据类型
创建好数据库后,我们就需要建表,建表我们需要设置字段的数据类型,我们先来了解MySQL中常见的数据类型。
类型名称 |
说明 |
存储需求 |
TINYINT |
很小的整数 |
1个字节 |
SMALLINT |
小的整数 |
2个宇节 |
MEDIUMINT |
中等大小的整数 |
3个字节 |
INT (INTEGHR) |
普通大小的整数 |
4个字节 |
BIGINT |
大整数 |
8个字节 |
2)小数类型
类型名称 |
说明 |
存储需求 |
FLOAT |
单精度浮点数 |
4 个字节 |
DOUBLE |
双精度浮点数 |
8 个字节 |
DECIMAL (M, D),DEC |
压缩的“严格”定点数 |
M+2 个字节 |
3) 日期/时间类型
类型名称 |
日期格式 |
日期范围 |
存储需求 |
YEAR |
YYYY |
1901 ~ 2155 |
1 个字节 |
TIME |
HH:MM:SS |
-838:59:59 ~ 838:59:59 |
3 个字节 |
DATE |
YYYY-MM-DD |
1000-01-01 ~ 9999-12-3 |
3 个字节 |
DATETIME |
YYYY-MM-DD HH:MM:SS |
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
8 个字节 |
TIMESTAMP |
YYYY-MM-DD HH:MM:SS |
1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC |
4 个字节 |
3) 字符串类型
类型名称 |
说明 |
存储需求 |
CHAR(M) |
固定长度非二进制字符串 |
M 字节,1<=M<=255 |
VARCHAR(M) |
变长非二进制字符串 |
L+1字节,在此,L< = M和 1<=M<=255 |
TINYTEXT |
非常小的非二进制字符串 |
L+1字节,在此,L<2^8 |
TEXT |
小的非二进制字符串 |
L+2字节,在此,L<2^16 |
MEDIUMTEXT |
中等大小的非二进制字符串 |
L+3字节,在此,L<2^24 |
LONGTEXT |
大的非二进制字符串 |
L+4字节,在此,L<2^32 |
ENUM |
枚举类型,只能有一个枚举字符串值 |
1或2个字节,取决于枚举值的数目 (最大值为65535) |
SET |
一个设置,字符串对象可以有零个或 多个SET成员 |
1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员) |
4) 二进制类型
类型名称 |
说明 |
存储需求 |
BIT(M) |
位字段类型 |
大约 (M+7)/8 字节 |
BINARY(M) |
固定长度二进制字符串 |
M 字节 |
VARBINARY (M) |
可变长度二进制字符串 |
M+1 字节 |
TINYBLOB (M) |
非常小的BLOB |
L+1 字节,在此,L<2^8 |
BLOB (M) |
小 BLOB |
L+2 字节,在此,L<2^16 |
MEDIUMBLOB (M) |
中等大小的BLOB |
L+3 字节,在此,L<2^24 |
LONGBLOB (M) |
非常大的BLOB |
L+4 字节,在此,L<2^32 |
表的操作
创建表:
create table 表名
(
字段名 数据类型 [约束],
字段名 数据类型 [约束],
....
)
主要的约束类型有:
primary key 主键,表中只能有一个,不能重复,不能为空
not null 非空,必须填写
unique 唯一,不能重复
auto_increment 自动增长,必须是整数类型,不需要手动插入
foreign key 外键,建立表之间的引用关系
删除表:
drop table 表名;
删除表时进行检查:
drop table if exists 表名;
修改表,添加字段:
alter table 表名 add column 字段名 数据类型;
修改表,删除字段:
alter table 表名 drop column 字段名;
查看表结构:
desc 表名;
代码示例:
9.-- 删除表
10.drop table if exists tb_student;
11.-- 创建学生表
12.create table tb_student
13.(
14. stu_id int primary key auto_increment,
15. stu_name varchar(20) not null,
16. stu_age int not null,
17. stu_gender varchar(1) not null,
18. stu_address varchar(200)
19.);
数据操作语言DML
数据操作语言有插入、删除和更新语句组成。
单行插入:
insert into 表名(字段名,字段名,字段名..) values(值,值,值..);
多行插入
insert into 表名(字段名,字段名,字段名..)
values(值,值,值..),(值,值,值..),(值,值,值..);
将一张表数据插入另一张表
insert into 表1(字段名,字段名,字段名..)
select 字段名,字段名,字段名 from 表2;
删除所有数据
delete from 表名;
清空表
truncate table 表名;
带条件的删除
delete from 表名 [where 条件];
更新
update 表名 set 字段 = 值,字段 = 值... [where 条件];
代码示例:
20.-- 插入一行学生记录
21.insert into tb_student(stu_name,stu_age,stu_gender,stu_address)
22.values('赵六',30,'男','上海');
23.-- 插入多行学生
24.insert into tb_student(stu_name,stu_age,stu_gender,stu_address)
25.values('陈七',20,'男','武汉'),('陈大七',28,'男','上海'),('陈小七',18,'男','北京');
26.-- 删除学号为3的学生
27.delete from tb_student where stu_id = 3;
28.-- 全部删除
29.delete from tb_student;
30.-- 清空表
31.truncate table tb_student;
32.-- 更新陈七的年龄为23,性别为女
33.update tb_student set stu_age = 23,stu_gender = '女'
34.where stu_name = '陈七';
总结
本章我们学习了SQL语言中的DDL和DML,能实现建表建表和数据的增删改操作,还有一个重要的查询操作,也就是DQL,会在下章介绍。
好程序员Java分享MySQL之SQL入门(一)相关推荐
- 好程序员Java分享SQL语言之索引
好程序员Java分享SQL语言之索引,前言:本章我们将学习MySQL中的索引,本文将从索引的作用.索引的分类.创建索引的语法.索引的使用策略以及索引的实现原理等方面带大家了解索引. 索引的作用 索引的 ...
- 好程序员分享MySQL之SQL入门(一)
好程序员分享MySQL之SQL入门(一)前言:各种版本的数据库中,有一种通用的语言用于管理数据库中的数据,它就是SQL,本章我们将学习基本的SQL语句. SQL的概述 Structured Query ...
- java项目_好程序员Java分享从入门到服务端项目开发的过程
好程序员Java分享从入门到服务端项目开发的过程,对于打算入门或者刚刚入门学习Java的人来说,刚开始接触这门学科,往往会觉得不知所措,也会觉得很迷茫.结合前人经验,就从入门到进阶对于Java的学习而 ...
- 好程序员Java分享Java案例_英汉字典
在写代码的时候,当鼠标悬浮在某一个单词上面的时候,有道词典点有时会弹出一个消息气泡,在里面中给出关于这个单词相关的解释,下面给大家展示一个使用Java基础语言编写的英汉字典案例: 实现功能: ...
- 好程序员Java培训分享Java初学者必读
好程序员Java培训分享Java初学者必读,近年来各种各样的编程语言不断崛起,但唯有Java是牢牢占据着老大的位置,目前几乎90%以上的大中型互联网应用系统在服务器端开发首选Java.因此,也是吸引了 ...
- hibernate savealiasentity 保存后id为空_好程序员Java教程分享Java面试题之Hibernate
好程序员Java教程分享Java面试题之Hibernate 1.简书一下Hibernated的开发流程 第一步:加载Hibernate的配置文件,读取配置文件的参数, 第二步:创建SessionFac ...
- java获取mysql执行计划_好程序员Java学习路线之MySQL的执行计划
好程序员 Java 学习路线之 MySQL 的执行计划.什么是执行计划? 执行计划通常是开发者优化 SQL 语句的第一步. MySQL 在解析 SQL 语句时,会生成多套执行方案,然后内部会进行一个成 ...
- javaweb模板_好程序员Java教程分享javaweb框架
好程序员Java教程分享javaweb框架:Java是开源的,框架很多,这些框架都能解决特定的问题,提高开发效率.简化我们的代码复杂度,现在除了很多大家通用的一些主流框架外,很多公司针对自己的业务会自 ...
- 黑马程序员 JAVA WEB 第三节 MYSQL 约束
这是阿锃总结的第三节黑马程序员JAVA WEB视频的MYSQL约束部分的笔记.希望可以帮助跟我一样正在学习Java web的同学们.我们一起进步. b_d 若果有同学也想学习黑马程序员Java w ...
最新文章
- 【清华大学王东老师】现代机器学习技术导论.pdf
- elasticsearch6.2.2安装中文分词插件IK analyzer
- JZOJ 3660. 【SHTSC2014】信号增幅仪
- C/Cpp / 类中静态成员变量和普通成员变量的区别
- Boost:易变的bimap双图的测试程序
- Ubuntu Terminal Shortcut
- 极度推荐的文章和网站
- 2-SAT适定性(Satisfiability)问题知识点详解
- java loadonstartup_java的web配置文件的“load-on-startup0/load-on-startup”一个问题
- android是语言吗,android – 内容描述应该是多种语言吗?
- ArcView GIS 应用与开发技术(1)-ViewTheme
- MP4转AVI转AMV教程:教你把B站视频导入你的MP3MP4随身听播放器
- C++ QT安装教程2021
- ArcGIS API for JavaScript 加载水经注离线地图
- 一线二线城市工作的区别
- oracle hanganalyze的用法以及trace文件分析(通过library cache pin和lock)
- 【移动端】企业微信移动app测试实战
- 追寻本质还是流于形式
- 数据结构习题及解析二
- 整合flink-cdc实现实时读postgrasql