SQL
结构化查询语言,所有关系型数据库的操作标准
分类
DQL: 数据查询语言
用于数据的查询,经常select子句绑定where条件子句使用
DML: 数据操作语言
添加,修改|删除表中的数据
添加数据:
insert into 表名(字段名,字段名,…)values(要赋的值,…);
insert into 表名(字段名1,字段名2,…,字段名n) values(值1,值2,…,值n);
当要给所有字段都赋值的时候,(字段名,字段名,…)可以省略不写
insert into 表名 values(值1,值2,…,值n);
当要给部分字段都赋值的时候,(字段名,字段名,…)可以必须指明哪些字段
当要添加多条数据时,可以在values后面用逗号","隔开
insert into 表名 values(值1,值2,…,值n),(值1,值2,…,值n),(值1,值2,…,值n);
修改数据:
update 表名 set 字段名=新值;
一般情况下不会使用上面的修改语句,因为上面的修改语句默认会修改当前字段所有的数据,一般要在后面加上where子句。
update 表名 set 字段名=新值,字段名=新值… where 条件;
删除数据:
delete from 表名;
一般情况下不会使用上面的删除语句,因为上面的删除语句默认会删除当前表中所有的数据,一般要在后面加上where子句。
delete from 表名 where 条件;
delete和truncate都可以删除数据,区别是:
1.delete为DML操作数据语言;truncate为DDL数据定义语言(因为涉及到删除表格)
2.delete操作是将表中的记录一条一条删除直到删除完;truncate操作则是将旧表的结构保留并进行新建,所有状态都相当于新表。truncate效率会更高。
3.delete操作可以回滚;truncate操作可能会导致隐式提交,因此不能回滚
4.delete操作执行成功后会在底部运行结果返回已删除的行数;truncate操作不会返回。
5.delete操作删除表中记录后,再次向表中添加新记录时,对于设置有自增约束字段的值会从删除前表中该字段的最大值加1开始自增;truncate 操作会重新从1开始自增。
DDL:数据定义语言
操作数据库(库),数据库表 (表) ,识图,索引…
库
创建库
create database 库名;
删除库
drop database 库名;
选择库
use 库名;
表
创建表
create table 表名(
字段名 字段类型,
…
)
删除表
drop table 表名;
操作表
修改表名
rename table 旧表名 to 新表名;
修改字段类型 modify
alter table 表名 modify 字段名 新字段类型;
修改字段名称
alter table 表名 change 旧字段名 新字段名 新字段类型;
添加字段
alter table 表名 add 字段名 字段类型; – 添加到末尾
alter table 表名 add 字段名 字段类型 first; – 添加到第一个位置
alter table 表名 add 字段名 字段类型 after 指定字段名; – 添加到指定字段名的后面
查看所有表
show tables;
查看指定表的层级结构
desc 表名;
查看建表语句
show create table 表名;
数据控制语言 DCL
DCL用来授予或回收访问数据库的权限
主要包括:
GRANT: 授予用户权限
REVOKE: 回收授予的权限 。
事务控制语言 TCL
TCL用于数据库的事务管理
主要包括:
START TRANSACTION: 开启事务
COMMIT: 提交事务
ROLLBACK: 回滚事务
SQL中常见的数据类型
整型
int(长度限制):
长度限制可以指定也可以不指定
指定了长度限制,超了指定的限制,自动扩充
浮点类型
double(m,n):
长度限制需要指定
指定了长度限制,不可以超过指定的限制
m是整体长度
n是小数点后的长度
字符型
char(长度限制):
长度限制需要指定
指定了长度限制,不可以超过指定的限制
直接分配指定的空间(长度不可变)
varchar(长度限制):
长度限制需要指定
指定了长度限制,不可以超过指定的限制
根据内容动态分配空间(长度可变)
日期类
time:‘HH:MM:SS’
date:‘YYYY-MM-DD’
datetime:日期+时间 ‘YYYY-MM-DD HH:MM:SS’
timestamp:日期+时间 ‘YYYY-MM-DD HH:MM:SS’
TIMESTEMP类型的数据指定方式与DATETIME基本相同,两者不同之处在于以下几点:
1.数据的取值范围不同,TIMESTEMP类型的取值范围更小
2.如果我们对TIMESTAMP类型的字段没有明确赋值,或是被赋与了NULL值,MySQL会自动将该字段赋值为系统当前的日期与时间
约束
可以对表中的数据做一些限制,保证数据的正确性、完整性、有效性
分类
主键约束
primary key 唯一+非空(不可重复且不能为空) 一个表中只能存在一个主键约束
语法格式
1.创建表时
1)字段名 字段类型 primary key
2)primary key(字段名)
2.表创建后(通过DDL语句设置主键)
alter table 表名 primary key(字段名);
主键自增:数据库自动生成主键字段的值
主键字段 字段类型 primary key auto_increment (字段类型必须为整数类型)
删除主键约束:(使用DDL语句删除主键约束时,注意主键不能设置为自增)
alter table 表名 drop primary key; (只删除了不能重复)
alter table 表名 modify 主键字段 字段类型; (删除了不能为空)
唯一约束
unique 唯一(不能重复)
语法格式
字段名 字段类型 unique
设置完后当前字段中的数据不能出现重复,如果出现重复会提示 Duplicate entry ‘值’ for key
非空约束
not null 非空
语法格式
字段名 字段类型 not null
设置完后当前字段中的数据不能为空,如果为空会提示 Column ‘字段名’ cannot be null
默认值约束
default 赋予默认值
语法格式
字段名 字段类型 default ‘默认值’
当不指定字段的具体值时,会使用默认值存储
删除默认值 (就是把默认值变为null)
字段名 字段类型 default null
检查(mysql8提供)
check 检查取值范围是否符合要求
语法格式
字段名 字段类型 check(字段=‘值’ or 字段=‘值’)
字段名 字段类型 check(字段>m or 字段<n)
字段名 字段类型 check(字段>m and字段<n)
设置完后当前字段中的数据必须符合check要求,如果不符合会提示 Check constraint ‘表名_chk_1’ is violated
外键
foreign key 表与表之间的操作