文章目录
数据库
为什么要使用数据库?
我们做的程序中使用或者得到的数据,一旦程序关闭了,那么数据就销毁了,而这些数据通常是我们所需要的,因此我们希望能够持久化
的存储数据,因此引入了数据库。
其实,使用文件系统也能实现数据的持久化
存储,但是由于文件系统不方便操作(我们使用数据库操作时,可以方便的进行查询和修改操作,而且数据库中的数据是有数据结构的数据)
数据库语句的分类
- 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类似的数据类型 | 占用字节数 |
---|---|---|
tinyint | byte | 一个字节 |
smallint | short | 2个字节 |
mediumint | / | 3个字节 |
int | int | 4个字节 |
bigint | long | 8个字节 |
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的规范和规则
规范
- mysql对于SQL语句不区分大小写,SQL关键字尽量大写
- 值,除了数值型,字符串型和日期时间类型使用单引号
- 列、字段别名,尽量使用双引号,而且不建议省略
- 所以标点符号使用英文状态下的半角输入方式
- 必须保证所以(),单引号,双引号都是成对出现并结束的
- 可以使用 # 单行注释 – 单行注释和/* */多行注释
规则
- 必须只能包含A-Z,a-z,0-9,_共63个字符
- 必读不宜过长
- 不能包含空格
- 不要重名
- 同一张表,字段不能重名,不同的表,字段可以重名
- 同一个数据库,表不能重名,不同的数据库,表明可以重名
- 同一个DBMS中,库不能重名,不同的DBMS中,数据库可以重名
- 必须保证你的字段没有和保留字、数据库系统或者常用方法重名
- 如果某个字段在不同的表中,表示的意思是相同的,那么数据类型也必须是相同的
SQL语句
DDL
数据定义语言,定义库,表结构用的
1.操作数据的语句
- 查看当前DBMS中的所有数据库
show databases;
- 创建一个数据库
create database 数据库名称;
- 删除一个数据库
drop database 数据库名;
- 使用,指定使用哪个数据
use 数据库名;
-- 一般在DBMS中我们有多个数据,那么我们在执行数据的操作语句时,要先指明我们使用的是那个数据库,有了这句话,下面的sql都是默认针对这个数据库的
2.操作表格的语句
- 查看某个库的所有表格
show tables; #必须前面有use 数据库名称这条语句,否则会报 no database select这个异常
show tables from 数据库名称;
- 创建表格
create table 【数据库名称.】 表名称(
字段名1 数据类型,
字段名2 数据类型,
... ...
);
注意:最后一个字段名的数据类型后面不用加逗号
- 查看表结构
desc 表名称;
- 修改表结构:增加一列
alter table 表名称 add 字段名 数据类型【after 字段名/first】
后面可以省略的after 字段名/first 可以用来确定插入的列的位置
- 修改表结构:删除一列
alter table 表名称 drop 字段名
- 修改表结构:修改列的类型,位置等
alter table 表名称 modify 字段名 数据类型【after 字段名/first】
- 修改表结构:修改列的名称
alter table 表名称 change 旧字段 新字段名 数据类型 【after 字段名/first】
- 修改表名称
alter table 表名称 rename to 新名称;
- 删除整张表,包括数据和表结构
drop table 表名称;
DML
数据操作语言,增、删,改
1.添加数据
- 为表的所有列赋值
insert into 表名称 values(值列表);
- 为表的部分列赋值
insert into 表名称(字段列表) values(对应的值列表);
- 可以一次性增加多行
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部分)
数据查询语言
- 查看所有的数据
select * from 表名称;
这个写法的效率比较低,比写出所有的字段名的查询效率低,注意。
- 查看部分列
select 字段列表 from 表名称;
- 查看部分行
select * from 表名称 【where 条件】;
select 字段列表 from 表名称 【where条件】;
- 可以在查询时给字段取别名
我们有的时候发现查询结果我们需要再次操作或者不容易识别,我们就需要给查询的结果起一个新的字段名。
select 字段名1 as "别名1",字段名2 as"别名2" ...from表名称【where 条件】;