Java阶段二Day08

news2025/1/15 6:20:31

Java阶段二Day08

文章目录

DML语言-数据操作语言

DML是对表中数据进行操作的语言,涉及的关键字:INSERT UPDATE DELETE

  • INSERT:向表中插入新数据的语句
  • UPDATE:修改表中数据的语句
  • DELETE:删除表中数据的语句

INSERT

  • 向表中插入数据:

    • 在数据库中,字符串的字面量是使用单引号括起来的,需要注意
    • INSERT语句中指定的字段VALUES后面指定的值顺序,个数,类型要完全一致
    • INSERT语句中字段指定时的顺序和个数可以与表结构定义时不一致
    INSERT INTO 表名 (字段1,字段2,...) VALUES (1,2...)
    
  • 插入默认值:

    • INSERT语句中指定字段时,忽略的字段会被插入默认值。当表中字段没有被明确指定默认值时,默认值一律为NULL
    • 默认值的指定:属于DDL语句范畴,使用DEFAULT关键字来为字段指定默认值,可以在创建表时,也可以在修改表时指定
  • 创建表时字段指定默认值:

    CREATE TABLE 表名(
    	字段名1 类型[(长度)][DEFALUT 默认值][约束],
        字段名2 类型[(长度)][DEFALUT 默认值][约束],
    ) [charset = 字符集]
    
  • 修改表时字段指定默认值:

    ALTER TABLE 表名 CHANGE 原字段名 新字段名 类型 [(长度) 默认值 约束]
    
  • 批量插入:

    INSERT INTO 表名(字段...) VALUES (第一组值...),(第二组值...), ...
    
  • 全列插入:

    • INSERT语句中不指定字段时,为全列插入,此时要求VALUES子句后面指定的值的个数,顺序,类型必须与表结构中字段完全一致
    • 子句:在SQL语句中一个关键字可以组成一个子句
    INSERT INTO 表名 VALUES (1,2...)	
    #此时要求VALUES子句中指定的值必须与表结构一致
    

UPDATE

  • 修改表字段数据:

    WHERE子句在UPDATE中的作用:当UPDATE语句添加了WHERE子句时,只有满足WHERE子句要求的记录才会被修改,逐行检查,WHERE子句会在后面DQL中详细展开介绍

    WHERE子句基础条件

    • WHERE中基础条件:>、>=、<、<=、=、<>,(首先"=“在数据库中表达等于,”<>“在数据库中表达不等于。”!="也可以表达不等于,但不是SQL92标准)
    UPDATE 表名 SET 字段名1 = 新值, 字段名2 = 新值,... [WHERE 过滤条件]
    
  • 使用表达式修改:

    UPDATE person SET age = age + 1 
    
  • 修改多字段:

    UPDATE person SET age = 12,name = '张三' WHERE name = '李四';
    

DELETE

DELETE语句通常不会忽略WHERE子句,否则是清空表操作

  • 删除表字段数据:

    DELETE FROM 表名 [WHERE 过滤条件]
    
  • 清空表:

    DELETE FROM person
    

总结

  • INSERT语句,向表中插入数据的语言
    • INSERT语句指定的字段顺序,个数可以与表结构不一致,但是VALUES子句后指定的值必须与指定的字段顺序,类型,个数完全一致
    • INSERT语句在指定字段时,可以忽略某些字段,此时插入数据时被忽略的字段会插入默认值
    • INSERT语句中可以使用关键字DEFAULT显示声明插入默认值
    • INSERT语句中可以使用关键字NULL显示声明插入NULL
    • INSERT语句中不指定字段时为全列插入,此时VALUES后指定的值的顺序,个数,类型要与表结构完全致。实际开发中不推荐这样的写法。
  • UPDATE语句,修改表中记录的语言
    • UPDATE语句通常要指定WHERE子句,如果不指定则为全表修改
  • DELETE语句,删除表中记录的语言
    • DELETE语句通常要指定WHERE子句,否则是清空表操作

数据类型

整数类型

  • INT类型:占用4字节,保存范围:± 21亿
    • INT(M):M表示位数
  • BIGINT类型:占用8字节

浮点类型

  • DOUBLE(M,N):
    • M表示数字位,N表示小数位,( M包含N位 )
    • 如果小数位的精度超过了允许精度,会进行四舍五入
    • 如果四舍五入后得到的值超过了该字段可以保存的最大值时会报错:Out of range value for column ...

字符类型

  • 定长字符串:CHAR

    • CHAR(m):m是一个数字,表示长度,单位是字符。m最大可取255
    • CHAR类型在磁盘中开辟的长度是固定的。例如:CHAR(3),若字符集为UTF-8,则固定开辟12字节。如果实际保存的数据不足则会补充若干个空格来填充长度
    • 优点:在磁盘中保存每条记录的长度是固定的,因此读取速度快
    • 缺点:在磁盘中占用空间固定,无论实际保存数据多少,都要占够空间,因此对磁盘空间有浪费
  • 变长字符串:VARCHARTEXT

    • VARCHAR(m):m是是一个数字,表示字符串的长度,单位是字节,最大65535
    • 实际占用磁盘空间按照实际保存的数据而定,数据转换出来的字节是多少就保存多少。
    • 优点:由于磁盘空间占用取决于实际保存的数据,因此不造成磁盘空间浪费
    • 缺点:由于数据长度不一致,读取效率低
    • TEXT(rn):m是一个数字,单位是字符,m最大值为65535

日期类型

  • DATE:用于保存年月日
  • TIME:用于保存时分秒
  • DATETIME:用于保存年月日时分秒
  • TIMESTAMP(时间戳):保存UTC时间,记录自1970年元旦至表示的时间所经过的毫秒

插入一个日期类型的数据时,DATETIME类型为例(可以保存年月日时分秒),可以使用字符串来表示,但是格式必须为 “yyyy-MM-dd hh:mm:ss” (M表示月,m表示分)

约束条件

给表添加约束条件限制对表的操作符合施加的约束条件,否则数据库拒绝该操作

主键约束(PRIMARY KEY)

  • 主键约束要求该字段的值必须非空且唯一
  • 主键约束在一张标中只能为一个字段施加
  • 主键约束会为表中第一个字段添加,并且通常该字段取名为"id"
  • 主键不能插入重复值、不能插入NULL
  • 插入数据时不能忽略主键字段(会使用默认值NULL),如果主键字段有对应默认值生成机制可以忽略
  • 修改表记录时,不可将重复的值修改到主键字段,不可将NULL值修改到主键
  • 永远不应当更新主键字段
  • 自增:具有主键约束的字段通常由系统完成,而自增就是其中一种方式,当主键是自增时插入数据可忽略主键字段

非空约束(NOT NULL)

  • 被非空约束施加的字段,该字段的值不能为NULL
  • 不能向具有非空约束的字段中插入NULL,也不能修改NULL到具有非空约束的字段中

唯一性约束(UNIQUE)

  • 具有唯一性约束的字段值不允许重复,但是可以为NULL
  • 可以插入NULL值到唯一性约束字段中且可以多次
  • 插入(修改)数据时,不可将重复的值插入(修改)到具有唯一性约束的字段中

检查约束(CHECK)

  • 检查约束允许我们自定义约束条件,仅当满足指定的条件才可以进行操作

外键约束(FOREIGN KEY)

  • 外键约束在实际开发中几乎不会用

DQL语言-数据查询语言

DQL语言用来检索表中数据的语言,涉及到的关键字SELECT

SELECT

  • 执行顺序:

    子句执行顺序
    SELECT 子句6
    FROM 子句1
    JOIN… ON…子句2
    WHERE 子句3
    GROUP BY 子句4
    HAVING 子句5
    ORDER BY 子句7
    LIMIT 子句8
  • 基础查询:

    • SELECT 子句用于指定查询表中的字段
    • FROM子句用于指定数据来自那张表
    SELECT 字段1,字段2,... FROM 表名
    
  • 全部查询:

    SELECT * FROM 表名
    

教师总结

DML语言-数据操作语言

定义

DML是对表中数据进行操作的语言,涉及的关键字:INSERT UPDATE DELETE

  • INSERT:向表中插入新数据的语句
  • UPDATE:修改表中数据的语句
  • DELETE:删除表中数据的语句

准备工作

USE mydb;					使用mydb库
CREATE TABLE person(		创建表person
	name VARCHAR(30),
    age INT(3)
)

INSERT语句-向表中插入数据

语法

INSERT INTO 表名 (字段1,字段2,字段3,...) VALUES (1,2,3,...)
向表中插入一条记录,将值1插入的到字段1中,将值2插入到字段2

向person表中插入记录
INSERT INTO person (name,age) VALUES ('张三',22);
INSERT INTO person (age,name) VALUES (33,'李四');

INSERT INTO person (name,age) VALUES (36,'王五');   不可以,值的顺序与前面指定的字段不匹配
INSERT INTO person (name,age) VALUES ('王五')       不可以,值的个数与前面指定的字段不匹配

注:

  • 在数据库中,字符串的字面量是使用单引号括起来的,需要注意
  • 在INSERT语句中指定的字段与VALUES后面指定的值顺序,个数,类型要完全一致
  • 在INSERT语句中字段指定时的顺序和个数可以与表结构定义时不一致
补充
查询表中数据的语法
SELECT * FROM 表名
SELECT * FROM person

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1xzg6w1l-1682331255067)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424093139937.png)]

插入默认值

INSERT语句中指定字都时,忽略的字段会被插入默认值。当表中字段没有被明确指定默认值时,默认值一律为NULL

INSERT INTO person (name) VALUES ('王五')
此时该条记录插入后,age字段使用默认值NULL

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jP238Cg8-1682331255069)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424093634152.png)]

默认值的指定

注:指定默认值是属于DDL语句的范畴

使用DEFAULT关键字来为字段指定默认值,可以在创建表时,也可以在修改表时指定

在创建表时为字段指定默认值
CREATE TABLE person(
	name VARCHAR(30) DEFAULT '无名氏',
	age INT(3) DEFAULT 30
)

修改表时为字段指定默认值
ALTER TABLE person CHANGE name name VARCHAR(30) DEFAULT '无名氏'

可以使用DESC 表名 在查看表结构时看到字段的默认值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nQtgHCtn-1682331255070)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424094307634.png)]

此时向person表中插入数据时,若不指定name字段,该字段默认值插入’无名氏’

INSERT INTO person (age) VALUES (55)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eZeRNEiA-1682331255075)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424094748627.png)]

全列插入

在INSERT语句中不指定字段时,为全列插入,此时要求VALUES子句后面指定的值的个数,顺序,类型必须与表结构中字段完全一致

补充说明
子句

在SQL语句中一个关键字可以组成一个子句

INSERT INTO person(name,age)		INSERT子句
VALUES('张三',22)					   VALUES子句
这两个子句整体构成了INSERT语句
语法
INSERT INTO 表名 VALUES(1,2,...)	此时就要求VALUES子句中指定的值必须与表结构一致
INSERT INTO person VALUES('赵六',15)   

插入默认值
INSERT INTO person VALUES(DEFAULT,15)	使用DEFAULT关键字表达该字段插入默认值

插入NULLINSERT INTO person VALUES(NULL,78)		使用NULL关键字表达该字段插入NULL值

下面是错误示范:
INSERT INTO person VALUES(15,'赵六')	 不可以,与person表结构字段顺序不一致
INSERT INTO person VALUES('赵六')      不可以,与person表结构字段顺序不一致

批量插入

语法
INSERT INTO 表名(字段...) VALUES(第一组值...),(第二组值...),....
一次插入三条记录
INSERT INTO person(name,age) VALUES('阿猫',11),('阿狗',22),('阿三',33) 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NzLHrsK6-1682331255075)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424100647852.png)]

UPDATE语句-修改表数据

语法

UPDATE 表名
SET 字段1=新值,字段2=新值,...
[WHERE 过滤条件]

UPDATE person
SET age=40
此时该SQL执行后,person表中每条记录的age字段都会被改为40

注:当UPDATE语句中不添加WHERE子句时,会将表中所有记录进行修改,这种操作实际开发中很少见

WHERE子句在UPDATE中的作用

当UPDATE语句添加了WHERE子句时,只有满足WHERE子句要求的记录才会被修改

修改张三的年龄为22
UPDATE person
SET age=22
WHERE name='张三'

数据库在修改记录时对表是逐行进行的,每一行是否进行修改取决于该行记录是否满足WHERE子句的条件要求

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ZBzO7j8-1682331255076)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424103211904.png)]

40岁的人改为36UPDATE person
SET age=36
WHERE age=40

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h2ohQR7U-1682331255077)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424103729271.png)]

WHERE子句基础条件

WHERE子句会在后面DQL中详细展开介绍

WHERE中基础条件:>,>=,<,<=,=,<>(首先"=“在数据库中表达等于,”<>“在数据库中表达不等于。”!="也可以表达不等于,但不是SQL92标准)

将年龄高于30岁的人改为29
UPDATE person
SET age=29
WHERE age>30

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rJvOTW3I-1682331255077)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424104443831.png)]

使用表达式修改

将每个人的年龄涨一岁
UPDATE person
SET age=age+1

修改多字段

将李四的名字改为'李老四',年龄改为66
UPDATE person
SET name='李老四',age=66
WHERE name='李四'

DELETE语句-删除表中数据

语法

DELETE FROM 表名
[WHERE 过滤条件]

注:DELETE语句通常不会忽略WHERE子句,否则是清空表操作!

删除person表中'李老四'
DELETE FROM person
WHERE name='李老四'			//仅删除person表中name字段为'李老四'的记录

删除年龄小于25岁的人
DELETE FROM person
WHERE age<25

清空表

DELETE FROM person

总结

  • INSERT语句,向表中插入数据的语言
    • INSERT语句指定的字段顺序,个数可以与表结构不一致,但是VALUES子句后指定的值必须与指定的字段顺序,类型,个数完全一致
    • INSERT语句在指定字段时,可以忽略某些字段,此时插入数据时被忽略的字段会插入默认值
    • INSERT语句中可以使用关键字DEFAULT显示声明插入默认值
    • INSERT语句中可以使用关键字NULL显示声明插入NULL值
    • INSERT语句中不指定字段时为全列插入,此时VALUES后指定的值的顺序,个数,类型要与表结构完全一致。实际开发中不推荐这样的写法。
  • UPDATE语句,修改表中记录的语言
    • UPDATE语句通常要指定WHERE子句,如果不指定则为全表修改
  • DELETE语句,删除表中记录的语言
    • DELETE语句通常要指定WHERE子句,否则是清空表操作

综合练习

题干

1.创建数据库day2db 字符集utf8并使用
2.创建t_hero表, 有name字段,字符集utf8
3.修改表名为hero
4.最后面添加价格字段money(整数类型,长度6), 最前面添加id字段(整数类型), name后面添加  age字段(整数类型,长度3)
5.表中添加以下数据: 1,李白,50,6888 2,赵云,30,13888 3,刘备,25,6888
6.修改刘备年龄为527.修改年龄小于等于50岁的价格为5000
8.删除价格为5000的信息
9.删除表, 删除数据库

答案

1.创建数据库day2db 字符集utf8并使用
  CREATE DATABASE day2db CHARSET=UTF8
  USE day2db
2.创建t_hero表, 有name字段,字符集utf8
  CREATE TABLE t_hero(
    name VARCHAR(30)
  )
3.修改表名为hero
  RENAME TABLE t_hero TO hero
4.最后面添加价格字段money(整数类型,长度6), 最前面添加id字段(整数类型), name后面添加  age字段(整数类型,长度3)
  ALTER TABLE hero ADD money INT(6)
  ALTER TABLE hero ADD id INT FIRST
  ALTER TABLE hero ADD age INT(3) AFTER name
5.表中添加以下数据: 1,李白,50,6888 2,赵云,30,13888 3,刘备,25,6888
  INSERT INTO hero(id,name,age,money)
  VALUES (1,'李白',50,6888),(2,'赵云',30,13888),(3,'刘备',25,6888)
6.修改刘备年龄为52UPDATE hero
  SET age=52
  WHERE name='刘备'
7.修改年龄小于等于50岁的价格为5000
  UPDATE hero
  SET money=5000
  WHERE age<=50
8.删除价格为5000的信息
  DELETE FROM hero
  WHERE money=5000
9.删除表, 删除数据库
  DROP TABLE hero
  DROP DATABASE day2db

数据类型

设计一张表是,要为表中每一个字段指定类型以确保该字段可以保存正确类型的数据

注:类型本身属于方言,不同的数据库类型不完全一样。

数字类型

整数类型

INT类型:占用4个字节,保存范围±21亿
  • INT(m):m是一个数字,可以指定保存的位数
BIGINT类型:占用8个字节

浮点数类型

DOUBLE(M,N)
  • M是一个数字,表示数字的位数
  • N是一个数字,表示小数的位数
  • M是包含N的位数
  • DOUBLE(7,2):可以保存一个7位数,其中2为是小数,整数5位
CREATE TABLE person1(
	age INT(3),					最大999
    salary DOUBLE(7,2)			最大99999.99
)
  • 插入小数

    INSERT INTO person1(salary) VALUES(99999.99)
    
  • 如果小数位的精度超过了允许精度时,会进行四舍五入

    INSERT INTO person1(salary) VALUES(1234.867)
                                              ^7会进行四舍五入
    实际插入表中后,该记录salary字段的值位1234.87                                          
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f858n7L1-1682331255077)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424141555048.png)]

  • 如果四舍五入后得到的值超过了该字段可以保存的最大值时会报错

    INSERT INTO person1(salary) VALUES(99999.997)
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-teYyPG3d-1682331255078)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424141836097.png)]

字符类型

定长字符串

CHAR类型是定长字符串
  • CHAR(m):m是一个数字,表示长度,单位是字符。m最大可取255
  • CHAR类型在磁盘中开辟的长度是固定的。例如:CHAR(3),若字符集为UTF-8,则固定开辟12字节。如果实际保存的数据不足则会补充若干个空格来填充长度
  • 优点:在磁盘中保存每条记录的长度是固定的,因此读取速度快
  • 缺点:在磁盘中占用空间固定,无论实际保存数据多少,都要占够空间,因此对磁盘空间有浪费

变长字符串

VARCHAR类型
  • VARCHAR(m):m是一个数字,表示字符串的长度,单位是字节.最大65535
  • 实际占用磁盘空间按照实际保存的数据而定,数据转换出来的字节是多少就保存多少。
    • name VARCHAR(30):name字段保存的字符串转换的字节最多30字节。以UTF-8为例,保存"张三"实际需要6个字节,那么该记录实际开辟的磁盘空间也是6个字节
  • 优点:由于磁盘空间占用取决于实际保存的数据,因此不造成磁盘空间浪费
  • 缺点:由于数据长度不一致,会导致读取效率低
TEXT类型
  • TEXT(m):m是一个数字,单位是字符,m最大值为65535

日期类型

  • DATE用于保存年月日
  • TIME用于保存时分秒
  • DATETIME用于保存年月日时分秒
  • TIMESTAMP(时间戳),保存UTC时间,记录自1970年元旦至表示的时间所经过的毫秒

CREATE TABLE userinfo(
	id INT,						id整数类型
    name VARCHAR(30),			name字符串类型,最多30字节
    gender CHAR(1),				gender字符串类型,最多1个字符
    birth DATETIME,				birth日期类型,保存年月日时分秒
    salary DOUBLE(7,2)			salary浮点数类型,最多保存99999.99
)
  • 插入一个日期类型的数据时,DATETIME类型为例(可以保存年月日时分秒),可以使用字符串来表示,但是格式必须为"yyyy-MM-dd hh:mm:ss"(M表示月,m表示分)

    INSERT INTO userinfo(id,name,gender,birth,salary)
    VALUES(1,'张三','男','1998-08-03 10:22:35',5000.65)
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-beJzkK7Z-1682331255079)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424144310698.png)]

  • DATETIME类型可以忽略时分秒。时分秒默认为0。

    INSERT INTO userinfo(id,name,gender,birth,salary)
    VALUES(2,'李四','女','2002-03-15',10000)
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JcMdFeCy-1682331255079)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424144911671.png)]

  • DATETIME类型不可以忽略年月日!

    INSERT INTO userinfo(id,name,gender,birth,salary)
    VALUES(3,'王五','男','10:45:16',9995)
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SiyYX4fz-1682331255080)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424145309479.png)]

  • DOUBLE类型精度超出范围时会进行四舍五入,但是整数部分超出范围会报错

    INSERT INTO userinfo(id,name,gender,birth,salary)
    VALUES(3,'王五','男','1996-06-27',100000)
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1bfOIyLj-1682331255080)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424145711248.png)]

约束条件

我们可以为表添加约束条件,可以限制对标的操作必须符合我们施加的约束条件,否则数据库会拒绝该操作

主键约束PrimaryKey

  • 主键约束要求该字段的值必须非空且唯一
  • 主键约束在一张标中只能为一个字段施加
  • 主键约束会为表中第一个字段添加,并且通常该字段取名为"id"

CREATE TABLE user1(
	id INT PRIMARY KEY,		为id字段添加主键约束
	name VARCHAR(30),
	age INT(3)
)

INSERT INTO user1 (id,name,age) VALUES(1,'张三',22),(2,'李四',33)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8sCIVrru-1682331255081)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424152037971.png)]

  • 主键不能插入重复的值

    INSERT INTO user1(id,name,age) VALUES(1,'王五',36)
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O5QCW1MY-1682331255086)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424152719177.png)]

  • 主键不能插入NULL值

    INSERT INTO user1(id,name,age) VALUES(NULL,'王五',36)
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W7B36BwW-1682331255086)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424152936222.png)]

  • 插入数据时不能忽略主键字段(会使用默认值NULL),如果主键字段有对应默认值生成机制可以忽略

    INSERT INTO user1(name,age) VALUES('王五',36)
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K0D3Pzim-1682331255087)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424153331937.png)]

  • 修改表记录时,不可以将重复的值修改到主键字段

    UPDATE user1
    SET id=1
    WHERE name='李四'
    由于user1表中'张三'记录的id为1,因此不能将'李四'记录的id也改为1
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lXH8hZNm-1682331255088)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424153609526.png)]

  • 修改表记录时也不可以将NULL值修改到主键字段

    UPDATE user1
    SET id=NULL
    WHERE name='李四'
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TWyA2tZE-1682331255089)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424153851373.png)]

永远不应当更新主键字段!

自增

具有主键约束的字段通常主键的生成方式由系统完成,而自增就是其中一种方式

  • 创建表时为主键字段添加自增

    CREATE TABLE user2(
    	id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(30),
        age INT(3)
    )
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KPy9C6fg-1682331255090)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424154758325.png)]

  • 修改表时为主键字段添加自增

    修改user1表时为id字段添加主键约束以及自增模式
    ALTER TABLE user1 CHANGE id id INT PRIMARY KEY AUTO_INCREMENT
    
    修改表时仅添加自增
    ALTER TABLE user1 CHANGE id id INT AUTO_INCREMENT
    
  • 当主键字段具有自增时,插入数据则可以忽略主键字段

    INSERT INTO user2(name,age) VALUES('张三',33)
    INSERT INTO user2(name,age) VALUES('李四',26)
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yLf8VqCE-1682331255090)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424155744326.png)]

  • 当主键字段具有自增时,可以显示的向主键中插入NULL值,但此时主键字段仍然使用自增(不推荐这样写)

    INSERT INTO user2(id,name,age) VALUES(NULL,'王五',45)
    

非空约束(NOT NULL)

被非空约束施加的字段,该字段的值不能为NULL

  • 创建表时为字段添加非空约束

    CREATE TABLE user3(
    	id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(30) NOT NULL,				name字段施加非空约束
        age INT(3)
    )
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YaOrJVtw-1682331255090)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424162251776.png)]

  • 修改表时为字段添加非空约束

    为user2表的name字段添加非空约束
    ALTER TABLE user2 CHANGE name name VARCHAR(30) NOT NULL
    
  • 插入数据时,不能向具有非空约束的字段中插入NULL值

    INSERT INTO user3(name,age) VALUES(NULL,22)		不可以将NULL值插入name字段
    
  • 也不可以修改NULL值到具有非空约束的字段中

    UPDATE user2
    SET name=NULL					不能将NULL值修改到具有非空约束的字段中
    WHERE id=1
    

唯一性约束(UNIQUE)

具有唯一性约束的字段值不允许重复,但是可以为NULL。

  • 创建表时为字段添加唯一性约束

    CREATE TABLE user4(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	name VARCHAR(30) UNIQUE,
        age INT(3)
    )
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cAqELrfX-1682331255091)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424163643452.png)]

  • 修改表时也可以为字段添加唯一性约束

    注意:user3的name本身具有非空约束,但是如果此时添加唯一性约束时会取消非空约束
    ALTER TABLE user3 CHANGE name name VARCHAR(30) UNIQUE
    
    如果不希望取消非空约束则需要一并声明
    ALTER TABLE user3 CHANGE name name VARCHAR(30) NOT NULL UNIQUE
    
    
  • 插入数据时,不可以将重复的值插入到具有唯一性约束的字段中

    INSERT INTO user4(name,age) VALUES('张三',22)		可以
    INSERT INTO user4(name,age) VALUES('张三',45)		不可以再次插入'张三'到name字段
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h2Evbjlf-1682331255091)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424164609077.png)]

  • 可以插入NULL值到具有唯一性约束的字段中,且可以多次

    INSERT INTO user4(name,age) VALUE(NULL,36)		成功
    INSERT INTO user4(name,age) VALUE(NULL,47)		成功
    
  • 修改记录,也不能将重复的值修改到具有唯一性约束的字段中

    UPDATE user4
    SET name='王五'			
    WHERE id=3				
    可以,因为'王五'在user4的name字段中不存在
    
    UPDATE user4
    SET name='张三'			
    WHERE id=3	
    不可以,因为'张三'在user4的name字段中已有
    

检查约束(CHECK)

检查约束允许我们自定义约束条件,仅当满足我们指定的条件才可以进行操作

  • 创建表时添加CHECK约束

    CREATE TABLE user5(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	name VARCHAR(30),
    	age INT(3) CHECK(age>0 AND age<120)			要求age字段的值>0且<120
    )
    
  • 插入数据时,age字段的取值必须符合CHECK约束

    INSERT INTO user5(name,age) VALUES('张三',22)		成功
    INSERT INTO user5(name,age) VALUES('李四',160)	失败
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5mXz2Taj-1682331255092)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424170413039.png)]

  • 更新表数据时,也不能违反CHECK约束

    UPDATE user5
    SET age=0
    WHERE id=1
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JhadAYWt-1682331255092)(C:\Users\TEACHER\IdeaProjects\BirdBoot2303\数据库笔记\image-20230424170743067.png)]

外键约束

外键约束在实际开发中几乎不会用

DQL语言-数据查询语言

DQL语言用来检索表中数据的语言,涉及到的关键字SELECT

语法

						执行顺序
SELECT 子句				6	
FROM 子句					1
JOIN... ON...子句			2
WHERE 子句				3
GROUP BY 子句				4
HAVING 子句				5
ORDER BY 子句				7
LIMIT 子句				8

基础查询

语法

SELECT 字段1,字段2,... FROM 表名
  • SELECT 子句用于指定查询表中的字段
  • FROM子句用于指定数据来自那张表

  • 使用SELECT * FROM 表名,可以从指定的表中查询所有字段

    USE tedu
    
    检索teacher表中的所有字段的所有记录
    SELECT * FROM teacher
    
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/456914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安科瑞:列头柜、监控系统、触摸屏的数据中心机房配电方案

摘要 安科瑞精密配电系统是安科瑞针对数据中心集中监控要求提供的多回路监控装置&#xff0c;监控多回路电参量并可对各种故障进行告警。主要适用于各类列头柜、精密配电柜、电源分配柜、UPS输出柜等末端配电设备的监控。在阐述数据中心机房机柜配电目标要求的基础上&#xff…

Redis分布式缓存方案

分布式缓存 单节点Redis问题 数据丢失&#xff1a;数据持久化并发能力弱&#xff1a;搭建主从集群&#xff0c;实现读写分离故障恢复问题&#xff1a;哨兵实现健康检测&#xff0c;自动恢复存储能力&#xff1a;搭建分片集群&#xff0c;利用插槽机制实现动态扩容 Redis持久…

Windows逆向安全(一)之基础知识(十八)

指针作为参数 代码 #include "stdafx.h" void function(int num){num52; } void function2(int* num){*num52; } int main(int argc, char* argv[]) {int num610;function(num);printf("%d\n",num);function2(&num);printf("%d\n",num);re…

KVM NAT 模型

目录 NAT原理 virbr0-nic作用 关于kvm中的网桥和virbr0-nic网卡需注意以下几点&#xff1a; NAT原理 virbr0-nic作用 在kvm中每次通过kvm创建一个网桥都会自动在该网桥下创建两个接口&#xff0c;与网桥同名的virbr0接口代表这个虚拟网桥&#xff0c;可以通过它来配置网桥…

vue2的生命周期

生命周期就是记录数据的状态。对数据进行操作 刚开始 new Vue() 创建了一个实例对象 beforeCreate() 数据还没有创建出来 created() 数据创建出来了&#xff0c;可以访问 判断有没有el 或 template 后 将模板编译成渲染函数 beforeMount() 数据还没有挂在到页面上面 mou…

引入tiff.js报错

当我们安装引入tiff.js时&#xff0c;会遇到这些问题&#xff0c;相关命令以及错误&#xff1a; 1、安装tiff依赖 npm install tiff.js 2、引入tiff import Tiff from tiff.js 3、错误展示&#xff1a; 这个错误是因为没有在vue.config.js以及webpack.base.conf.js(在build文…

C4D的GPU渲染器Octane和Redshift的渲染对比

对CG圈创作人员来说&#xff0c;除制作软件外渲染器是平时接触最多的一类软件&#xff0c;用渲染器进行渲染的过程&#xff0c;就是把制作软件里的预览效果变到融合材质、光照、物理特性的最终效果的这个过程&#xff0c;这是CG制作中最重要的一步&#xff0c;关乎着最终效果的…

头歌--shell脚本入门 变量、字符串--第3关:shell 字符串

任务描述 本关带领大家熟悉 shell 的变量并掌握其使用。 相关知识 字符串概念 字符串是 shell 编程中最常用最有用的数据类型&#xff08;除了数字和字符串&#xff0c;也没啥其它类型好用了&#xff09;&#xff0c;字符串可以用单引号&#xff0c;也可以用双引号&#xff…

数据库系统概论--期末复习

目录 一.绪论 一.数据库系统概述 二.数据模型 三.数据库系统的结构 四.数据库系统的组成 二.关系数据库 一.关系数据结构及形式化定义 二.关系操作 三.关系的完整性 四.关系代数 三.SQL语言 一.数据定义 二.数据查询 三.数据更新 四.视图 四.数据库安全性 1.不安…

Access Token 访问令牌 如何获取?

一、引用 三方库导入时&#xff0c;通常需要输入账号和令牌进行鉴权。账号为指定平台的 HTTP 克隆账号&#xff0c;访问令牌即 Access Token&#xff0c;本文介绍如何获取常见三方代码平台的Access Token。 Access Token 通常在代码平台的个人账号设置内进行管理和配置&#xf…

给konva加个刻度尺

给konva加个刻度尺 最近在用konva做一些&#xff0c;一开始写了不少辅助函数。帮助自己给物体定位 &#xff0c;现在贡献出来给大家用。 给图层增加刻度尺 顾名思义就是加个刻度显示&#xff0c;效果如下&#xff1a; 代码&#xff1a; 第一个参数时layer&#xff0c;第二个…

居民配电所远程监控解决方案

一、项目背景 随着城市建设提速发展、能源利用日益提高、环保节能成为了城市发展的新趋势&#xff0c;配电站逐渐成为企业和居民生活中不可或缺的组成部分。居民的生活用电需求也日益增大。如果没有及时处理好用电安全很容易出现电力中断等情况发生。因此及时高效地为用电客户…

区域LIS源码,基于云计算B/S架构医学实验室检验系统源码

基于B/S架构的医学实验室检验系统源码&#xff0c;整个系统的运行基于WEB层面&#xff0c;只需要在对应的工作台安装一个浏览器软件有外网即可访问。全套系统采用云部署模式&#xff0c;部署一套可支持多家医院检验科共同使用。 采用.Net Core新的技术框架、DEV报表、前端js封…

CASS方格网法土石方量计算

1、打开软件&#xff0c;在“绘图处理”-“展野外测点点号”&#xff0c;默认比例尺为1:500&#xff0c;如下&#xff1a; 2、打开后&#xff0c;在命令行输入pl&#xff0c;绘制范围线&#xff0c;将所有点大致圈起来&#xff0c;如下&#xff1a; 展点结果 范围线绘制结果 3…

【软件测试面试】性能测试常问面试题?不备这些真不敢去面了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试的应用领…

给图片加颜色边框怎么弄,3种好用方法

给图片加颜色边框怎么弄&#xff1f;图片是我们每个人平时都必不可少的文件之一&#xff0c;尤其是在工作中的使用&#xff0c;不同的使用场景对于图片的要求也是不一样的&#xff0c;这就要求我们具有一定的图片处理技能&#xff0c;现在任何事情都离不开电脑&#xff0c;所以…

操作系统原理 —— 进程状态切换具体做了哪些事情?(八)

什么是进程控制&#xff1f; 进程控制的主要功能是&#xff1a;对系统中的所有进程实施有效的管理&#xff0c;它具有创建新进程、撤销已有进程、实现进程状态转换等功能。 简单来说&#xff0c;就是进程控制就是要现实进程状态的转换。 那如何实现进程的控制呢&#xff1f;…

案例01-tlias智能学习辅助系统02-文件上传

4.6 文件上传 若要实现下方的文件上传页面&#xff0c;需要前后端做如下操作&#xff1a; 后端&#xff1a; 本地存储 云存储 阿里云官方文档说明 具体实现参考上方连接&#xff0c;不再详细说明 阿里云OSS快速入门请参考文档&#xff1a; AliOSS.md &#xff08;在talis文…

不同场景下的并发容器选择

在并发编程中&#xff0c;我们经常会使用容器来存储数据或对象&#xff0c;可以依据场景的变化选择多种容器。 Map并发容器 因为在 JDK1.7 之前&#xff0c;在并发场景下使用 HashMap 会出现死循环&#xff0c;从而导致 CPU 使用率居高不下&#xff0c;而扩容是导致死循环的主…

扫描电镜学习手册

SEM测试&#xff0c;在通俗意义上来讲&#xff0c;可以看成是一个放大倍数超级大的“放大镜”。 作为当今十分有用的科学研究仪器&#xff0c;扫描电子显微镜是介于透射电镜和光学显微镜之间的一种微观性貌观察手段&#xff0c;可直接利用样品表面材料的物质性能进行微观成像。…