08-Mysql資料庫----完整性約束

来源:https://www.cnblogs.com/dalaoban/archive/2018/08/31/9562715.html
-Advertisement-
Play Games

總結: 1,not null 不能插入空,不設置可空 2,unique 單列唯一 create table department(name char(10) unique); 創建方式一 create table department( unique(name)); 創建方式二 聯合唯一: uniq ...


總結:

     1,not null 不能插入空,不設置可空

      2,unique  單列唯一

    create table department(name char(10) unique);         創建方式一

    create table department( unique(name));                    創建方式二

 

    聯合唯一: unique(name)    unique(id)  兩個都不同才可插入

              組合唯一:unique(name,id)   有一個不同即可插入

   3,主鍵   primary key = not null unique

    作用:唯一標識,查詢優化.

     複合主鍵:  有一個不同即可.

    註意    :   多列主鍵有問題

  4,auto_increment(自增長)

         # 步長auto_increment_increment,預設為1
         # 起始的偏移量auto_increment_offset, 預設是1

         # 設置步長 為會話設置,只在本次連接中有效
          set session auto_increment_increment=5;

         #全局設置步長 都有效。
         set global auto_increment_increment=5;

        # 設置起始偏移量
         set global  auto_increment_offset=3;

清空表區分delete和truncate的區別:

delete from t1; #如果有自增id,新增的數據,仍然是以刪除前的最後一樣作為起始。

truncate table t1;數據量大,刪除速度比上一條快,且直接從零開始。

 

  5,foreign key:

          constraint   fk_dep   foreign   key(dep_id)   references   dep(id)

                               名字                               從表          關聯             主表

 

      on delete cascade #同步刪除
      on update cascade #同步更新

  加上可直接刪除,不用先刪除從表,再刪主表;

   直接刪除主表,從表中的數據也會刪除.

 

 

 

 

 

          not null 與 default

  • unique
  • primary
  • auto_increment
  • foreign key

 

 

一、介紹

約束條件與數據類型的寬度一樣,都是可選參數

作用:用於保證數據的完整性和一致性

主要分為:

複製代碼
PRIMARY KEY (PK)    #標識該欄位為該表的主鍵,可以唯一的標識記錄
FOREIGN KEY (FK)    #標識該欄位為該表的外鍵
NOT NULL    #標識該欄位不能為空
UNIQUE KEY (UK)    #標識該欄位的值是唯一的
AUTO_INCREMENT    #標識該欄位的值自動增長(整數類型,而且為主鍵)
DEFAULT    #為該欄位設置預設值

UNSIGNED #無符號
ZEROFILL #使用0填充
複製代碼

說明:

複製代碼
#1. 是否允許為空,預設NULL,可設置NOT NULL,欄位不允許為空,必須賦值
#2. 欄位是否有預設值,預設的預設值是NULL,如果插入記錄時不給欄位賦值,此欄位使用預設值
sex enum('male','female') not null default 'male'

#必須為正值(無符號) 不允許為空 預設是20
age int unsigned NOT NULL default 20 
# 3. 是否是key
主鍵 primary key
外鍵 foreign key
索引 (index,unique...)
複製代碼

 

二、not null 與default

是否可空,null表示空,非字元串
not null - 不可空
null - 可空

預設值,創建列時可以指定預設值,當插入數據時如果未主動設置,則自動添加預設值

create table tb1(
    nid int not null defalut 2,
    num int not null

);

 

驗證1:

 

複製代碼
mysql> create table t11(id int);# id欄位預設可以為空
Query OK, 0 rows affected (0.05 sec)

mysql> desc t11;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES   |          | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.03 sec)
mysql> insert into t11 values(); #給t11表插一個空的值
Query OK, 1 row affected (0.00 sec)

#查詢結果如下
mysql> select * from t11;
+------+
| id   |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
複製代碼 預設值可以為空

 

 

驗證2:

mysql> create table t12(id int not null);#設置欄位id不為空
Query OK, 0 rows affected (0.03 sec)

mysql> desc t12;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | NO   |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)

mysql> insert into t12 values();#不能插入空
ERROR 1364 (HY000): Field 'id' doesn't have a default value
設置not null,插入值時不能為空

 

驗證3:

# 第一種情況
mysql> create table t13(id int default 1);
Query OK, 0 rows affected (0.03 sec)

mysql> desc t13;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |           | 1              |              |
+-------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)

mysql> insert into t13 values();
Query OK, 1 row affected (0.00 sec)

mysql> select * from t13;
+------+
| id   |
+------+
|    1  |
+------+
1 row in set (0.00 sec)


# 第二種情況
mysql> create table t14(id int not null default 2);
Query OK, 0 rows affected (0.02 sec)

mysql> desc t14;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | NO      |         | 2               |             |
+-------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)

mysql> select * from t14;
+----+
| id |
+----+
|  2 |
+----+
1 row in set (0.00 sec)
設置id欄位有預設值後,則無論id欄位是null還是not null,都可以插入空,插入空預設填入default指定的預設值

 

小練習:

創建學生表student2,設置每個欄位的約束條件。

複製代碼
mysql> create table student2(
    -> id int not null,
    -> name varchar(50) not null,
    -> age int(3) unsigned not null default 18,
    -> sex enum('male','female') default 'male',
    -> fav set('smoke','drink','tangtou') default 'drink,tangtou'
    -> );
Query OK, 0 rows affected (0.01 sec)

# 只插入了not null約束條件的欄位對應的值
mysql> insert into student2(id,name) values(1,'mjj');
Query OK, 1 row affected (0.00 sec)

# 查詢結果如下
mysql> select * from student2;
+----+------+-----+------+---------------+
| id | name | age | sex  | fav           |
+----+------+-----+------+---------------+
|  1 | mjj  |  18 | male | drink,tangtou |
+----+------+-----+------+---------------+
1 row in set (0.00 sec)
複製代碼

 

3、unique

中文翻譯:不同的。在mysql中稱為單列唯一

 

舉例說明:創建公司部門表(每個公司都有唯一的一個部門)。

mysql> create table department(
    -> id int,
    -> name char(10)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> insert into department values(1,'IT'),(2,'IT');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from department;
+------+------+
| id   | name |
+------+------+
|    1 | IT   |
|    2 | IT   |
+------+------+
2 rows in set (0.00 sec)
# 發現: 同時插入兩個IT部門也是可以的,但這是不合理的,所以我們要設置name欄位為unique 解決這種不合理的現象。
驗證之前重覆插入記錄的操作是可行的,但是不符合場景

 

接下來,使用約束條件unique,來對公司部門的欄位進行設置。

複製代碼
#第一種創建unique的方式
#例子1:
create table department(
    id int,
    name char(10) unique
);
mysql> insert into department values(1,'it'),(2,'it');
ERROR 1062 (23000): Duplicate entry 'it' for key 'name'

#例子2:
create table department(
    id int unique,
    name char(10) unique
);
insert into department values(1,'it'),(2,'sale');

#第二種創建unique的方式
create table department(
    id int,
    name char(10) ,
    unique(id),
    unique(name)
);
insert into department values(1,'it'),(2,'sale');
複製代碼

 

聯合唯一:

複製代碼
# 創建services表
mysql> create table services(
    -> id int,
    -> ip char(15),
    -> port int,
    -> unique(id),
    -> unique(ip,port)
    -> );
Query OK, 0 rows affected (0.05 sec)

mysql> desc services;
+-------+----------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id        | int(11)   | YES   | UNI  | NULL       |             |
| ip        | char(15) | YES   | MUL  | NULL       |             |
| port    | int(11) | YES   |          | NULL       |             |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.01 sec)

#聯合唯一,只要兩列記錄,有一列不同,既符合聯合唯一的約束
mysql> insert into services values
    -> (1,'192,168,11,23',80),
    -> (2,'192,168,11,23',81),
    -> (3,'192,168,11,25',80);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from services;
+------+---------------+------+
| id   | ip            | port |
+------+---------------+------+
|    1 | 192,168,11,23 |   80 |
|    2 | 192,168,11,23 |   81 |
|    3 | 192,168,11,25 |   80 |
+------+---------------+------+
3 rows in set (0.00 sec)

mysql> insert into services values (4,'192,168,11,23',80);
ERROR 1062 (23000): Duplicate entry '192,168,11,23-80' for key 'ip'
複製代碼

 

4.primary key

一個表中可以:

單列做主鍵
多列做主鍵(複合主鍵)

約束:等價於 not null unique,欄位的值不為空且唯一

存儲引擎預設是(innodb):對於innodb存儲引擎來說,一張表必須有一個主鍵。

單列主鍵

複製代碼
# 創建t14表,為id欄位設置主鍵,唯一的不同的記錄
create table t14(
    id int primary key,
    name char(16)
);

insert into t14 values
(1,'xiaoma'),
(2,'xiaohong');

mysql> insert into t14 values(2,'wxxx');
ERROR 1062 (23000): Duplicate entry '6' for key 'PRIMARY'


#   not null + unique的化學反應,相當於給id設置primary key
create table t15(
    id int not null unique,
    name char(16)
);
mysql> create table t15(
    -> id int not null unique,
    -> name char(16)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> desc t15;
+-------+----------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id        | int(11)  | NO     | PRI | NULL       |             |
| name   | char(16) | YES  |         | NULL       |             |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.02 sec)
複製代碼

 

複合主鍵

複製代碼
create table t16(
    ip char(15),
    port int,
    primary key(ip,port)
);

insert into t16 values
('1.1.1.2',80),
('1.1.1.2',81);
複製代碼 驗證複合主鍵的使用

 

5.auto_increment

約束:約束的欄位為自動增長,約束的欄位必須同時被key約束

 

(重點)驗證:

# 創建student
create table student(
id int primary key auto_increment,
name varchar(20),
sex enum('male','female') default 'male'
);

mysql>  desc student;
+-------+-----------------------+------+-----+---------+----------------+
| Field | Type                  | Null | Key | Default | Extra          |
+-------+-----------------------+------+-----+---------+----------------+
| id    | int(11)               | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20)           | YES  |     | NULL    |                |
| sex   | enum('male','female') | YES  |     | male    |                |
+-------+-----------------------+------+-----+---------+----------------+
3 rows in set (0.17 sec)

#插入記錄
mysql>  insert into student(name) values ('老白'),('小白');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from student;
+----+--------+------+
| id | name   | sex  |
+----+--------+------+
|  1 | 老白   | male |
|  2 | 小白   | male |
+----+--------+------+
2 rows in set (0.00 sec)
不指定id,則自動增長

 

mysql> insert into student values(4,'asb','female');
Query OK, 1 row affected (0.00 sec)

mysql> insert into student values(7,'wsb','female');
Query OK, 1 row affected (0.01 sec)

mysql> select * from student;
+----+--------+--------+
| id | name   | sex    |
+----+--------+--------+
|  1 | 老白   | male   |
|  2 | 小白   | male   |
|  4 | asb    | female |
|  7 | wsb    | female |
+----+--------+--------+
4 rows in set (0.00 sec)

# 再次插入一條不指定id的記錄,會在之前的最後一條記錄繼續增長
mysql>  insert into student(name) values ('大白');
Query OK, 1 row affected (0.00 sec)

mysql> select * from student;
+----+--------+--------+
| id | name   | sex    |
+----+--------+--------+
|  1 | 老白   | male   |
|  2 | 小白   | male   |
|  4 | asb    | female |
|  7 | wsb    | female |
|  8 | 大白   | male   |
+----+--------+--------+
5 rows in set (0.00 sec)
也可以指定id

 

mysql> delete from student;
Query OK, 5 rows affected (0.00 sec)

mysql> select * from student;
Empty set (0.00 sec)

mysql> select * from student;
Empty set (0.00 sec)

mysql> insert into student(name) values('ysb');
Query OK, 1 row affected (0.01 sec)

mysql> select * from student;
+----+------+------+
| id | name | sex  |
+----+------+------+
|  9 | ysb  | male |
+----+------+------+
1 row in set (0.00 sec)

#應該用truncate清空表,比起delete一條一條地刪除記錄,truncate是直接清空表,在刪除大表時用它
mysql> truncate student;
Query OK, 0 rows affected (0.03 sec)

mysql>  insert into student(name) values('xiaobai');
Query OK, 1 row affected (0.00 sec)

mysql> select * from student;
+----+---------+------+
| id | name    | sex  |
+----+---------+------+
|  1 | xiaobai | male |
+----+---------+------+
1 row in set (0.00 sec)

mysql>
對於自增的欄位,在用delete刪除後,再插入值,該欄位仍按照刪除前的位置繼續增長

 

瞭解:

查看可用的 開頭auto_inc的詞
mysql> show variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 1     |
| auto_increment_offset    | 1     |
+--------------------------+-------+
2 rows in set (0.02 sec)
# 步長auto_increment_increment,預設為1
# 起始的偏移量auto_increment_offset, 預設是1

 # 設置步長 為會話設置,只在本次連接中有效
 set session auto_increment_increment=5;

 #全局設置步長 都有效。
 set global auto_increment_increment=5;

 # 設置起始偏移量
 set global  auto_increment_offset=3;

#強調:If the value of auto_increment_offset is greater than that of auto_increment_increment, the value of auto_increment_offset is ignored. 
翻譯:如果auto_increment_offset的值大於auto_increment_increment的值,則auto_increment_offset的值會被忽略 

# 設置完起始偏移量和步長之後,再次執行show variables like'auto_inc%';
發現跟之前一樣,必須先exit,再登錄才有效。

mysql> show variables like'auto_inc%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 5     |
| auto_increment_offset    | 3     |
+--------------------------+-------+
2 rows in set (0.00 sec)

#因為之前有一條記錄id=1
mysql> select * from student;
+----+---------+------+
| id | name    | sex  |
+----+---------+------+
|  1 | xiaobai | male |
+----+---------+------+
1 row in set (0.00 sec)
# 下次插入的時候,從起始位置3開始,每次插入記錄id+5
mysql> insert into student(name) values('ma1'),('ma2'),('ma3');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from student;
+----+---------+------+
| id | name    | sex  |
+----+---------+------+
|  1 | xiaobai | male |
|  3 | ma1     | male |
|  8 | ma2     | male |
| 13 | ma3     | male |
+----+---------+------+
auto_increment_increment和 auto_increment_offset

 

清空表區分delete和truncate的區別:

delete from t1; #如果有自增id,新增的數據,仍然是以刪除前的最後一樣作為起始。

truncate table t1;數據量大,刪除速度比上一條快,且直接從零開始。

 

6.foreign key

 

一 快速理解foreign key

之前創建表的時候都是在一張表中添加記錄,比如如下表:

 

公司有3個部門,但是有1個億的員工,那意味著部門這個欄位需要重覆存儲,部門名字越長,越浪費。

這個時候,

解決方法:

我們完全可以定義一個部門表

然後讓員工信息表關聯該表,如何關聯,即foreign key

我們可以將上表改為如下結構:

 

此時有兩張表,一張是employee表,簡稱emp表(關聯表,也就從表)。一張是department表,簡稱dep表(被關聯表,也叫主表)。

 

創建兩張表操作:

#1.創建表時先創建被關聯表,再創建關聯表
# 先創建被關聯表(dep表)
create table dep(
    id int primary key,
    name varchar(20) not null,
    descripe varchar(20) not null
);

#再創建關聯表(emp表)
create table emp(
    id int primary key,
    name varchar(20) not null,
    age int not null,
    dep_id int,
    constraint fk_dep foreign key(dep_id) references dep(id) 
);

#2.插入記錄時,先往被關聯表中插入記錄,再往關聯表中插入記錄

insert into dep values
(1,'IT','IT技術有限部門'),
(2,'銷售部','銷售部門'),
(3,'財務部','花錢太多部門');

insert into emp values
(1,'zhangsan',18,1),
(2,'lisi',19,1),
(3,'egon',20,2),
(4,'yuanhao',40,3),
(5,'alex',18,2);

3.刪除表
#按道理來說,刪除了部門表中的某個部門,員工表的有關聯的記錄相繼刪除。
mysql> delete from dep where id=3;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`db5`.`emp`, CONSTRAINT `fk_name` FOREIGN KEY (`dep_id`) REFERENCES `dep` (`id`))

#但是先刪除員工表的記錄之後,再刪除當前部門就沒有任何問題

mysql> delete from emp where dep =3;
Query OK, 1 row affected (0.00 sec)

mysql> select * from emp;
+----+----------+-----+--------+
| id | name     | age | dep_id |
+----+----------+-----+--------+
|  1 | zhangsan |  18 |      1 |
|  2 | lisi     |  18 |      1 |
|  3 | egon     |  20 |      2 |
|  5 | alex     |  18 |      2 |
+----+----------+-----+--------+
4 rows in set (0.00 sec)

mysql> delete from dep where id=3;
Query OK, 1 row affected (0.00 sec)

mysql> select * from dep;
+----+-----------+----------------------+
| id | name      | descripe             |
+----+-----------+----------------------+
|  1 | IT        | IT技術有限部門       |
|  2 | 銷售部    | 銷售部門             |
+----+-----------+----------------------+
2 rows in set (0.00 sec)
View Code

 

上面的刪除表記錄的操作比較繁瑣,按道理講,裁掉一個部門,該部門的員工也會被裁掉。其實呢,在建表的時候還有個很重要的內容,叫同步刪除,同步更新

接下來將剛建好的兩張表全部刪除,先刪除關聯表(emp),再刪除被關聯表(dep)

接下來:
重覆上面的操作建表
註意:在關聯表中加入
on delete cascade #同步刪除
on update cascade #同步更新

修改emp表:

複製代碼
create table emp(
    id int primary key,
    name varchar(20) not null,
    age int not null,
    dep_id int,
    constraint fk_dep foreign key(dep_id) references dep(id) 
    on delete cascade #同步刪除
    on update cascade #同步更新
);
複製代碼

接下來的操作,就複合我們正常的生活中的情況了。

複製代碼
#再去刪被關聯表(dep)的記錄,關聯表(emp)中的記錄也跟著刪除
mysql> delete from dep where id=3;
Query OK, 1 row affected (0.00 sec)

mysql> select * from dep;
+----+-----------+----------------------+
| id | name      | descripe             |
+----+-----------+----------------------+
|  1 | IT        | IT技術有限部門       |
|  2 | 銷售部    | 銷售部門             |
+----+-----------+----------------------+
2 rows in set (0.00 sec)

mysql> select * from emp;
+----+----------+-----+--------+
| id | name     | age | dep_id |
+----+----------+-----+--------+
|  1 | zhangsan |  18 |      1 |
|  2 | lisi     |  19 |      1 |
|  3 | egon     |  20 |      2 |
|  5 | alex     |  18 |      2 |
+----+----------+-----+--------+
4 rows in set (0.00 sec)

#再去更改被關聯表(dep)的記錄,關聯表(emp)中的記錄也跟著更改

mysql> update dep set id=222 where id=2;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

# 趕緊去查看一下兩張表是否都被刪除了,是否都被更改了
mysql> select * from dep;
+-----+-----------+----------------------+
| id  | name      | descripe             |
+-----+-----------+----------------------+
|   1 | IT        | IT技術有限部門       |
| 222 | 銷售部    | 銷售部門             |
+-----+-----------+----------------------+
2 rows in set (0.00 sec)

mysql> select * from emp;
+----+----------+-----+--------+
| id | name     | age | dep_id |
+----+----------+-----+--------+
|  1 | zhangsan |  18 |      1 |
|  2 | lisi     |  19 |      1 |
|  3 | egon     |  20 |    222 |
|  5 | alex     |  18 |    222 |
+----+----------+-----+--------+
4 rows in set (0.00 sec)
複製代碼

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Linux日誌查找方法 適用於測試,開發,運維人員,用來查找Linux伺服器問題的一般方法,比較實用,如果有更好的辦法可以一塊討論,歡迎大神們來指導哈!!! 進入正題 第一步、通過Xshell登錄伺服器 鏈接方法—找度娘、開發同事#最好是自己找度娘,自給自足豐衣足食嘛賬號、密碼—找技術老大 第二步、 ...
  • 通過 Certbot 為 nginx 開啟https支持。 環境 CentOS 7.1 python2.x(這玩意系統里本來就有) 安裝Nginx 順手啟動: 順手設置開機啟動: 嗯,就完成了。 至於配置文件,會在後面設置。 配置https 此處我們使用 Let's Encrypt 提供的證書。且為 ...
  • 研究nginx優化時反覆安裝清理nginx,為方便做了一個簡單部署腳本,用的最新穩定版1.14.0,預設路徑,加入systemd系統進程管理中,可以通過systemd管理nginx的啟動、終止、重載、狀態、開機自啟等. 需要再次覆蓋nginx時,用awk找到nginx的進程然後kill掉,再次執行安 ...
  • 阿裡雲yum源速度快而且穩定,下麵給出配置方法 打開centos的yum文件夾 cd /etc/yum.repos.d/ 用wget下載repo文件 wget http://mirrors.aliyun.com/repo/Centos-7.repo 備份系統原來的repo文件 mv CentOS-B ...
  • 使用場景 linux管理員忘記root密碼,需要進行找回操作。 註意事項:本文基於centos7環境進行操作,由於centos的版本是有差異的,繼續之前請確定好版本。 步驟 一、重啟系統,在開機過程中,快速按下鍵盤上的方向鍵↑和↓。目的是告知引導程式,我們需要在引導頁面選擇不同的操作,以便讓引導程式 ...
  • 本節重點: 如何找出兩張表之間的關係 表的三種關係 一、介紹 因為有foreign key的約束,使得兩張表形成了三種了關係: 多對一 多對多 一對一 二、重點理解如果找出兩張表之間的關係 三、表的三種關係 (1)書和出版社 一對多(或多對一):一個出版社可以出版多本書。看圖說話。 關聯方式:for ...
  • 一、錯誤日誌解析: (1) 【ERROR】1452:無法在外鍵的表插入參考主鍵沒有的數據 1452:無法在外鍵的表插入或更新參考主鍵沒有的數據。由於item_discovery.itemid欄位(外鍵)參考了items.itemid欄位(主鍵),當要在item_discovery表插數據時,如果it ...
  • 一、基礎 1、創建資料庫 CREATE DATABASE database-name 2、刪除資料庫 drop database dbname 3、備份sql server 創建 備份數據的 device USE master EXEC sp_addumpdevice 'disk',’testBac ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...