MySQL基础语法之对表的操作语法
总结了MySQL中对表中的数据进行增删改的语法,和创建表的语法
向表中添加数据(insert)
向表中添加数据可以单条添加也可以批量添加
基本语法
- 单条添加
insert into 表名(字段,字段,字段...) values(字段值,字段值,字段值...)
//注意,字段和字段值要一一对应
insert into 表名 values(字段值,字段值,字段值...) //简写
// 不建议使用此种方式,因为当数据库表中的字段位置发生改变的时候会影响到 insert 语句
测试
insert into student(id,name,age,height) values(1,'张三','20','172');
- 批量添加
insert into 表名(字段,字段,字段...) values(字段值,字段值,字段值...),
(字段值,字段值,字段值...),(字段值,字段值,字段值...),...
//注意,字段和字段值要一一对应
测试
insert into student(id,name,age,height) values(1,'张三','20','172'),(2,'李四','19','173'),
(3,'王五','20','171');
怎么插入时间 ?
- 插入的日期格式和显示的日期格式一致
insert into student(id,name,start_time) values(1,'张三','2020-09-01')
- 采用 str_to_date
mysql的日期格式
格式 | 含义 |
---|---|
%Y | 年 |
%m | 月 |
%d | 日 |
%h | 时 |
%i | 分 |
%s | 秒 |
insert into student(id,name,start_time) values(1,'张三',str_to_date('2020-09-01','%Y-%m-%d'))
- 添加系统日期 now()
insert into student(id,name,start_time) values(1,'张三',now()) //now()函数显示是现在系统的时间
修改表中的数据(update)
将你想进行修改的某些表中数据进行修改
基本语法
update 表名 set 字段 = 字段值,字段 = 字段值,字段 = 字段值... where 条件;
测试
将张三的年龄修改为21,身高修改为175
update student set age = 21,height = 175 where name = '张三';
删除表中数据(delete)
可以删除某张表某一条或一些数据,也可以删除一张表的全部数据
delete from 表名 where 条件 //删除一条或者一些数据
delete from 表名 //清空表中所有数据
如果是清空大批量的数据,将一张表的全部数据清空,还要另一种方法 truncate
truncate table 表名;
delete | truncate |
---|---|
原理:表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放 | 原理:这种删除效率比较高,表被一次截断,物理删除 |
缺点:删除效率比较低 | 缺点:不支持回滚 |
优点:支持回滚,后悔了可以再恢复数据 | 优点:快速 |
测试
delete from student where name = '张三' //删除张三的所有信息
delete from student //清空student表中所有数据
truncate table student; //清空student表中所有数据 提示:物理删除
创建表(create)
在创建表中字段时,每一个字段都有字段
删除线格式名、字段数据类型、 字段长度限制、字段约束
基本语法
create table 表名(
字段名 数据类型 字段长度限制 字段约束, //数据类型看需求确定,字段约束看需求添加
字段名 数据类型 字段长度限制 字段约束,
字段名 数据类型 字段长度限制 字段约束,
...
)
数据类型
类型 | 描述 |
---|---|
char(长度) | 定长字符串,存储空间大小固定,适合作为主键或外键 |
varchar(长度) | 变长字符串,存储空间等于实际数据空间 |
double(有效数字位数,小数位) | 数值型 |
Float(有效数字位数,小数位) | 数值型 |
Int(长度) | 整型 |
bigint(长度) | 长整型 |
Date | 日期型 |
blob | Binary Large OBject(二进制大对象) |
其他类型… | … |
常见约束
非空约束 not null 约束字段的值不能为空
唯一约束 unique 约束字段的值不能重复只能唯一,可以为空
主键约束 primary key 标识记录的唯一性
外键约束 foreign key 主要是维护表之间的关系的
补充两点
- unique约束可以多个字段联合来作为约束
- primary key约束分为单一主键和复合(联合)主键,单一主键是由一个字段构成的,复合(联合)主键是由多个字段构成的
测试
- student表
create table student(
id int primary key, //int类型的长度限制可以省略不写 id作为主键
student_id char(11) not null unique, //学生学号,唯一且不为空
name varchar(50) not null, //学生姓名,不为空
cno int //外键 班级id
foreign key(cno) references class(id) // 将班级表class的主键id作为该表的外键
)
- class表
create table class(
id int primary key, //班级id 作为主键也是student表的外键
class_name varchar(255) not null unique //班级名称,唯一且不为空
)
外键不一定是另一张表的主键,因为外键可以为空,所有一般只需要保证作为外键的那个字段唯一
测试unique和primary key约束的联合约束
- student表
create table student(
id int primary key, //int类型的长度限制可以省略不写 id作为主键
student_id char(11) not null, //学生学号,唯一且不为空
name varchar(50) not null, //学生姓名,不为空
cno int //外键 班级id
foreign key(cno) references class(id) // 将班级表class的主键id作为该表的外键
unique(student_id,name) // 学生学号和姓名联合起来不唯一 约束没有添加在列的后面,这种约束被称为表级约束。
)
- class表
create table class(
id int, //班级id 作为主键也是student表的外键
class_name varchar(255) not null //班级名称,唯一且不为空
primary key(id,class_name) // 班级id和班级名称联合起来作为主键
)
在实际开发中不建议使用复合主键,建议使用单一主键
提示
创建有主外键的表的是时候,先创建有作为外键字段的表,再创建引用它的字段作为外键的表,如果是删除则是反着来,先删除引用外键的表,再删除作为外键的表