目录
- DML 基本介绍
- DML 常见操作
- 添加数据 insert
- 给指定字段添加数据
- 给全部字段添加数据
- 给指定字段批量添加数据
- 给全部字段批量添加数据
- 修改数据 update
- 删除数据 delete
- 约束基本概念
- 约束操作
- 主键约束
- 添加单列主键
- 添加多列主键(联合主键)
- 修改表结构添加主键
- 删除主键约束
- 自增长约束
- 默认自增字段初始值
- 指定自增字段初始值
- 非空约束
- 添加非空约束
- 删除非空约束
- 唯一约束
- 添加唯一约束
- 删除唯一约束
- 默认约束
- 添加默认约束
- 删除默认约束
- 零填充约束
- 添加零填充约束
- 删除零填充约束
DML 基本介绍
DML(Data Manipulation Language),数据操作语言,用来对数据库中表的数据记录进行更新
常见的操作有:
- 添加数据
- 修改数据
- 删除数据
DML 常见操作
添加数据 insert
- 插入数据时,指定的字段顺序需要与值的顺序是一一对应的
- 字符串和日期型数据应包含在引号中
- 插入的数据大小应该在字段的规定范围内
给指定字段添加数据
语法格式:
insert into 表名 (字段名1,字段名2,...) values (值1,值2,...);
代码示例:
-- 创建学生表student
create table if not exists student(id int comment '学号',name varchar(10) comment '姓名',gender char(1) comment '性别'
);
-- 往student表中添加数据
insert into student (id, name) values (1,'张三');
结果如下:
给全部字段添加数据
语法格式:
insert into 表名 values (值1,值2,...);
代码示例:
-- 创建学生表student
create table if not exists student(id int comment '学号',name varchar(10) comment '姓名',gender char(1) comment '性别'
);
-- 往student表中添加数据
insert into student values (1,'张三','男');
结果如下:
给指定字段批量添加数据
语法格式:
insert into 表名 (字段名1,字段名2,...) values (值1,值2,...),(值1,值2,...),(值1,值2,...);
代码示例:
-- 创建学生表student
create table if not exists student(id int comment '学号',name varchar(10) comment '姓名',gender char(1) comment '性别'
);
-- 往student表中添加数据
insert into student (id, name) values (1,'张三'),(2,'李四'),(3,'王五');
结果如下:
给全部字段批量添加数据
语法格式:
insert into 表名 values (值1,值2,...),(值1,值2,...),(值1,值2,...);
代码示例:
-- 创建学生表student
create table if not exists student(id int comment '学号',name varchar(10) comment '姓名',gender char(1) comment '性别'
);
-- 往student表中添加数据
insert into student values (1,'张三','男'),(2,'李四','男'),(3,'王五','男');
结果如下:
修改数据 update
语法格式:
update 表名 set 字段名=值,字段名=值,... [where 条件];
- where 关键字用来筛选条件
- 如果没有 where 关键字,则会修改整张表的数据
代码示例:
-- 创建学生表student
create table if not exists student(id int comment '学号',name varchar(10) comment '姓名',gender char(1) comment '性别',address varchar(20) comment '地址'
);
-- 往student表中添加数据
insert into student values (1,'张三','男','上海'),(2,'李四','男','重庆'),(3,'王五','男','北京');
-- 将student表中地址address全部改为广州
update student set address='广州';
-- 将id为1的地址address改为深圳
update student set address='深圳' where id=1;
结果如下:
删除数据 delete
语法格式:
-
delete from 表名 [where 条件];
-
trancate table 表名;
注意事项:
- delete 只会删除表中的内容
- truncate 可以理解为先 drop 表,然后又重新 create 表
代码示例:
-- 创建学生表student
create table if not exists student(id int comment '学号',name varchar(10) comment '姓名',gender char(1) comment '性别',address varchar(20) comment '地址'
);
-- 往student表中添加数据
insert into student values (1,'张三','男','深圳'),(2,'李四','男','重庆'),(3,'王五','男','北京');
-- 删除表中信息
delete from student where address='深圳';
结果如下:
约束基本概念
约束(constraint),实际上就是表中数据的约束(限制)条件
作用:表在设计的时候加入约束的目的就是为了保证表中记录的完整性和有效性,比如用户有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复
分类:
- 主键约束
primary key
PK - 自增长约束
auto_increment
- 非空约束
not null
- 唯一性约束
unique
- 默认约束
default
- 零填充约束
zerofill
- 外键约束
foreign key
FK
约束操作
主键约束
概念:
- MySQL 主键约束是一个列或者多个列的组合,其值能唯一地标识表中的每一行,方便在 RDBMS 中尽快找到某一行
- 主键约束相当于 唯一约束 + 非空约束的组合,主键约束列不允许重复,也不允许出现空值。
- 每个表最多只允许一个主键
- 主键约束的关键字是:primary key
- 当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引
操作:
- 添加单列主键
- 添加多列联合主键
- 删除主键
添加单列主键
创建单列主键有两种方式:
- 在定义字段的同时指定主键
- 定义完字段之后指定主键
方式 1:在定义字段的同时指定主键
语法格式:
create table 表名(......字段名 数据类型 primary key,......
);
代码示例:
-- 创建学生表student并将学号id设为主键
create table student(id int primary key,name varchar(10),gender char(1)
);
-- 查看表结构
desc student;
结果如下:
方式 2:定义完字段之后指定主键
语法格式:
create table 表名(......[constraint <约束名>] primary key [字段名]
);
代码示例:
-- 创建学生表student并将学号id设为主键
create table student(id int,name varchar(10),gender char(1),constraint pk_id primary key(id)
);
-- 查看表结构
desc student;
结果如下:
验证主键的作用:
唯一约束:
代码示例:
-- 创建学生表student并将学号id设为主键
create table student(id int,name varchar(10),gender char(1),constraint pk_id primary key(id)
);
-- 添加数据
insert into student values (1,'张三','男'),(1,'李四','男');
执行了添加数据的代码后,将会得到以下结果:
这段报错信息告诉我们主键不能重复,验证了约束的唯一性
非空约束:
代码示例:
-- 创建学生表student并将学号id设为主键
create table student(id int,name varchar(10),gender char(1),constraint pk_id primary key(id)
);
-- 添加数据
insert into student values (1,'张三','男'),(null,'李四','男');
执行了添加数据的代码后,将会得到以下结果:
这段报错信息告诉我们主键不能为空值,验证了约束的非空性
添加多列主键(联合主键)
联合主键就是一个主键由表中多个字段组成的
注意事项:
- 当主键是由多个字段组成时,不能直接在字段名后面声明主键约束
- 一张表只能有一个主键,联合主键虽然由多个字段组成,但也是一个主键
语法格式:
create table 表名(......primary key(字段1,字段2,...,字段n)
);
代码示例:
-- 创建学生表student并将学号id,电话号码phone_num设为主键
create table student(id int,name varchar(10),phone_num int(11),gender char(1),primary key(id,phone_num)
);
结果如下:
注意事项:
- 联合主键的字段值可以有相同的,但不能是构成主键的所有字段值相同
- 联合主键的字段值每一个都不能为空值
修改表结构添加主键
主键约束不仅可以在创建表的同时创建,也可以在修改表时添加
语法格式:
create table 表名(......
);
alter table 表名 add primary key(字段列表);
代码示例:
-- 创建学生表student
create table student(id int,name varchar(10),phone_num int(11),gender char(1)
);
-- 将学号id,电话号码phone_num设为主键
alter table student add primary key(id,phone_num);
结果如下:
删除主键约束
一个表中不需要主键约束时,就需要从表中将其删除
语法格式:
alter table 表名 drop primary key;
代码示例:
-- 创建学生表student
create table student(id int,name varchar(10),phone_num int(11),gender char(1)
);
-- 将学号id,电话号码phone_num设为主键
alter table student add primary key(id,phone_num);
-- 将主键删除
alter table student drop primary key;
结果如下:
自增长约束
概念:
-
在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值,每增加一条记录,主键会自动以相同的步长进行增长
-
通过给字段添加 auto_increment 属性来实现主键自增长
默认自增字段初始值
语法格式:
字段名 数据类型 auto_increment
代码示例:
-- 创建学生表student
create table student(id int primary key auto_increment,name varchar(10),phone_num char(11),gender char(1)
);
insert into student values(null,'张三',12345678901,'男'),(null,'李四',12345678902,'男');
insert into student(name) values ('王五');
结果如下:
注意事项:
-
默认情况下,
auto_increment
的初始值是 1,每新增一条记录,字段值自动加 1 -
一个表中只能有一个字段使用
auto_increment
约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分) -
auto_increment
约束的字段必须具备NOT NULL
属性。 -
auto_increment
约束的字段只能是整数类型(TINYINT
、SMALLINT
、INT
、BIGINT
等)。 -
auto_increment
约束字段的最大值受该字段的数据类型约束,若达到上限,auto_increment
就会失效。 -
尽量不要混合使用显示和隐式 id 值,MySQL 在批量插入时会按行数增加
auto_increment
计数器,即使显式指定的 id 看似“跳过”了自动分配的值,导致后续插入得到的 id 比预期多
代码示例:
-- 创建学生表student
create table student(id int primary key auto_increment,name varchar(10),phone_num char(11),gender char(1)
);
insert into student values(1,'张三',12345678901,'男'),(null,'李四',12345678902,'男');
insert into student(name) values ('王五');
结果如下:
指定自增字段初始值
如果第一条记录设置了该字段的初始值,那么新增加的记录就从这个初始值开始自增,例如:如果表中插入的第一条记录的 id 值设置为 5,那么再插入记录时,id 值就会从 5 开始往上增加
方式 1:创建表时指定
语法格式:
create table 表名(......字段名 数据类型 primary key auto_increment,......
)auto_increment=100;
代码示例:
-- 创建学生表student
create table student(id int primary key auto_increment,name varchar(10),phone_num char(11),gender char(1)
)auto_increment=100;
insert into student values(null,'张三',12345678901,'男'),(null,'李四',12345678902,'男');
insert into student(name) values ('王五');
结果如下:
方式 2:创建表后指定
语法格式:
create table 表名(......字段名 数据类型 primary key auto_increment,......
);
alter table 表名 auto_increment=100;
代码示例:
-- 创建学生表student
create table student(id int primary key auto_increment,name varchar(10),phone_num char(11),gender char(1)
);
alter table student auto_increment=100;
insert into student values(null,'张三',12345678901,'男'),(null,'李四',12345678902,'男');
insert into student(name) values ('王五');
结果如下:
删除记录后自增列的变化:
- delete 数据之后自动增长从断点开始
- truncate 数据之后自动增长从默认起始值开始
非空约束
概念:MySQL 非空约束(not null)指字段的值不能为空,对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错
添加非空约束
方式 1:创建表时指定
语法格式:
create table 表名(......字段名 数据类型 not null,......
);
代码示例:
-- 创建学生表student
create table student(id int primary key auto_increment,name varchar(10) not null ,phone_num char(11) not null ,gender char(1)
);
alter table student auto_increment=100;
insert into student values(null,'张三',12345678901,'男'),(null,'李四',12345678902,'男');
结果如下:
方式 2:创建表后指定
语法格式:
create table 表名(......字段名 数据类型,......
);
alter table 表名 modify 字段名 数据类型 not null;
代码示例:
-- 创建学生表student
create table student(id int primary key auto_increment,name varchar(10),phone_num char(11),gender char(1)
);
alter table student modify name varchar(10) not null;
alter table student modify phone_num char(11) not null;
insert into student values(null,'张三',12345678901,'男'),(null,'李四',12345678902,'男');
结果如下:
删除非空约束
语法格式:
alter table 表名 modify 字段名 数据类型;
代码示例:
-- 创建学生表student
create table student(id int primary key auto_increment,name varchar(10) not null ,phone_num char(11) not null ,gender char(1)
);
alter table student modify name varchar(10);
alter table student modify phone_num char(11);
insert into student values(null,null,12345678901,'男'),(null,'李四',null,'男');
结果如下:
唯一约束
概念:唯一约束(unique)是指所有记录中字段的值不能重复出现,例如:为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况
添加唯一约束
方式 1:创建表时指定
语法格式:
create table 表名(......字段名 数据类型 unique,......
);
代码示例:
-- 创建学生表student
create table student(id int unique,name varchar(10),gender char(1)
);
insert into student values(1,'张三','男'),(null,'李四','男'),(null,'王五','男');
结果如下:
注意事项:在 MySQL 中 null 值与任意值都不想等包括 null 值
方式 2:创建表后指定
语法格式:
create table 表名(......字段名 数据类型,......
);
alter table 表名 add constraint 约束名 unique(字段名);
代码示例:
-- 创建学生表student
create table student(id int,name varchar(10),gender char(1)
);
alter table student add constraint id_unique unique(id);
insert into student values(1,'张三','男'),(null,'李四','男'),(null,'王五','男');
结果如下:
删除唯一约束
语法格式:
alter table 表名 drop index 约束名;
代码示例:
-- 创建学生表student
create table student(id int,name varchar(10),gender char(1)
);
alter table student add constraint id_unique unique(id);
alter table student drop index id_unique;
insert into student values(1,'张三','男'),(1,'李四','男'),(1,'王五','男');
结果如下:
默认约束
概念:默认约束(default)用来指定某列的默认值
添加默认约束
方式 1:创建表时指定
语法格式:
create table 表名(......字段名 数据类型 default 默认值,......
);
代码示例:
-- 创建学生表student
create table student(id int,name varchar(10),gender char(1),address varchar(20) default '北京'
);
insert into student(id, name, gender) values (1,'张三','男')
insert into student values(2,'李四','男',null),(3,'王五','男','上海');
结果如下:
方式 2:创建表后指定
语法格式:
create table 表名(......字段名 数据类型,......
);
alter table 表名 modify 字段名 数据类型 default 默认值;
代码示例:
-- 创建学生表student
create table student(id int,name varchar(10),gender char(1),address varchar(20)
);
alter table student modify address varchar(20) default '北京';
insert into student(id, name, gender) values (1,'张三','男')
insert into student values(2,'李四','男',null),(3,'王五','男','上海');
结果如下:
删除默认约束
语法格式:
alter table 表名 modify 字段名 数据类型 default null;
代码示例:
-- 创建学生表student
create table student(id int,name varchar(10),gender char(1),address varchar(20)
);
alter table student modify address varchar(20) default '北京';
alter table student modify address varchar(20) default null;
insert into student(id, name, gender) values (1,'张三','男')
insert into student values(2,'李四','男',null),(3,'王五','男',null);
结果如下:
零填充约束
概念:
- 插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的 0。
zerofill
默认为int(10)
。- 当使用
zerofill
时,默认会自动加unsigned
(无符号)属性,使用unsigned
属性后,数值范围是原值的 2 倍。例如,有符号TINYINT
为 - 128~+127,无符号为 0~256。
添加零填充约束
语法格式:
create table 表名(字段名 数据类型 zerofill,......
);
代码示例:
-- 创建学生表student
create table student(id int zerofill,name varchar(10)
);
insert into student values (1,'张三'),(2,'李四'),(3,'王五');
结果如下:
删除零填充约束
语法格式:
alter table 表名 modify 字段名 数据类型;
代码示例:
-- 创建学生表student
create table student(id int zerofill,name varchar(10)
);
insert into student values (1,'张三'),(2,'李四'),(3,'王五');
alter table student modify id int;
insert into student values (4,'赵六');
结果如下: