目录
1 在db2库中创建person表(name,age),并指定编码为utf8
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的记录
10 将name为关羽的记录的name属性修改为张飞,age属性修改为18
13 删除age小于30的记录,也就是删除年龄小于30岁的记录
14 不添加WHERE条件,删除表中记录(要慎重!!!!!)
前期准备
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-优快云博客
https://blog.youkuaiyun.com/Z0412_J0103/article/details/143186604下一篇文章:数据库事务-优快云博客
https://blog.youkuaiyun.com/Z0412_J0103/article/details/143199520