当前位置: 首页 > news >正文

SQL server学习03-创建和管理数据表

目录

 一,SQL server的数据类型

1,基本数据类型

2,自定义数据类型

 二,使用T-SQL创建表

1,数据完整性的分类

2,约束的类型

3,创建表时创建约束

4,任务

5,由任务编写的SQL语句 

三,使用T-SQL管理表 

1,创表时添加约束名 

1)添加约束名 

2) 修改由任务编写的SQL语句 (添加约束名)

2,使用ALTER TABLE修改表

1)从表中删除列

2)向表中添加列 

3)修改表中列的长度

4)对指定表添加默认约束 

 3,使用DROP TABLE删除表


通过前一篇SQL server学习02-使用T-SQL创建数据库-CSDN博客的学习

我已经创建好了数据库,接下来开始使用创好的库创表。首先了解表的概念:

  1. 表是数据关系模型中表示实体的方式 
  2. 表是数据库中用来组织和存储数据,具有行列结构的数据库对象,数据库中的数据都存储在表中。
  3. 表由行和列组成。

    值得注意的是,一张表就是一个关系。 表有行和列,关系有记录和字段。表有表名,每个关系都有一个关系名。

    行称为记录,是组织数据的单位,每行都是一条独立的数据记录。
    列称为字段,主要描述数据的属性。

如下就是常见的一张excel二维表。

表分为普通表和系统表。

  1. 普通表由用户创建:用户定义的表也称为标准表,用来存储数据库应用系统中的数据。
  2. 系统表由系统创建:存储了有关数据库服务器的配置,数据库设置,用户和数据库对象的描述等系统信息,用户不能创建。

在同一个数据库中,表名不能重复,在同一张表中列名不允许相同,但在不同的表中列名可以相同。

【ps:同一张表列名重复无意义。由于不同表之间可能存在联系,因此会有相同列名。】

 一,SQL server的数据类型

 在创建表之前,需要考虑要创建的表包含哪些内容,例如一张表包含

  1. 哪些列
  2. 每列都是什么数据类型

可以看到,在创表时,数据类型很关键。SQL server提供了基本数据类型和自定义数据类型。

先来学习基本数据类型(也称系统数据类型)。

1,基本数据类型

基本数据类型是系统本身就自带的,可以直接拿来用,如下👇 

2,自定义数据类型

自定义数据类型不是系统自带的基本数据类型,但用户需要以SQL server系统数据类型为基础创建。

多张表中的列要存储相同类型的数据时,往往要确保这些列具有完全相同的数据类型,长度和为空性(数据的值是否允许为空) ,可以通过用户自定义数据类型来实现。例如:

  1. 电话的长度都为11,非空,且唯一。

    如果某个系统要求电话这一列的长度为11个字符,那么有效的电话内容可以是“12345678912”或“98765432121”,但“123”或“123456”就不符合这个要求。
     
  2. 身份证的长度为18,非空,且唯一。

下面通过SSMS创建一个名为char30的自定义数据类型,要求基于char系统数据类型,大小为30个字符。

 鼠标右击“用户定义数据类型”子节点,可以看到之前的自定义数据类型char30已被排列在“用户自定义数据类型”列表中:

 二,使用T-SQL创建表

不管是在MySQL中还是在SQL server中,创库创表都是一样的关键字"CREATE",如果创库后面接DATABASE ,创表后面则接TABLE 。 

 在SQL server中使用T-SQL语句创表的语法如下:

CREATE TABLE 数据表名
(列名 数据类型[列级完整性约束条件]
[,...n]
[,表级完整性约束条件]
)

 可以看到,在上述语法总,“约束条件”出现了两次。约束时SQL server提供的自动保持数据库完整性的一种方法。之所以存在约束条件,是因为需要保持数据库的完整性(即数据完整性)。

 用户在向表格中添加数据时,有些数据的内容可能与实际情况不相符,例如:

  1. 年龄:1000岁     (没有人能够活到1千岁)
  2. 性别:好             (性别没有“好”,要么是“男”或“女”,要么是美国的97 种性别中的一个)
  3. 身份证号:12     (身份证号必须是18位,极少数是15位)
  4. 邮箱:123           (邮箱格式写错)

可以看到,这些数据都是不可靠的,为了能够保证数据的准确可靠,就需要对数据表进行数据完整性设置。

1,数据完整性的分类

  1.  实体完整性(行完整性):

    指表的每一行在表中是唯一的实体。一般用主键约束 PRIMARY KEY。

    例如,学生表中的每一行代表表中唯一的一名学生,不会有两行或两行以上的记录来表示同一个学生(太浪费空间,没必要)。
     
  2. 域完整性(列完整性):

    指列满足特定的数据类型和约束。可以使用检查约束或非空约束。

    例如,成绩表中成绩这一列的值限定在[0,100],学生表中性别只能为“男”或“女”,年龄非空。
     
  3. 参照完整性(引用完整性):

    指表和表之间的字段指是有关联的(特殊情况是产生在同一张表的不同字段值之间),参照表中的外键值必须存在于被参照表中的主键值中(这句话的意思就是:你要参照我的数据,那么我的外键列在你的表中必须是主键列)。使用外键约束。

    例如,成绩表中的学号这一列(外键)的值必须存在于学生表中学号这一列(主键)的值中。
     
  4. 用户定义的完整性:

    指某一具体的应用必须满足的语义要求或用户实际的业务规则。(较少使用)
     

 接下来了解SQL server中的约束类型。

2,约束的类型

分为:

  1. 检查约束(CHECK)

    指定某列可取值的集合或范围,用于实现域完整性。一张表可以有多个检查约束。

    在设置检查约束时,需要加上逻辑表达式,即:CHECK(逻辑表达式)
     
  2. 默认约束(DEFAULT)

    若在表中定义了默认值约束,用户在插入新的数据行时,如果没有为该列指定数据,那么系统会将默认值赋值给该列。
     
  3. 主键约束(PRIMARY KEY)

    主键是表中某列或多个列的组合,可以唯一确定一条记录。可以保证实体完整性。每张表只能有一个主键,主键不能为空(即如果一个字段为主键,就必须同时设置为非空约束)。
     
  4. 外键约束(FOREIGN)

    表与表之间是有关系的,有两张表分别为表A和表B,两张表中有相同的列m,假设列m在表A中是主键(或具有唯一约束),则列m在表B中为外键,需要使用外键约束。语法如下:
     
    --表A中
    CREATE TABLE A(
    列名m 数据类型 约束条件为主键PRIMARY KEY,
    )--表B中
    CREATE TABLE B(
    列名m 数据类型,
    FOREIGN KEY (m) REFERENCES A(m)
    )


    此时,表A称为主表(或被参考表),表B为从表或参考表。存在相互联系的两种表中,谁有主键,谁就是主表。

    外键表示一张表中的列于另外一张表中列的引用关系,以保证不同表中数据的一致性。用于实现参照完整性。
  5. 唯一约束(UNIQUE)

    用于指定表中某列或多个列的组合值,具有唯一性,确保在非主键列中输入非重复值。可以保证实体的完整性。虽然这点和主键约束很像,但是使用唯一约束的字段允许为空null,并且只能有一个该字段值为空,即如果有一条记录的该字段为空,那么其他记录的该字段必须有值,并且这些值必须是唯一的。在一张表中,唯一约束可有多个,而主键约束只能有一个。

    例如,现在我有一张表的数据如下,sphone设置了唯一约束:
     
    snosphone
    1153xxxxxxxx
    2null
    3189xxxxxxxx

    如果再试图插入另一条记录,如果sphone也为空,就会违反唯一约束,从而导致插入失败。

  6. 非空约束(NOT NULL)

    指定表中的某些列必须有具体值,可以实现域完整性。
     

知道了数据完整性和约束条件这两个概念,就可以在创建表的同时创建约束,也可以在修改表时创建约束。

为了方便后期删除指定约束,有些时候在创建约束的时候可以给当前的约束指定一个约束名字(约束名),删除表中指定约束时,可以使用指定约束的约束名来进行删除该约束。 constraint拘束。

添加表中约束的语法如下👇

ALTER TABLE 表名
ADD CONSTRAINT 约束名 约束条件(表中需要加指定约束的列名)

删除表中约束时,使用关键字DROP,如下👇

ALTER TABLE 表名
DROP CONSTRAINT 约束名;

一般不用自己写,使用默认的约束名就行。

3,创建表时创建约束

语法格式如下:

CREATE TABLE 数据表名(从表)
(
列名 数据类型,
.
.
.
FOREIGN KEY (列名) REFERENCES 主表名(列名)
)

4,任务

在StuScore数据库中,根据需要还需要创建系部表,班级表和用户表。使用T-SQL语句按照下表所示的表结构创建所需的三张表。以下是数据库中各张表的结构👇

注意点:

  1. 学生表不是第一张先创的表,从图中可以看到,学生表有一个班级编号外键classid,表示在学生表students和班级表classes之间,班级表是主表,学生表是从表。因此要先将创建班级表,再创建学生表。
  2. 根据之前所学的约束条件,上面的建表就会很简单,使用默认的约束条件。
  3. 约束条件:

    主键  PRIMARY KY
    检查  CHECK(gender='男' or gender='女')
    外键  FOREIGN KEY
    唯一  UNIQUE
     

上述表中,唯一特别的就是成绩表score中的sno和cno都是主键约束,通过之前的学习,我知道了一张表只能有一个主键约束。

为什么成绩表score中会有两个主键?

答:因为每个学生可以选修多门课,所以成绩表中的学生学号sno就会有重复,这意味着仅使用sno作为主键无法保证数据的实体完整性,因为它不能唯一标识每一条成绩记录。然而,每个学生在同一门课程中只会有一条成绩记录,因此sno和cno的组合可以唯一标识每一条成绩记录。通过将这两个字段合并为一个复合主键,能够有效地保证数据的实体完整性。

复合主键”:就如上面的情况,一张表只能有一个主键,但是有些时候需要多个字段同时为一个主键,这种时候就需要使用到复合主键。

值得注意的是,因为我是事先看表结构来创表的,因此,我知道要用到复合主键,sno和cno先不加任何约束,之后再一起添加主键约束。

如果不小心将学号设置成了主键,就需要先使用如下语句删掉原有的主键,再添加复合主键进去。

--删除约束
ALTER TABLE 表名
DROP CONSTRAINT 约束名  -- 添加复合主键约束
ALTER TABLE 表名
ADD CONSTRAINT 约束名  PRIMARY KEY(列名1,列名2)

上面这张表主要是用于连接数据库,对应数据库的sa用户及密码。 如果后面做项目的话,会用到。

按照生活常识:

  1. 没有系部的成立,就没有班级
  2. 学生达到一定人数,才会开设课程。
  3. 没有学生考试,就不会有成绩。

可以看到,首先应该创建的是系部表,再是班级表,接着就是学生表,课程表,成绩表。

编写的sql语句如下:

5,由任务编写的SQL语句 

USE Stuscore  --之前创建的数据库
----系部表
-- 检查并删除表 dept
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'dept' AND type = 'U')DROP TABLE dept
CREATE TABLE dept(deptno char(5) NOT NULL PRIMARY KEY,dname nchar(10) NOT NULL,dean nchar(4),phone char(8) UNIQUE
);--班级表
-- 检查并删除表 classes
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'classes' AND type = 'U')DROP TABLE classes;
CREATE TABLE classes(classid char(6) NOT NULL PRIMARY KEY,speciality nchar(12) NOT NULL,deptno char(5) NOT NULL, counselor nchar(4),FOREIGN KEY (deptno) REFERENCES dept(deptno)
);--学生表
-- 检查并删除表 students
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'students' AND type = 'U')DROP TABLE students;
CREATE TABLE students
(sno char(8) NOT NULL PRIMARY KEY,sname nchar(4) NOT NULL,gender nchar(1) CHECK(gender='男' or gender='女'),classid char(6) NOT NULL,  birthday date,phone char(13) UNIQUE,FOREIGN KEY (classid) REFERENCES classes(classid)
)--课程表
-- 检查并删除表 courses
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'courses' AND type = 'U')DROP TABLE courses;
CREATE TABLE courses
(cno char(10) NOT NULL PRIMARY KEY,cname nvarchar(20) NOT NULL,period int NOT NULL,credit tinyint NOT NULL,  type nchar(5) NOT NULL
)--成绩表
-- 检查并删除表 score
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'score' AND type = 'U')DROP TABLE score;
CREATE TABLE score
(sno char(8) NOT NULL,cno char(10) NOT NULL,CONSTRAINT PK_score_sno_cno PRIMARY KEY(sno, cno),grade tinyint CHECK(grade>=0 and grade<=100),FOREIGN KEY (sno) REFERENCES students(sno), FOREIGN KEY (cno) REFERENCES courses(cno)    
)--用户表
-- 检查并删除表 users
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'users' AND type = 'U')DROP TABLE users;
CREATE TABLE users(login char(10) NOT NULL PRIMARY KEY,username nchar(5) NOT NULL,  pwd char(10) NOT NULL
)-- 检查是表中的字段是否完整
SELECT * FROM dept
SELECT * FROM classes
SELECT * FROM students
SELECT * FROM score
SELECT * FROM users

三,使用T-SQL管理表 

1,创表时添加约束名 

这里以系部表dept为例。

1)添加约束名 

系部表中的deptno为主键约束,如果不添加主键约束名的语句就如下编写:

deptno char(5) NOT NULL PRIMARY KEY,

但如果想要给主键加上约束名,就需要先写好列deptno不急着添加主键约束,需要再写一行语句给列deptno添加主键约束及主键约束名:

    deptno char(5) NOT NULL,CONSTRAINT PK_dept_deptno PRIMARY KEY(deptno),

 为什么需要给约束添加上约束名,主要是因为随着时间的推移,有些约束条件需要改变,比方说,成绩表中的成绩grade现在的约束是0~100分,但是满分可能会变成150分,即约束为0~150。

如果想要在不删除表格的前提下修改该约束,就需要通过约束名来修改该约束条件。

如果不给约束条件加上约束名,系统会为该约束条件分配名字,但由系统给的约束名字会变。

使用如下语句查看系统给的约束名(这里是dept表,查看主键PK):

SELECT name FROM sys.key_constraints WHERE parent_object_id = OBJECT_ID('dept') AND type = 'PK';

先不手动添加约束名,dept表的deptno列约束名就会随着程序的每一次运行而改变,如下👇:

第一次执行下面的语句: 

 再次执行下面的语句: 

仔细看,会发现表示主键约束的关键字PK及表名dept不变,但是后面的约束名会变。 如果想要通过约束名来删除该约束无疑是天方夜谭。因此建议只要含有主键约束的列最好都加上对应的约束名。约束名可以写成如下形式:

约束条件单词首位字母大写_数据表名_被添加约束的列名

手动添加约束名之后再去查看约束名,就不会随着程序的运行而改变: 

2) 修改由任务编写的SQL语句 (添加约束名)

--USE Stuscore  --之前创建的数据库----系部表
-- 检查并删除表 dept
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'dept' AND type = 'U')DROP TABLE dept
CREATE TABLE dept(dno char(5) NOT NULL CONSTRAINT PK_dept_dno PRIMARY KEY(dno), --dno系编号 dne nchar(100) NOT NULL,  --dne系名 dept nameddn nchar(100), --ddn系主任  dept deandpe char(11),   --dpe系联系电话 dept phoneCONSTRAINT CK_deptno_dpn UNIQUE(dpe)
)--班级表
-- 检查并删除表 classes
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'classes' AND type = 'U')DROP TABLE classes;
CREATE TABLE classes(cno char(6) NOT NULLCONSTRAINT PK_classes_cno  PRIMARY KEY(cno), --cno班级编号cne nchar(100) NOT NULL,  --cne班级名 classes namedno char(5) NOT NULL,  --dno系编号ccr nchar(100),  --班级辅导员 classes counsellorCONSTRAINT FK_dept_dno FOREIGN KEY (dno) REFERENCES dept(dno)
);--学生表
-- 检查并删除表 students
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'students' AND type = 'U')DROP TABLE students;
CREATE TABLE students
(sno char(8) NOT NULL  CONSTRAINT PK_students_sno  PRIMARY KEY(sno),  --sno学生编号sne nchar(100) NOT NULL,  --sne 学生名 students namessx nchar(6)CONSTRAINT CK_students_ssx  CHECK(ssx='male' or ssx='female'), --ssx学生性别 students sexcno char(6) NOT NULL,    --cno班级编号sbd date,  --sbt学生出生日期 students birth dayspe char(11) CONSTRAINT UQ_students_spe UNIQUE(spe),   --spe学生联系方式 students phonesnn nvarchar(100)  CONSTRAINT DF_students_snn DEFAULT 'China', --snn学生国籍 students nationCONSTRAINT FK_students_cno FOREIGN KEY (cno) REFERENCES classes(cno)
);--课程表
-- 检查并删除表 courses
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'courses' AND type = 'U')DROP TABLE courses;
CREATE TABLE courses
(cno char(10) NOT NULLCONSTRAINT PK_courses_cno  PRIMARY KEY(cno),   --cno课程编号 cne nvarchar(100) NOT NULL,   --cne 课程名 courses namecpd int NOT NULL,      --cpd课程学时  courses periodcct tinyint NOT NULL,   --cct  课程学分  courses creditcte nchar(20) NOT NULLCONSTRAINT CK_courses_type CHECK(cte='optional_course' or cte='required_course')  --cte课程类型 courses type
)--成绩表
-- 检查并删除表 score
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'score' AND type = 'U')DROP TABLE score;
CREATE TABLE score
(sno char(8) NOT NULL, cno char(10) NOT NULL,CONSTRAINT PK_score_sno_cno PRIMARY KEY(sno, cno),get tinyint,  --get 成绩得分CONSTRAINT CK_score_get  CHECK(get>=0 and get<=100),CONSTRAINT FK_score_sno FOREIGN KEY (sno) REFERENCES students(sno), CONSTRAINT FK_score_cno FOREIGN KEY (cno) REFERENCES courses(cno)    
)--用户表
-- 检查并删除表 users
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'users' AND type = 'U')DROP TABLE users;
CREATE TABLE users(uln char(100) NOT NULL   CONSTRAINT PK_users_uln  PRIMARY KEY(uln),  --uln 用户登录 users loginune nchar(100) NOT NULL,    --une  用户名  users name  upd char(10) NOT NULL    -- upd 用户登录密码 users password
)-- 检查是表中的字段是否完整
--SELECT * FROM users
SELECT * FROM studentsSELECT * FROM deptSELECT * FROM classesSELECT * FROM score

2,使用ALTER TABLE修改表

有些时候已经创好表,点击执行之后,会存在少列,少约束等问题。这些问题都不用担心,能够在创建好数据表后添加。

可以使用ALTER  TABLE... DROP COLUMN...删除列,ALTER...ADD...添加列。

1)从表中删除列

语法如下: 

ALTER TABLE 数据表名 DROP COLUMN 要删除的列名(无任何约束条件)

 需要注意的是,删除的列必须没有任何约束,这里以用户表users为例,我现在删除主键列login

可以看到,因为有约束条件-主键约束,所以该列无法删除。

但是如果我想要删除没有任何约束的列pwd,是完全可以删除的,如下👇

2)向表中添加列 

 语法如下:

ALTER TABLE 数据表名 ADD 新列的名字 新列的数据类型

依旧可以使用ALTER TABLE关键字将删除的列pwd再添加回来:

3)修改表中列的长度

语法如下: 

ALTER TABLE 数据表明 COLUMN 列名(新的长度)

以上面的用户表users为例,将列pwd的长度由原来的10变成20,可以如下编写语句:

ALTER TABLE users ALTER COLUMN  pwd char(20)

 如果想要查看修改的长度是否生效,可以使用如下语句查看列的长度:

--查看列的长度
SELECT column_name AS 列名, data_type AS 数据类型, character_maximum_length AS 数据长度
FROM information_schema.columns
WHERE table_name = 'users' AND column_name = 'pwd';

如上,长度修改成功。 

4)对指定表添加默认约束 

 这里以学生表students为例,向学生表中添加新列nation国籍 nvarchar(10),默认值为“中国”。

 ALTER TABLE studentsADD nation nvarchar(10)  CONSTRAINT DF_students_nation DEFAULT('中国')

 通过上图可以无法直观的感受到默认值的优势,后面插入数据的时候会更直观。

ALTER TABLE courses ADD  CONSTRAINT DF_courses_cte DEFAULT 'required_course' FOR cte
INSERT INTO dept(dno,dne,ddn,dpe)
VALUES('1','Computer','QiangguoGong','1531111111')INSERT INTO classes(cno,cne,ccr,dno)
VALUES('1','Computer24','JianjunSong','1')INSERT INTO students(sno,sne,ssx,sbd,spe,cno) 
VALUES('1','zs','male','2000.1.1','18911111111','1')INSERT INTO courses(cno,cne,cpd,cct)
VALUES('1','SQLserver DataBase Application principle','96','6')INSERT INTO users(uln,une,upd)
VALUES('SQL_identity','sa','123456')

 3,使用DROP TABLE删除表

 能够创建表自然也就能够删除表。删表的语法如下:

DROP TABLE 数据表名

有问题请在评论区留言或者是私信我,回复时间不超过1天。

相关文章:

SQL server学习03-创建和管理数据表

目录 一&#xff0c;SQL server的数据类型 1&#xff0c;基本数据类型 2&#xff0c;自定义数据类型 二&#xff0c;使用T-SQL创建表 1&#xff0c;数据完整性的分类 2&#xff0c;约束的类型 3&#xff0c;创建表时创建约束 4&#xff0c;任务 5&#xff0c;由任务编写…...

Windows 系统下 Python 环境安装

一、引言 Python 作为一种广泛应用的编程语言&#xff0c;在数据分析、人工智能等领域发挥着重要作用。本文将详细介绍在 Windows 系统上安装 Python 环境的步骤。 二、安装前准备 系统要求 Windows 7 及以上版本一般都能支持 Python。硬件方面&#xff0c;通常 2GB 内存、几…...

Redis 在Go项目中的集成和统一管理

本节我们在项目中安装和集成 go-redis&#xff0c;让项目能访问Redis&#xff0c;后面实战项目中的用户认证体系会依赖Redis来实现&#xff0c;像Token、Session这些都是在Redis中存储的。 本节大纲如下&#xff1a;‍‍ Redis的使用场景有不少&#xff0c;不过有一点需要提醒的…...

Hive——HQL数据定义语言

文章目录 Hive HQL数据查询语言更多大数据资源持续更新中。。。学习目标一、HQL数据定义语言&#xff08;DDL&#xff09;概述1、DDL语法的作用2、Hive中DDL使用☆ 创建数据库☆ 查询数据库☆ 切换数据库☆ 修改数据库☆ 删除数据库 二、Hive DDL建表基础1、完整建表语法树2、H…...

Python机器视觉的学习

一、二值化 1.1 二值化图 二值化图&#xff1a;就是将图像中的像素改成只有两种值&#xff0c;其操作的图像必须是灰度图。 1.2 阈值法 阈值法&#xff08;Thresholding&#xff09;是一种图像分割技术&#xff0c;旨在根据像素的灰度值或颜色值将图像分成不同的区域。该方法…...

使用navicat新旧版本,连接PostgreSQL高版本报错问题图文解决办法

使用navicat新旧版本&#xff0c;连接PostgreSQL高版本报错问题图文解决办法 一、问题现象&#xff1a;二、出现原因三、解决方法&#xff1a;1、升级Navicat版本&#xff1a;2、使用低版本的postgreSQL&#xff1a;3、修改Navicat的dll二进制文件&#xff1a;navicat版本15nav…...

秒杀抢购场景下实战JVM级别锁与分布式锁

背景历史 在电商系统中&#xff0c;秒杀抢购活动是一种常见的营销手段。它通过设定极低的价格和有限的商品数量&#xff0c;吸引大量用户在特定时间点抢购&#xff0c;从而迅速增加销量、提升品牌曝光度和用户活跃度。然而&#xff0c;这种活动也对系统的性能和稳定性提出了极…...

【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(四)

目录 ARC规则 规则 对象型变量不能作为C语言结构体的成员 显式转换id和void* 属性 数组 ARC规则 规则 在ARC有效的情况下编译源代码必须遵守一定的规则&#xff1a; 主要解释一下最后两条 对象型变量不能作为C语言结构体的成员 要把对象型变量加入到结构体成员中时&a…...

Reactor 响应式编程(第一篇:Reactor核心)

系列文章目录 Reactor 响应式编程&#xff08;第一篇&#xff1a;Reactor核心&#xff09; Reactor 响应式编程&#xff08;第二篇&#xff1a;Spring Webflux&#xff09; Reactor 响应式编程&#xff08;第三篇&#xff1a;R2DBC&#xff09; Reactor 响应式编程&#xff08…...

数据挖掘之聚类分析

聚类分析&#xff08;Clustering Analysis&#xff09; 是数据挖掘中的一项重要技术&#xff0c;旨在根据对象间的相似性或差异性&#xff0c;将对象分为若干组&#xff08;簇&#xff09;。同一簇内的对象相似性较高&#xff0c;而不同簇间的对象差异性较大。聚类分析广泛应用…...

修改uniapp下拉刷新圆圈颜色

直接看图 修改前就是常规的绿色 自定义更符合我们的软件 直接说方法 修改 在App.vue的style样式里添加一行 .uni-page-refresh--refreshing .uni-page-refresh__path{stroke:#FF2442; }我是通过 不执行 uni.stopPullDownRefresh(); 下拉刷新 之后通过F12看出来的 希望可以帮…...

SparkSQL与Hive的整合

文章目录 SparkSQL与Hive的整合1.1. Spark On Hive1.1.1. Hive的准备工作1.1.2. Spark的准备工作1.1.3. Spark代码开发1.1.4. Spark On Hive案例 1.2. Hive On Spark1.3. SparkSQL命令行1.4. SparkSQL分布式查询引擎1.4.1. 开启ThriftServer服务1.4.2. beeline连接ThriftServer…...

电子科技大学考研,计算机与软件专业怎么选择?

电子科技大学在计算机与软件领域具备卓越实力&#xff0c;其毕业生就业前景及薪资水平均颇为可观。因此&#xff0c;学生应依据个人课程专长来选定专业。若各项课程均表现出色&#xff0c;推荐25届考生优先考虑软件专业&#xff0c;因其上岸难度相对较低。 接下来&#xff0c;C…...

MSF(Metasploit Framework)

渗透测试中MSF是一个非常强大的工具&#xff0c;可以用来验证系统漏洞、执行攻击以及开发自定义的漏洞利用代码。以下是使用MSF进行渗透测试的基本步骤&#xff1a; 1.启动MSF 启动MSF控制台。 msfconsole2. 搜索漏洞 在MSF中搜索已知漏洞。 search <vulnerability nam…...

@SpringBootTest 报错: UnsatisfiedDependencyException

Spring Boot Test 报错: UnsatisfiedDependencyException 在使用 SpringBootTest 测试时&#xff0c;出现 UnsatisfiedDependencyException 报错&#xff0c;原因和解决方法如下。 报错原因分析 1. Spring 存在涉及 Bean 没有被添加 Spring Boot 测试中&#xff0c;默认会加…...

QT数据库操作详解

在Qt中&#xff0c;操作数据库通常使用Qt SQL模块&#xff0c;该模块提供了一组类来与数据库进行交互。 数据库连接与查询执行 QSqlDatabase::addDatabase(): 添加一个数据库连接。 QSqlDatabase::open(): 打开数据库连接。 QSqlDatabase::close(): 关闭数据库连接。 QSql…...

Coding Caprice - dynamic programming13

647. 回文子串 class Solution { public:int countSubstrings(string s) {int s_len s.size();vector<int> dp{0};int out(1);for(int i1; i<s_len; i){out;vector<int> dq{i};if(s[i]s[i-1]){dq.push_back(i-1);out;}for(int j:dp){if(j>0&&s[j-1…...

Fastapi教程:使用 aioredis 连接池执行Redis 的高效异步操作

在构建高性能的 Web 应用时&#xff0c;缓存系统是一个至关重要的组成部分。Redis 是最常见的缓存系统之一&#xff0c;它提供了高效的存储与读取机制。然而&#xff0c;在与 Redis 进行频繁交互时&#xff0c;创建和销毁连接可能会成为瓶颈。为了优化这一问题&#xff0c;我们…...

Elasticsearch对象映射

Spring Data Elasticsearch对象映射是将Java对象&#xff08;域实体&#xff09;映射到存储在Elasticsearchs中的JSON表示形式并返回的过程。内部用于此映射的类是MappingElasticsearchConverter。 元模型对象映射 基于元模型的方法使用域类型信息对Elasticsearch进行读写操作…...

解决Logitech G hub 无法进入一直转圈的方案(2024.12)

如果你不是最新版本无法加载尝试以下方案&#xff1a;删除AppData 文件夹下的logihub文件夹 具体路径&#xff1a;用户名根据实际你的请情况修改 C:\Users\Administrator\AppData\Local 如果你有通过lua编译脚本&#xff0c;记得备份&#xff01;&#xff01; ↓如果你是最新…...

Debezium SchemaNameAdjuster 分析

Debezium SchemaNameAdjuster 分析 目录 1. 概述2. 核心功能3. 实现原理4. 应用场景5. 扩展示例6. 总结1. 概述 SchemaNameAdjuster 是 Debezium 中的一个工具类,主要用于确保 Schema 名称符合 Avro 命名规范。在数据库变更事件被转换为 Kafka 消息时,需要为每个表和字段创…...

聊一下前端常见的图片格式

1. JPEG (JPG) 概述&#xff1a;是一种有损压缩的图像格式&#xff0c;它通过去除图像中一些人类视觉不易察觉的细节来减小文件大小。它支持数百万种颜色&#xff0c;能够很好地呈现照片等色彩丰富的图像内容。优点&#xff1a; 压缩率高&#xff1a;可以在保持相对较好的图像…...

npm : 无法加载文件 D:\nodejs\npm.ps1

问题描述 npm run serve 启动一个Vue项目&#xff0c;报错如下&#xff1a; npm : 无法加载文件 D:\nodejs\npm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/? LinkID135170 中的 about_Execution_Policies。…...

如何使用 Python 实现 TCP / IP 客户端和服务端通信?

如何使用Python实现TCP/IP客户端和服务端通信&#xff1f; 1. TCP/IP通信基础 TCP/IP&#xff08;传输控制协议/互联网协议&#xff09;是互联网的基础协议&#xff0c;用于在网络中的计算机之间进行可靠的数据传输。在Python中&#xff0c;可以使用socket模块来实现TCP/IP通…...

IDEA 可视化使用 git rebase 合并分支步骤 使git分支树保持整洁

模拟环境 dev 分支开发完一个功能&#xff0c;需要合并到 master 分支&#xff0c;如果现在直接 merge 合并的话 git分支树会出现杂乱分叉&#xff0c;先把 master 分支 rebase 到 dev git分支树就会是整洁的一条直线 git rebase介绍 rebase:翻译成中文是重新设定&#xff0c;…...

【指南】03 CSC联系外导

确定外导 课题组有合作关系的国外导师与自己研究方向密切相关的国外导师国外高校官网、谷歌学术、Research Gate等平台检索不可以是中国港澳台的高校科研院所或机构注意外导所在高校排名和科研水平可列表记录注意外国签证政策 发送邮件 自我介绍简要介绍CSC介绍自己的研究对…...

axios请求拦截器和响应拦截器,封装naive-ui的 Loading Bar加载条和useMessage消息提示

接之前的博客设计从0开始边做边学&#xff0c;用vue和python做一个博客&#xff0c;非规范化项目&#xff0c;怎么简单怎么弄&#xff0c;跑的起来有啥毛病解决啥毛病&#xff08;三&#xff09;&#xff0c;目前已经完成了基本的功能demo&#xff0c;但是请求接口不可能每个页…...

联网功耗电流波形

飞行模式下&#xff0c;Wifi 可连接或不可连接的条件对比&#xff1a; 1. 基电流为 3.5 mA 的环境下, 网络不可连接时,会产生一个持续0.72s,平均电流为 54.8 mA 的电流波形 2. 基电流为 6.8 mA 的环境下, 网络可连接时,会产生一个持续4.64s,平均电流为 73.63 mA 的电流波形 …...

Unity 模板测试透视效果(URP)

可以实现笼中窥梦和PicoVR中通过VST局部透视效果。 使用到的Shader: Shader "Unlit/StencilShader" {Properties{[IntRange]_Index("Stencil Index",Range(0,255))0}SubShader{Tags{"RenderType""Opaque""Queue""Geo…...

C 语言动态爱心代码

C 语言动态爱心代码 代码 #include <stdio.h> #include <math.h> #include <windows.h> #include <tchar.h> float f(float x, float y, float z) {float a x * x 9.0f / 4.0f * y * y z * z - 1;return a * a * a - x * x * z * z * z - 9.0f / …...

Linux服务器磁盘满了,清理步骤命令

Linux服务器磁盘满了&#xff0c;磁盘空间不足&#xff0c;清理步骤 1. 检查磁盘使用情况 了解哪些文件和目录占用了大量空间。 使用 df -h查看所有分区的总体使用情况。 使用 du -sh /directory/* | sort -rh | head -n 10 查找特定目录下占用空间最大的前10个子目录或文件。…...

CTFshow-命令执行(Web41-57)

CTFshow-命令执行(Web41-57) CTFWeb-命令执行漏洞过滤的绕过姿势_绕过空格过滤-CSDN博客 总结rce&#xff08;远程代码执行各种sao姿势&#xff09;绕过bypass_远程命令执行绕过-CSDN博客 对比两者的源代码&#xff0c;我们发现&#xff0c;cat指令把flag.php的内容导出后依…...

Batch Norm vs Layer Norm:为什么 Transformer 更适合用 Layer Norm?

Batch Norm vs Layer Norm&#xff1a;为什么 Transformer 更适合用 Layer Norm&#xff1f; 1. Batch Norm 和 Layer Norm 的定义与作用 1.1 Batch Normalization (BN) Batch Norm 是一种归一化方法&#xff0c;主要用于加速深层神经网络的训练。它在每个小批量&#xff08;b…...

jQuery Mobile页面事件

jQuery Mobile页面事件 jQuery Mobile是一个基于jQuery的移动设备友好的Web应用框架,它提供了一套丰富的页面事件,这些事件在移动应用的交互设计中扮演着重要的角色。本文将详细介绍jQuery Mobile中的页面事件,包括它们的触发时机、用途以及如何使用它们来增强移动应用的交…...

接口测试Day01-HTTP请求

概念 接口&#xff1a;系统之间&#xff08;外部系统与内部系统&#xff0c;内部系统与内部系统&#xff09;数据交通的通道。 接口测试&#xff1a;校验 接口回发的 响应数据 与 预期结果 是否一致。 接口测试&#xff0c;可以绕过前端界面。直接对 服务器进行测试&#xff01…...

使用枚举实现单例模式,不会反序列化破坏攻击,不会被反射破坏攻击。(附带枚举单例的简单实现)

原因分析 1.反序列化方法 ① jdk8中的Enum源码中对反序列化方法进行重写&#xff0c;抛出异常。 java.lang.Enum#readObject方法截图如下 ②java.io.ObjectInputStream#readObject 方法中的 readEnum 方法处理了枚举类型的反序列化&#xff0c;从而确保了枚举的单例特性。 …...

又细又长的马尾:tail

英语里边有一个单词 tail&#xff0c;意为“尾巴”&#xff0c;这应当是众所周知的事情了。 不过&#xff0c;tail 这条尾巴&#xff0c;并不简单&#xff0c;因为它还是一个词根&#xff0c;也就是说 tail 其实是自由词素。 事实上&#xff0c;tail 最初来自 马尾 这样一个概…...

记录:VB6 直接获取 PictureBox 的图像数据到数组 GetDIBits

记得十几年前写几个游戏辅助工具的时候用过这个功能&#xff0c;这几天想直接把图片控件的数据转换为 PNG 文件不想用存出 BMP 文件交换&#xff0c;直接取得图像数据操作即可&#xff0c;但是忘记了当初是怎么做的了&#xff0c;找到个 2007 年的例子好像不太对&#xff0c;运…...

uboot移植网络驱动过程,无法ping通mx6ull和ubuntu问题解决方案

开发板&#xff1a;mx6ull-ALPHA_V2.4 ubuntu版本&#xff1a;20.04 1.现在虚拟机设置中添加网路适配器用于开启桥接模式 2.在编辑中打开“虚拟网络编辑器” 我的电脑本身只有VMnet1和VMnet8&#xff0c;需要底下“添加网络”&#xff0c;增加这个VMnet0 &#xff0c;并且进行…...

Ubuntu 安装软件被锁:Could not get lock问题解决

今天刚使用虚拟机安装完Ubuntu系统&#xff0c;想要安装所需要的软件是出现了以下错误信息&#xff1a; 错误信息&#xff1a; E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration directory (/…...

S2CRNet 图像测评笔记 图像融合

空间分离曲线渲染网络用于高效高分辨率图像协调 开源地址&#xff1a; https://github.com/stefanLeong/S2CRNet 效果图&#xff1a; 左边是输入&#xff0c;最右边是效果&#xff1a;效果不是很理想&#xff0c;色差问题还在 本地代码&#xff1a; S2CRNet-demos-main...

Lambda表达式

C Lambda表达式 文章目录 C Lambda表达式基本用法捕获列表返回值mutable Lambda 表达式是一种匿名函数&#xff0c;可以在代码中直接定义并使用。它主要用于简化那些只需要简单操作的函数定义。在 C 中&#xff0c;lambda 表达式的语法结构通常包括以下几个部分&#xff1a; 捕…...

高通 Android12 添加APN信息

1、产品有国外客户&#xff0c;需要添加国外的定制APN信息。 2、路径&#xff1a; SC200E_AP/QCM2290_Android12.0_R02_r004/QSSI.12/vendor/qcom/proprietary/commonsys/telephony-apps/etc/apns-conf.xml在上述路径中将APN信息添加即可。 3、路径 SC200E_AP\QCM2290_Andr…...

探秘 IIC 与 SPI:软件模拟与硬件接口的抉择之谜

一、IIC 软件模拟&#xff1a;受限中的灵活应变 在嵌入式系统的通信世界里&#xff0c;IIC 常采用软件模拟的方式开展工作&#xff0c;这背后有着诸多考量。首先&#xff0c;硬件资源的限制是一个重要因素。不少微控制器并没有内置功能完备的 IIC 硬件模块&#xff0c;甚至压根…...

【ts语法学习】主要数据类型与变量声明时的类型注解

一、ts中的主要数据类型 1.布尔类型 (boolean) 2.数值类型 (number) 3.字符串类型 (string) 4.数组类型 (Array) 5.对象类型 (object) 6.null 和 undefined 7.元组类型 (Tuple) 8.枚举类型 (enum) 9.任意类型 (any) 10.never 11.unknown 12.void TypeScript&#xff08;简称 …...

论文概览 |《Sustainable Cities and Society》2024.12 Vol.116

本次给大家整理的是《Sustainable Cities and Society》杂志2024年12月第116期的论文的题目和摘要&#xff0c;一共包括52篇SCI论文&#xff01; 论文1 Enhancing road traffic flow in sustainable cities through transformer models: Advancements and challenges 通过变压…...

Vue3之响应式系统详解

Vue3中的响应式系统是其核心功能之一&#xff0c;它使得数据变化能够自动触发视图更新&#xff0c;从而简化了开发过程&#xff0c;提高了开发效率。本文将详细阐述Vue3中的响应式系统&#xff0c;包括其核心概念、工作原理、实现方式、应用场景以及优势。同时&#xff0c;本文…...

只出现一次的数字(字节面试题 最优解)

题目来源 136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问…...

VMware Workstation的有线连接消失了

进入/var/lib目录下 cd /var/lib 查看是否存在NetworkManager 文件 ls 将其删除&#xff0c;然后虚拟机reboot一下。 sudo rm -r NetworkManager reboot 解决了&#xff0c;可以联网...

leetcode-146.LRU缓存(易理解)

为了实现一个满足 LRU&#xff08;最近最少使用&#xff09;缓存约束的数据结构&#xff0c;我们需要在 (O(1)) 时间复杂度内完成 get 和 put 操作。这通常可以通过结合使用哈希表和双向链表来实现&#xff1a; 哈希表&#xff1a;用于在 (O(1)) 时间复杂度内实现对缓存中元素…...