1. DML相关的操作: 数据库的操作语言
作用 : 对表中数据的增 删 改
关键词: insert delete update
1.1: 如何添加数据操作:insert
格式:
格式一:
insert into 表 (字段1,字段2,字段3....) values (值1, 值2,值3....);
格式二:
insert into 表 values(值1, 值2,值3....);
注意事项:
1) 值与字段必须对应,个数相同,类型相同
对于格式一 , 字段1 对应的值 就是 值1 , 字段2 对应值就是值2 以此类推....
对于格式2: 要求值的个数一定要与对应表中字段个数是一致的, 并且顺序也要一致
2) 值的数据大小必须在字段的长度范围内
3) 除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
4) 如果要插入空值,可以不写字段,或者插入 null。
注意: 对于格式2来讲 只能使用null , 不能不写对应字段
进行操作案例:
-- 1_在 bigData_day03 库中 创建一个 category 分类表
use bigData_day03;
create table category (
id int primary key,
name varchar(20)
);
/*
2) 往这个表中插入一下内容: 分别用两种格式
1 服装
2 电子产品
3 化妆品
4 图书
5 null
6 null
注意: null 是关键词 不用添加 单引号 表示啥也没有
*/
insert into category (id,name) values(1,'服装');
insert into category (name,id) values ('电子产品',2);
insert into category values(3,'化妆品');
insert into category values(4,'图书'); -- 报错的原因因为 id是int类型的 而图书是字符串, 还有没有可能出现其他问题呢?
insert into category(id,name) values(5,null);
-- 或者
insert into category(id) values(5);
insert into category values (6,null);
-- 教大家一个 DQL 语句查询全部数据
select * from category;
1.2: 更新(修改)数据: update
语法格式:
# 此种格式用于更新某一列或者某一列中全部数据
update 表名 set 修改字段名称1 = 具体修改的值1 ,修改字段名称1 = 具体修改的值1 ...;
# 此种格式用于根据具体条件, 将对应符合条件的数据的对应某一列或者某几列字段的值进行修改
update 表名 set 修改字段名称1 = 具体修改的值1 ,修改字段名称1 = 具体修改的值1 ... where 条件;
注意事项:
1) 列名的类型与修改的值要一致.
2) 修改值得时候不能超过最大长度.
3) 除了数值类型外,其它的字段类型的值必须使用引号引起
案例操作:
-- 需求1: 请将 id为 5 的数据 中的name值 修改为 家用电器 : 有没有条件呢 ? 有的 条件都是 id为5
update category set name = '家用电器' where id = 5;
-- 需求2: 请将 id为 6的数据中name值 修改为 厨房用品
update category set name = '厨房用户' where id = 6;
-- 需求3: 请将 name字段的值统一修改为 电子产品
update category set name = '电子产品';
1.3: 删除数据操作: delete
语法格式:
格式1: 如果没有条件, 全部都删除, 如果有条件, 就删除符合条件数据
delete from 表名 [where 条件] ;
格式2: 清空表
truncate table 表名 ;
注意: 如果是清空表, 第一种第二种都可以, 如果要根据条件来删除数据, 必须使用格式1
案例操作:
-- 需求1: 删除 id为 6的数据
delete from category where id = 6;
-- 需求2: 删除全部数据 :
delete from category ;
-- 或者
truncate table category;
关于 使用delete 和 truncate 再删除全部数据的区别: 笔试题中可能会问到
1) delete 和 truncate删除的方式不同:
delete是将数据一条一条的删除的
truncate是将表之间drop掉, 然后重新建立一个新的表
2) 所属的SQL分类也不同:
delete属于 DML操作 而truncate 数据 DCL操作
3) 关于自增长列不同:
delete不会清空自增长列已经自增过的内容, 而truncate会清空, 让自动增长进行重新初始化
2. SQL的约束:
2.1: 主键约束:
关键词: primary key
特点: 唯一 非空
注意事项:
每个表都应该都一个主键, 并且每个表只能有一个主键
如何添加主键约束:
方式一 : 创建表的时候, 直接在字段的约束的区域内, 标识对应约束即可 (比较常用的一种)
create table Persons1(
Id_P int PRIMARY KEY,
LastName varchar(255) ,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
方式二: 创建表的时候, 在字段的最后, 使用constraint来定义约束内容 (高大上写法)
格式: [constraint 约束的名称] PRIMARY KEY (字段列表)
关键字constraint可以省略,如果需要为主键命名,constraint不能省略,主键名称一般没用。
字段列表需要使用小括号括住,如果有多字段需要使用逗号分隔。声明两个以上字段为主键,我们称为联合主键。
CREATE TABLE Persons2(
FirstName varchar(255),
LastName varchar(255),
Address varchar(255),
City varchar(255),
constraint pk_PersonID PRIMARY KEY (FirstName, LastName)
);
需求: 创建一个表 people , 字段有 firstName 和 lastName 和 age字段
其中 firstName 和 lastName为联合主键
操作代码:
create table people (
firstName varchar(20),
lastName varchar(20),
age int ,
primary key (firstName,lastName)
);
方式三: 使用alter 来进行添加, 主要是用于在创建表以后来添加操作
alter table 表名 add primary key (字段列表)
如何删除主键约束:
alter table 表名 drop primary key ;
思考: 请问为什么在删除主键约束的时候, 不需要指定对应字段呢, 主键的字段有可能有多个呢?
因为主键约束在整个表中只有一个