数据库DDL、DML、DQL不了解?进来了解一下

本文详细介绍了数据库的基本概念,包括使用数据库的原因、不同类型的数据库语句及其用途,并深入探讨了MySQL的数据类型及特殊值的处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库

为什么要使用数据库?

我们做的程序中使用或者得到的数据,一旦程序关闭了,那么数据就销毁了,而这些数据通常是我们所需要的,因此我们希望能够持久化的存储数据,因此引入了数据库。

其实,使用文件系统也能实现数据的持久化存储,但是由于文件系统不方便操作(我们使用数据库操作时,可以方便的进行查询和修改操作,而且数据库中的数据是有数据结构的数据)

数据库语句的分类

  • DML:数据操作语句,插入,修改,删除数据库中的数据。insert,delete,update
  • DCL:数据控制语句,用于控制存取许可,存取权限等。garnt,revoke等
  • DQL:数据查询语句,用于查询数据库中的语句。select
  • DDL:数据定义语句,用来建立数据库、数据库对象和定义表的列。greate table,drop table等
  • 数据库中的注释:

数据库中使用“–”来注释,用``代表引用,可以在数据库中的库名,表名或者列名时可以使用引用,这样不会造成歧义而导致表名,列名等为数据库中的关键字或者保留字而发生错误。

数据库的登入

  • 使用命令行的方式登入:

  • mysql -h localhost -P 3306 -u root -p
    Enter password:密码

    说明:
    (1)-h,-P,-u后面可以有空格也可以没有空格,但是最后-p后面不要加空格
    (2)如果你是默认连接本机localhost,那么可以省略-h localhost
    (3)如果你是默认用3306端口号,那么可以省略-P 3306

MySQL的数据类型

1.整型

和Java中的数据类型做一个对比

Java : byte,short,int,long

MySQL:

MySQL中的数据类型(整型)和Java类似的数据类型占用字节数
tinyintbyte一个字节
smallintshort2个字节
mediumint/3个字节
intint4个字节
bigintlong8个字节

2.浮点型

Java: float和double

MySQL:float和double

MySQL中的浮点类型是可以指定宽度和精度的

例如:

double(M,D):double(5,2)就指的是宽度一共为5位,精度为2位精度,那么表示的范围就是999.99~-999.99

double(M,D) unsigned : double(5,2) unsigned指的是宽度一共是5位,精度为2位精度,且不能为负数,表示的范围是0~999.99

3.字符串类型

Java: char和String分别表示的是字符类型和字符串类型

MySQL:MySQL中没有字符类型,只有字符串类型

MySQL中的数据类型特点
char不同于Java,在MySQL中是字符串类型
varchar是字符串类型,而且必须指定长度
text也是字符串类型
数据库中char和varchar的区别:

char是一个定长的字符串类型,读写速度快

varchar是一个变长的字符串类型,读写速度相对较慢,但是可能会节省空间

4.日期时间类型

Java:java.sql.Date java.sql.Time,java.sql.TimeStamp

MySQL:date,time,timestamp

date:日期

time:时间

timestamp,datetime:日期加时间

year:只有年份

timestamp和datetime的区别
  • timestano底层是使用毫秒,是可以区别时区的(同一个毫秒值,在不同的时区表示的时间和日期时不同的)

    • 范围:1970 … ~ 2038…
  • datetime:是日期和时分秒表示,不区别时区,是什么值就是什么值

    • 范围:1000…~9999…

5.其他类型

  • xxxbit
  • xxxblob:二进制类型,可以存储二维码和头像等
  • 枚举类型:预定义几个值,从中选一个
  • 集合类型:预定义几个值,丛中选多个

6.特殊值:null

Java和MySQL关于null值的不同

在Java中只有引用数据类型才能赋值为null,要判断null值的方式:

  • if(变量== null)或者if(变量 !=null)
  • 并且在Java中nulll值不能参与运算,如果参与运算会报错

在MySQL中任何值都可以赋值为null,判断null值的方式:

  • is null或者is not null
  • null值可以参与运算不会报错,但是运算的结果都为null

因为在MySQL中null参与运算的结果为null,所以在实际运用中,如果要运算,一定要判断值是不是null,如果是null就不能让其参与运算,不然结果一直都会是null,这个bug很不容易被检查出来。

SQL的规范和规则

规范

  1. mysql对于SQL语句不区分大小写,SQL关键字尽量大写
  2. 值,除了数值型,字符串型和日期时间类型使用单引号
  3. 列、字段别名,尽量使用双引号,而且不建议省略
  4. 所以标点符号使用英文状态下的半角输入方式
  5. 必须保证所以(),单引号,双引号都是成对出现并结束的
  6. 可以使用 # 单行注释 – 单行注释和/* */多行注释

规则

  1. 必须只能包含A-Z,a-z,0-9,_共63个字符
  2. 必读不宜过长
  3. 不能包含空格
  4. 不要重名
    • 同一张表,字段不能重名,不同的表,字段可以重名
    • 同一个数据库,表不能重名,不同的数据库,表明可以重名
    • 同一个DBMS中,库不能重名,不同的DBMS中,数据库可以重名
  5. 必须保证你的字段没有和保留字、数据库系统或者常用方法重名
  6. 如果某个字段在不同的表中,表示的意思是相同的,那么数据类型也必须是相同的

SQL语句

DDL

数据定义语言,定义库,表结构用的

1.操作数据的语句
  1. 查看当前DBMS中的所有数据库
show databases;
  1. 创建一个数据库
create database 数据库名称;
  1. 删除一个数据库
drop database 数据库名;
  1. 使用,指定使用哪个数据
use 数据库名;
-- 一般在DBMS中我们有多个数据,那么我们在执行数据的操作语句时,要先指明我们使用的是那个数据库,有了这句话,下面的sql都是默认针对这个数据库的
2.操作表格的语句
  1. 查看某个库的所有表格
show tables;  #必须前面有use 数据库名称这条语句,否则会报 no database select这个异常
show tables from 数据库名称;
  1. 创建表格
create table 【数据库名称.】 表名称(
	字段名1  数据类型,
    字段名2  数据类型,
    ...      ...
);

注意:最后一个字段名的数据类型后面不用加逗号

  1. 查看表结构
desc 表名称;
  1. 修改表结构:增加一列
alter table 表名称 add 字段名 数据类型【after 字段名/first】

后面可以省略的after 字段名/first 可以用来确定插入的列的位置

  1. 修改表结构:删除一列
alter table 表名称 drop 字段名
  1. 修改表结构:修改列的类型,位置等
alter table 表名称 modify 字段名 数据类型【after 字段名/first】
  1. 修改表结构:修改列的名称
alter table 表名称 change 旧字段 新字段名 数据类型 【after 字段名/first】
  1. 修改表名称
alter table 表名称 rename to 新名称;
  1. 删除整张表,包括数据和表结构
drop table 表名称;

DML

数据操作语言,增、删,改

1.添加数据
  1. 为表的所有列赋值
insert into 表名称 values(值列表);
  1. 为表的部分列赋值
insert into 表名称(字段列表) values(对应的值列表);
  1. 可以一次性增加多行
insert into 表名称 values(值列表1),(值列表2),....;
insert into 表名称(字段列表) values(值列表1),(值列表2),...;
2.修改数据
update 表名称 set 字段名1=字段值1,字段名2=字段值2 【where 条件】;
3.删除数据
delete from 表名称【where 条件】;
#例如
delete from employee where name = '张三';
4.查看数据(这部分数据DQL部分)

数据查询语言

  1. 查看所有的数据
select * from 表名称;

这个写法的效率比较低,比写出所有的字段名的查询效率低,注意。

  1. 查看部分列
select 字段列表 from 表名称;
  1. 查看部分行
select * from 表名称 【where 条件】;
select 字段列表 from 表名称 【where条件】;
  1. 可以在查询时给字段取别名

我们有的时候发现查询结果我们需要再次操作或者不容易识别,我们就需要给查询的结果起一个新的字段名。

select 字段名1 as "别名1",字段名2 as"别名2" ...from表名称【where 条件】;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炒冷饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值