1. SQL基础
1.1. 语句分类
- DDL
DDL(Data Definition Language,数据定义语言) 用来创建或者删除存储 数据用的数据库以及数据库中的表等对象。DDL 包含以下几种指令。- CREATE:创建数据库和表等对象
- DROP: 删除数据库和表等对象
- ALTER: 修改数据库和表等对象的结构
- DML
DML(Data Manipulation Language,数据操纵语言) 用来查询或者变更 表中的记录。DML 包含以下几种指令。- SELECT:查询表中的数据
- INSERT:向表中插入新数据
- UPDATE:更新表中的数据
- DELETE:删除表中的数据
- DCL
DCL(Data Control Language,数据控制语言) 用来确认或者取消对数据 库中的数据进行的变更。除此之外,还可以对 RDBMS 的用户是否有权限 操作数据库中的对象(数据库表等)进行设定。DCL 包含以下几种指令。- COMMIT: 确认对数据库中的数据进行的变更
- ROLLBACK:取消对数据库中的数据进行的变更
- GRANT: 赋予用户操作权限
- REVOKE: 取消用户的操作权限
1.2. 书写规则
- 语句以
;
结尾 - 关键字、表名、列名均不区分大小写
- 字符串常数和日期常数需要用
''
括起来,例如’abc’、’2021-01-01’
1.3. DDL
1.3.1. 1.database相关
-- 查看数据库
show DATABASES;
-- 创建数据库
create database if not EXISTS db_name ;
-- 创建数据库时使用编码
create database if not EXISTS db_name CHARACTER SET utf8;
-- 使用数据库
use db_name;
-- 删除数据库
drop database if exists db_name;
-- 修改数据库编码
alter DATABASE db_name CHARACTER set utf8;
1.3.2. 2.表相关
1.3.2.1. 2.1 列的数据类型
1.3.2.1.1. 2.1.1数值类型
类型 | 大小 |
---|---|
tinyint |
1B |
smallint |
2B |
mediumint |
3B |
int |
4B |
bigint |
8B |
float |
4B |
double |
8B |
decimal |
依赖于整数部分和小数部分的范围 |
如果在数据类型后面加了unsigned
表示无符号,最高位符号位也用来存储。
1.3.2.1.2. 2.1.2字符串型
两种最主要的字符串型:
char(N)
:定长字符串,N表示存储字符个数,N的范围为0~255,当保存字符不满N,会在后面填充空格,检索时会去掉尾部空格。实际存储空间由M和编码决定。varchar(N)
:变长字符串,N表示存储的字符个数(不分中文英文),范围为0~65535,保存字符串时按照实际存储,并在字符串后面加上一个结束符。实际存储空间由字符串长度和编码决定。varchar存储时会加上字符串的长度信息。
两者比较:
char是定长存储,存取和检索效率比varchar更高,varchar更节省空间,对于定长的字段,比如身份证号,使用char更合适。
1.3.2.1.3. 2.1.3日期和时间型
date
:日期数据,yyyy-mm-ddtime
:时间数据,HH:MM:SSdatetime
:日期+时间,yyyy-mm-dd HH:MM:SS
1.3.2.1.4. 2.1.4 二进制类型
big、blob等。
1.3.2.2. 2.2 表操作
# 表相关
-- 创建表
CREATE table if not EXISTS table_name(
id INT comment 'ID',
name VARCHAR(20) comment '姓名',
gender VARCHAR(1) comment '性别'
);
-- 查看当前数据库表
show tables;
-- 查看创建语句
show create table table_name;
-- 查看表结构
desc table_name;
-- 删除表
drop table if EXISTS table_name;
-- 添加列
alter table table_name add column_name VARCHAR(10) not null;
-- 修改列
alter table table_name change column_name column_new_name CHAR(10) not null;
-- 删除列(修改表结构不允许使用if EXISTS)
alter table table_name drop column_name ;
-- 重命名表
rename table table_name to table_new_name;
1.4. DML
1.4.1. 1.插入数据
#插入
-- 插入数据(指定列)
insert into table_name(id,name,gender) VALUES(1,'杰克','男');
-- 当不指定列,必须插入全部列。
insert into table_name VALUES(2,'露丝','女');
保证列名和数据的位置一一对应,否则可能出现严重数据错误
1.4.2. 2.修改数据
-- 修改表中某一列数据(所有的行)
UPDATE table_name SET column_name='value' ;
-- 修改表中某一列数据(满足条件的行)
UPDATE table_name SET column_name='newvalue' WHERE id=1;
1.4.3. 3.删除数据
#删除记录
-- 删除一张表所有记录
DELETE FROM table_name;
-- 删除一张表满足条件的记录
DELETE FROM table_name WHERE id=1111;
-- 删除所有记录(tunncate)
TRUNCATE table table_name;
delete
和truncate
清空表的区别:
delete删除记录,truncate直接删除表后重建一张空表。