SQL增删改操作

目录

前期准备

 切入到db2库

1 在db2库中创建person表(name,age),并指定编码为utf8

2 查看person表结构

3 向person表中插入一条记录,name为tom,age为18

4 向person表中插入一条记录,name为jerry,age不传值

5 向person表中插入两条记录,分别是name为lucy,age为21的记录和name为lily,age为22的记录

6 向person表中插入三条记录,分别是name为danny,name为hanmeimei,name为lilei的记录

7 创建记录,方便学习修改操作

8 将name为刘备的记录的age属性,修改为88

9 将age为5的记录的name属性,修改为黎明

10 将name为关羽的记录的name属性修改为张飞,age属性修改为18

11 如果不写WHERE,将会修改全表(一定要慎重!)

12 删除name为张飞的记录

13 删除age小于30的记录,也就是删除年龄小于30岁的记录

14 不添加WHERE条件,删除表中记录(要慎重!!!!!)

15 数值类型

16 字符串类型

17 日期类型

18 插入三条记录

19 非空约束

20 唯一约束

21 检查约束(了解即可,太费性能,一般不用)

22 外键约束(语法不重要,概念重要)

23 插入记录

前期准备

DROP DATABASE IF EXISTS db2; -- 如果db2库存在则删除

CREATE DATABASE db2 CHARSET UTF8; -- 创建db2库,并指定编码UTF8

SHOW CREATE DATABASE db2;

 切入到db2库

USE db2;

1 在db2库中创建person表(name,age),并指定编码为utf8

CREATE TABLE person

(

name VARCHAR(50),

age INT

) CHARSET UTF8;

展示结果: 

2 查看person表结构

DESC person;

 展示结果: 

3 向person表中插入一条记录,name为tom,age为18

INSERT INTO person

VALUES ('tom', 18);

-- 不指定字段,必须要将所有字段的值都录入,没有值就写null

INSERT INTO person

VALUES ('honey', null);

 展示结果: 

4 向person表中插入一条记录,name为jerry,age不传值

INSERT INTO person(name)

VALUES ('jerry'); -- age字段默认为null

INSERT INTO person(name, age)

VALUES ('张三', 18);

-- 指定字段可以调整顺序,不过录入的值的顺序要和指定字段顺序一致

INSERT INTO person(age, name)

VALUES (20, '李四');

 展示结果: 

5 向person表中插入两条记录,分别是name为lucy,age为21的记录和name为lily,age为22的记录

INSERT INTO person

VALUES ('lucy', 21), ('lily', 22);

-- 不指定字段,必须要将所有字段的值都录入,没有值就写null

 展示结果: 

6 向person表中插入三条记录,分别是name为danny,name为hanmeimei,name为lilei的记录

INSERT INTO person(name)

VALUES ('danny'),('hanmeimei'),('lilei');

-- age字段默认为null

 展示结果: 

7 创建记录,方便学习修改操作

INSERT INTO person

VALUES ('刘备', 40),('关羽', 30),('悟空', 20),('八戒', 10),('张学友', 5);

 展示结果: 

8 将name为刘备的记录的age属性,修改为88

UPDATE person -- 修改person表

SET age = 88 -- 将age属性值改为88

WHERE name = '刘备';

-- name为刘备的记录

 展示结果: 

9 将age为5的记录的name属性,修改为黎明

UPDATE person -- 修改person表

SET name = '黎明' -- 将name属性值改为黎明

WHERE age = 5;

-- age为5的记录

 展示结果: 

10 将name为关羽的记录的name属性修改为张飞,age属性修改为18

UPDATE person

SET name = '张飞',

age=18

WHERE name = '关羽';

 展示结果: 

        

11 如果不写WHERE,将会修改全表(一定要慎重!)

UPDATE person

SET age = 18;

 展示结果: 

12 删除name为张飞的记录

DELETE

FROM person

WHERE name = '张飞';

 展示结果: 

13 删除age小于30的记录,也就是删除年龄小于30岁的记录

DELETE

FROM person

WHERE age < 30;

 展示结果: 

14 不添加WHERE条件,删除表中记录(要慎重!!!!!)

DELETE

FROM person;

 改操作不展示结果,谨慎尝试!!!切记!!!

15 数值类型

DROP TABLE IF EXISTS tb6;

CREATE TABLE tb6

(

a INT(5), -- a字段是INT类型,其中(5)可以不写,但是如果指定了值,表示该字段的值的宽度 录入2,数据表存储时,会自动在2前补空格,超过5位时,会使用实际的宽度

b DOUBLE(6, 4), -- b字段是浮点类型,并且有6位数组成,其中4位是小数位

c DECIMAL(6, 4) -- c字段是浮点类型,并且有6位数组成,其中4位是小数位

) CHARSET UTF8;

INSERT INTO tb6

VALUES (5, 12.3456, 65.4321);

INSERT INTO tb6

VALUES (123456, 12, 65);

 展示结果: 

-- 由于bc字段要求整数部门为2位,所以不能超过范围

INSERT INTO tb6

VALUES (1, 1200, 6000);

 展示结果: 

16 字符串类型

DROP TABLE IF EXISTS tb7;

CREATE TABLE tb7

(

a CHAR(6), -- a字段为定长字符串类型,指定为6个长度,不论录入多少字符,用远占6个字符

b VARCHAR(6), -- b字段为变长字符串类型,指定6个长度,如果录入的不足6个字符,则自动缩容

c TEXT -- c字段为大文本类型字符串,不用指定长度,用于都占有65535个字节

) CHARSET UTF8;

INSERT INTO tb7

VALUES ('abcdef', 'fedcba', 'ajskdjskadjksjlksajdklasdjklsadjklsakldaskljd'); -- abcedf 占6个字节

INSERT INTO tb7

VALUES ('一二三四五六', '一二三四五六', 'ajskdjskadjksjlksajdklasdjklsadjklsakldaskljd'); -- 一二三四五六在UTF8编码表占18个字节

INSERT INTO tb7

VALUES ('a', 'f', 'a');

  展示结果: 

-- a字段内容太长,录入失败 

INSERT INTO tb7

VALUES ('abcdefg', 'gfedcba', 'ajskdjskadjksjlksajdklasdjklsadjklsakldaskljd');

 展示结果: 

 INSERT INTO tb7

VALUES ('abcdef', 'gfedcba', 'ajskdjskadjksjlksajdklasdjklsadjklsakldaskljd');

-- b字段内容太长,录入失败

  展示结果: 

17 日期类型

CREATE TABLE tb8

(

a DATETIME, -- a字段为日期时间类型,会记录年月日时分秒,录入值有格式 YYYY-MM-DD HH:mm:ss或者YYYYMMDDHHmmss

b DATE, -- b字段为日期类型,会记录年月日,录入值有格式 YYYY-MM-DD或者YYYYMMDD(Y year年,M mouth月,D day日)

c TIME, -- c字段为时间类型,会记录时分秒,录入值有格式 HH:mm:ss或者HHmmss(H hour小时,m minute分钟,s second秒)

d TIMESTAMP -- d字段为时间戳类型,会记录年月日时分秒,当操作该记录时,会自动录入的

) CHARSET UTF8;

INSERT INTO tb8(a, b, c)

VALUES ('2023-5-19 12:22:22', '2023-5-19', '12:22:22');

 展示结果: 

-- 如果录入的值不想加分隔符,年一定要4位,月日一定要写2位

INSERT INTO tb8(a, b, c)

VALUES ('20230519122222', '20230519', '122222');

  展示结果: 

-- NOW() 获取当前系统时间

INSERT INTO tb8(a, b, c)

VALUES (NOW(), NOW(), NOW());

   展示结果: 

#修改a字段为2023-05-19 21:56:50的记录,将b字段改为2023-5-20

UPDATE tb8

SET b = '2023-5-20'

WHERE a = '2023-05-19 21:56:50'; -- 执行之后,发现d字段变为当时的操作时间

    展示结果: 

#主键约束

CREATE TABLE tb1

(

id INT PRIMARY KEY, -- PRIMARY KEY指定id列是主键列

name VARCHAR(50)

) CHARSET UTF8;

DESC tb1

   展示结果:  

18 插入三条记录

INSERT INTO tb1

VALUES (1, '张三'),(2, '李四'),(3, '王五');

展示结果: 

-- Duplicate entry '1' for key 'PRIMARY' 主键列要求id不能重复

INSERT INTO tb1

VALUES (1, '赵六');

 展示结果: 

-- Column 'id' cannot be null 主键列要求id不能为空

INSERT INTO tb1

VALUES (NULL, '赵六');

展示结果:  

-- Field 'id' doesn't have a default value id如果没有设置默认值时,不插入会失败

INSERT INTO tb1(name)

VALUES ('赵六');

展示结果:  

CREATE TABLE tb2

(

id INT PRIMARY KEY AUTO_INCREMENT, -- 设置id列是自增主键,必须是整数类型

name VARCHAR(50)

) CHARSET UTF8;

INSERT INTO tb2(name)

VALUES ('张三'), -- 仅录入'张三'字段,自增主键会自动设置id为1

('李四'), -- 仅录入'李四'字段,自增主键会自动设置id为2

('王五'); -- 仅录入'王五'字段,自增主键会自动设置id为3

展示结果:  

INSERT INTO tb2

VALUES (NULL, '赵六'); -- 录入id为NULL,name为'赵六'字段,自增主键会自动设置id

展示结果:  

DELETE FROM tb2

WHERE id = 4;

展示结果:  

INSERT INTO tb2

VALUES (NULL, '孙七2');

SHOW CREATE TABLE tb2;

 展示结果: 

19 非空约束

CREATE TABLE tb3

(

id INT PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(50) NOT NULL -- name字段设置为非空约束,不能录入null值

) CHARSET UTF8;

INSERT INTO tb3(name)

VALUES ('张三');

 展示结果:

-- Column 'name' cannot be null 由于name字段设置了非空约束,所以添加NULL值就会报错

INSERT INTO tb3(name)

VALUES (NULL);

 展示结果: 

20 唯一约束

CREATE TABLE tb4

(

id INT PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(50) UNIQUE -- name字段设置为唯一约束,不能录入重复值

) CHARSET UTF8;

INSERT INTO tb4(name)

VALUES ('张三'),

('李四');

 展示结果: 

-- Duplicate entry '张三' for key 'name' 由于name是唯一约束,所以name值不能重复

INSERT INTO tb4(name)

VALUES ('张三');

  展示结果:

-- NULL值是不受唯一约束限制的

INSERT INTO tb4(name)

VALUES (NULL);

 展示结果: 

21 检查约束(了解即可,太费性能,一般不用)

CREATE TABLE tb5

(

age INT,

gender CHAR(1),

CHECK ( age >= 7 AND age <= 60 ), -- 为age字段设置只能录入[7,60]的值的检查约束

CHECK ( gender IN ('M', 'F')) -- 为gender字段设置只能录入'M','F'两个值的检查约束

) CHARSET UTF8;

INSERT INTO tb5

VALUES (22, 'M');

 展示结果: 

-- 由于5在不在age的允许范围之间,所以失败

INSERT INTO tb5

VALUES (5, 'M');

 展示结果: 

-- 由于'A'在不在gender的允许范围之间,所以失败

 INSERT INTO tb5

VALUES (22, 'A');

  展示结果: 

22 外键约束(语法不重要,概念重要)

CREATE TABLE banji -- 创建班级表

(

id INT PRIMARY KEY AUTO_INCREMENT, -- id是主键自增

name VARCHAR(20)

) CHARSET = utf8;

 展示结果: 

CREATE TABLE xuesheng -- 创建学生表

(

id INT PRIMARY KEY AUTO_INCREMENT, -- id是主键自增

name VARCHAR(20),

ban_id INT, -- 学生的班级id

FOREIGN KEY (ban_id) -- 将ban_id设置为外键约束

REFERENCES banji (id) -- ban_id 只能取自于banji表中的id列

) CHARSET = utf8;

  展示结果: 

23 插入记录

INSERT INTO banji(name)

VALUES ('A'), -- 插入id为1的A班

('B'); -- 插入id为2的B班

 展示结果: 

INSERT INTO xuesheng(name, ban_id)

VALUES ('张三', 1), -- 插入张三,班级是id为1的A班

('李四', 2), -- 插入李四,班级是id为2的B班

('王五', 1); -- 插入王五,班级是id为1的A班

  展示结果: 

-- banji表中没有id为3的记录,所以插入数据时,会被外键限制

INSERT INTO xuesheng(name, ban_id)

VALUES ('赵六', 3);

 展示结果:  

 上一篇文章:SQL高级查询03-优快云博客icon-default.png?t=O83Ahttps://blog.youkuaiyun.com/Z0412_J0103/article/details/143186604下一篇文章:数据库事务-优快云博客icon-default.png?t=O83Ahttps://blog.youkuaiyun.com/Z0412_J0103/article/details/143199520

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小星袁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值