什么是关系型数据库
概念: 建立在关系模型基础之上, 由多张相互连接的二维表组成的数据库.
特点:
- 使用表存储数据, 格式统一, 便于维护.
- 使用sql语言操作, 使用方便, 标准统一.
数据模型:
用户 --> 登陆 --> 数据库管理系统 --> 使用sql语言 --> 操作该管理系统中的数据库.
SQL的通用语法
- SQL语句可以单行或者多行书写, 以分号结尾;
- SQL语句可以使用空格/缩进来增强语句的可读性;
- Mysql的Sql语句不区分大小写, 关键字建议使用大写;
- 注释:
- 单行注释:
-- 注释内容
/# 注释内容
( MySQL特有 ) - 多行注释:
/*注释内容*/
- 单行注释:
SQL语句的分类
主要是分成四类
- DDL: 数据定义语言, 用来定义数据库对象(库\表\字段);
- DML: 数据操作语言, 用来对表中的数据进行增改查(针对表对象);
- DQL: 数据查询语言, 用来查询数据表中的记录(针对表对象);
- DCL: 数据控制语言, 用来创建数据库用户, 控制数据库的访问权限.
DDL
库对象
1. 查询
查询全部:
show databases;
查询当前数据库:
select database();
2. 创建
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];
3. 删除
drop database [if exists] 数据库名;
4. 使用
use 数据库名;
表对象
1. 查询
查询当前数据库所有表:
show tables;
查询表结构:
desc 表名;
查询指定的表的建表语句:
show create table 表名;
2. 创建
基本语句:
create table 表名(
字段1 字段1类型 [comment '字段注释'],
字段2 字段2类型 [comment '字段注释'],
...
字段n 字段n类型 [comment '字段注释']
)[comment 表注释];
mysql中的数据类型:
数值类型, 字符串类型, 日期时间类型
类型 | 大小 | 描述 | 额外描述 |
---|---|---|---|
tinyint | 1byte | 相当于java中的byte | |
smallint | 2byte | 相当于java中的short | |
int或者integer | 4byte | 相当于java中的int | |
bigint | 8byte | 相当于java中的long | |
float | 4byte | 单精度 | |
double | 8byte | 双精度 | |
dectmal | 不限 | 依赖于精度和标度的值, 能精确的表示小数 | |
char | 0~255 byte | 定长字符串 | 例如char(10), 最大10个字符, 小也要10个字符的空间, 其余的用空格补齐, 性能好但是有可能会浪费空间 |
varchar | 0~65535 byte | 变长字符串 | 性能相对不好, 但是不会浪费空间 |
tinyblob | 0~255 byte | 不超过255个字符的二进制数据 | |
tinytext | 0~255 byte | 短文本数据 | |
blob | 0~65535 byte | 二进制形式的长文本数据 | |
text | 0~65535 byte | 长文本数据 | |
mediumblob | 0~16 777 215 byte | 二进制形式的中等长度文本数据 | |
mediumtext | 0~16 777 215 byte | 中等长度文本数据 | |
longblob | 0~4 294 967 295 byte | 二进制形式的极大长度文本数据 | |
longtext | 0~4 294 967 295 byte | 极大长度文本数据 | |
date | 3 byte | yyyy-MM-DD | |
time | 3 byte | HH:MM:SS | |
year | 1 byte | YYYY | 1901~2155 |
datetime | 8 byte | yyyy-MM-DD HH:MM:SS | |
timestamp | 4 byte | yyyy-MM-DD HH:MM:SS | 时间戳 1970-01-01 00:00:01~2038-01-19 03:14:07 |
3. 修改
修改数据类型
alter table 表名 modify 字段名 新的数据类型;
修改字段名和字段类型
alter table 表名 change 旧的字段名 新的字段名 类型 [comment 注释][约束];
删除字段:
alter table 表名 drop 字段名;
修改表名:
alter table 表名 rename to 新表名;
添加字段:
ALTER TABLE 表名 ADD 新字段名 字段类型;
4. 删除
drop table [if exists]表名;
这种方法注意,速度最快, 数据和表结构都会被清除;
truncate table [if exists]表名;
这种方法就是只删除表的数据但是表的结构将会被保存;
DML
1. 插入(insert)
给指定的字段添加数据
insert into 表名(字段名1,字段名2,...) values (值1,值2,...);
批量添加数据
insert into 表名(字段名1,字段名2,...) values (值1,值2,...), (值1,值2,...),(值1,值2,...);
- 插入的数据要和指定的字段一一对应;
- 字符串和日期数据应该在引号中;
- 插入的数据大小应该在字段的规定范围内;
2. 更新(update)
update 表名 set 字段名1=值1,字段名2=值2,...[where 条件];
- 修改语句的条件可以有也可以没有, 如果没有 ,将会修改整个表的所有数据.
3. 删除(delete)
删除将是针对表对象中的行数据(元组)
delete from 表名 [where 条件];
- delete语句中的where可以有也可以没有, 没有将删除表中的全部数据;
- delete语句操作的最小单位是元组, 如果要删除某一个字段数据应该使用(update);