[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fconstraints":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fconstraints":1046,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fconstraints":1072},{"source":4,"connector":5,"page":6},"sqlite","better-sqlite3",{"path":7,"title":8,"description":9,"category":10,"tags":11,"date":14,"pinned":15,"draft":15,"body":16,"seo":1042,"stem":1043,"id":1044,"extension":1045},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fconstraints","约束","约束（Constraint）用于限制表中数据的规则，确保数据的完整性和一致性。MySQL 支持以下几种常用约束。","技能小册",[12,13],"mysql","constraints","2020-03-31",false,{"type":17,"value":18,"toc":1028},"minimark",[19,22,27,30,35,50,56,139,144,154,159,174,178,183,187,226,230,242,247,269,274,294,298,303,307,368,372,380,384,391,395,404,408,436,440,452,457,473,477,482,486,514,518,530,534,549,553,558,562,594,598,606,611,630,635,668,672,681,685,707,711,719,723,748,752,780,784,841,845,979,982,985,1024],[20,21,8],"h1",{"id":8},[23,24,26],"h2",{"id":25},"mysql-约束详解","MySQL 约束详解",[28,29,9],"p",{},[31,32,34],"h3",{"id":33},"一primary-key主键","一、PRIMARY KEY（主键）",[28,36,37,41,42,45,46,49],{},[38,39,40],"strong",{},"定义","：唯一标识表中每一行记录的列或列组合。主键值必须",[38,43,44],{},"唯一","且",[38,47,48],{},"非空","。一张表只能有一个主键。",[28,51,52,55],{},[38,53,54],{},"语法","：",[57,58,63],"pre",{"className":59,"code":60,"language":61,"meta":62,"style":62},"language-sql shiki shiki-themes material-theme-lighter github-light github-dark","-- 列级定义\nCREATE TABLE table_name (\n    id INT PRIMARY KEY,\n    name VARCHAR(50)\n);\n\n-- 表级定义（适用于复合主键）\nCREATE TABLE table_name (\n    id INT,\n    name VARCHAR(50),\n    PRIMARY KEY (id, name)\n);\n","sql","",[64,65,66,74,80,86,92,98,105,111,116,122,128,134],"code",{"__ignoreMap":62},[67,68,71],"span",{"class":69,"line":70},"line",1,[67,72,73],{},"-- 列级定义\n",[67,75,77],{"class":69,"line":76},2,[67,78,79],{},"CREATE TABLE table_name (\n",[67,81,83],{"class":69,"line":82},3,[67,84,85],{},"    id INT PRIMARY KEY,\n",[67,87,89],{"class":69,"line":88},4,[67,90,91],{},"    name VARCHAR(50)\n",[67,93,95],{"class":69,"line":94},5,[67,96,97],{},");\n",[67,99,101],{"class":69,"line":100},6,[67,102,104],{"emptyLinePlaceholder":103},true,"\n",[67,106,108],{"class":69,"line":107},7,[67,109,110],{},"-- 表级定义（适用于复合主键）\n",[67,112,114],{"class":69,"line":113},8,[67,115,79],{},[67,117,119],{"class":69,"line":118},9,[67,120,121],{},"    id INT,\n",[67,123,125],{"class":69,"line":124},10,[67,126,127],{},"    name VARCHAR(50),\n",[67,129,131],{"class":69,"line":130},11,[67,132,133],{},"    PRIMARY KEY (id, name)\n",[67,135,137],{"class":69,"line":136},12,[67,138,97],{},[28,140,141,55],{},[38,142,143],{},"使用场景",[145,146,147,151],"ul",{},[148,149,150],"li",{},"每个表都应有一个主键（业务主键或逻辑主键，如自增 ID）。",[148,152,153],{},"用于快速定位一行数据，也是其他表外键引用的目标。",[28,155,156,55],{},[38,157,158],{},"特性",[145,160,161,164,167],{},[148,162,163],{},"自动创建唯一索引。",[148,165,166],{},"复合主键中所有列的组合必须唯一，且每列都不能为 NULL。",[148,168,169,170,173],{},"主键列通常使用 ",[64,171,172],{},"AUTO_INCREMENT"," 自动生成值。",[31,175,177],{"id":176},"二foreign-key外键","二、FOREIGN KEY（外键）",[28,179,180,182],{},[38,181,40],{},"：用于建立表和表之间的关联。外键列的值必须引用另一张表的主键或唯一键，或为 NULL。",[28,184,185,55],{},[38,186,54],{},[57,188,190],{"className":59,"code":189,"language":61,"meta":62,"style":62},"CREATE TABLE child_table (\n    child_id INT PRIMARY KEY,\n    parent_id INT,\n    FOREIGN KEY (parent_id) REFERENCES parent_table(parent_id)\n    -- 可指定 ON DELETE 和 ON UPDATE 行为\n    -- ON DELETE CASCADE | SET NULL | RESTRICT | NO ACTION\n);\n",[64,191,192,197,202,207,212,217,222],{"__ignoreMap":62},[67,193,194],{"class":69,"line":70},[67,195,196],{},"CREATE TABLE child_table (\n",[67,198,199],{"class":69,"line":76},[67,200,201],{},"    child_id INT PRIMARY KEY,\n",[67,203,204],{"class":69,"line":82},[67,205,206],{},"    parent_id INT,\n",[67,208,209],{"class":69,"line":88},[67,210,211],{},"    FOREIGN KEY (parent_id) REFERENCES parent_table(parent_id)\n",[67,213,214],{"class":69,"line":94},[67,215,216],{},"    -- 可指定 ON DELETE 和 ON UPDATE 行为\n",[67,218,219],{"class":69,"line":100},[67,220,221],{},"    -- ON DELETE CASCADE | SET NULL | RESTRICT | NO ACTION\n",[67,223,224],{"class":69,"line":107},[67,225,97],{},[28,227,228,55],{},[38,229,143],{},[145,231,232,239],{},[148,233,234,235,238],{},"维护数据参照完整性，例如订单表的 ",[64,236,237],{},"user_id"," 必须指向已存在的用户。",[148,240,241],{},"防止孤立记录，确保关联数据一致性。",[28,243,244,55],{},[38,245,246],{},"注意事项",[145,248,249,252,259,262],{},[148,250,251],{},"关联的两列数据类型必须一致。",[148,253,254,255,258],{},"父表的被引用列必须是主键或具有 ",[64,256,257],{},"UNIQUE"," 约束。",[148,260,261],{},"外键会带来一定的性能开销（插入\u002F更新\u002F删除时检查），在大数据量或高并发场景下，有时会在应用层保证一致性，而避免使用数据库外键。",[148,263,264,265,268],{},"MySQL 中只有 ",[64,266,267],{},"InnoDB"," 存储引擎支持外键。",[28,270,271,55],{},[38,272,273],{},"级联操作选项",[145,275,276,282,288],{},[148,277,278,281],{},[64,279,280],{},"ON DELETE CASCADE","：父表删除时，子表相关行自动删除。",[148,283,284,287],{},[64,285,286],{},"ON DELETE SET NULL","：父表删除时，子表外键列设为 NULL。",[148,289,290,293],{},[64,291,292],{},"ON DELETE RESTRICT \u002F NO ACTION","：拒绝删除父表中的被引用行（默认行为）。",[31,295,297],{"id":296},"三unique唯一约束","三、UNIQUE（唯一约束）",[28,299,300,302],{},[38,301,40],{},"：保证列（或列组合）中的所有值各不相同。一张表可以有多个唯一约束。",[28,304,305,55],{},[38,306,54],{},[57,308,310],{"className":59,"code":309,"language":61,"meta":62,"style":62},"-- 单列唯一\nCREATE TABLE users (\n    id INT PRIMARY KEY,\n    email VARCHAR(100) UNIQUE\n);\n\n-- 复合唯一（组合值唯一）\nCREATE TABLE course_selection (\n    student_id INT,\n    course_id INT,\n    UNIQUE KEY (student_id, course_id)\n);\n",[64,311,312,317,322,326,331,335,339,344,349,354,359,364],{"__ignoreMap":62},[67,313,314],{"class":69,"line":70},[67,315,316],{},"-- 单列唯一\n",[67,318,319],{"class":69,"line":76},[67,320,321],{},"CREATE TABLE users (\n",[67,323,324],{"class":69,"line":82},[67,325,85],{},[67,327,328],{"class":69,"line":88},[67,329,330],{},"    email VARCHAR(100) UNIQUE\n",[67,332,333],{"class":69,"line":94},[67,334,97],{},[67,336,337],{"class":69,"line":100},[67,338,104],{"emptyLinePlaceholder":103},[67,340,341],{"class":69,"line":107},[67,342,343],{},"-- 复合唯一（组合值唯一）\n",[67,345,346],{"class":69,"line":113},[67,347,348],{},"CREATE TABLE course_selection (\n",[67,350,351],{"class":69,"line":118},[67,352,353],{},"    student_id INT,\n",[67,355,356],{"class":69,"line":124},[67,357,358],{},"    course_id INT,\n",[67,360,361],{"class":69,"line":130},[67,362,363],{},"    UNIQUE KEY (student_id, course_id)\n",[67,365,366],{"class":69,"line":136},[67,367,97],{},[28,369,370,55],{},[38,371,143],{},[145,373,374,377],{},[148,375,376],{},"确保字段不重复，如身份证号、邮箱、用户名。",[148,378,379],{},"复合唯一用于防止重复组合（如防止同一学生重复选同一门课）。",[28,381,382,55],{},[38,383,158],{},[145,385,386,388],{},[148,387,163],{},[148,389,390],{},"可以为 NULL（且可以有多个 NULL，因为 NULL 不等于任何值，但具体行为取决于数据库实现；MySQL 中唯一约束允许有多个 NULL）。",[31,392,394],{"id":393},"四not-null非空约束","四、NOT NULL（非空约束）",[28,396,397,399,400,403],{},[38,398,40],{},"：强制列不能存储 ",[64,401,402],{},"NULL"," 值。",[28,405,406,55],{},[38,407,54],{},[57,409,411],{"className":59,"code":410,"language":61,"meta":62,"style":62},"CREATE TABLE products (\n    id INT PRIMARY KEY,\n    name VARCHAR(100) NOT NULL,\n    price DECIMAL(10,2)\n);\n",[64,412,413,418,422,427,432],{"__ignoreMap":62},[67,414,415],{"class":69,"line":70},[67,416,417],{},"CREATE TABLE products (\n",[67,419,420],{"class":69,"line":76},[67,421,85],{},[67,423,424],{"class":69,"line":82},[67,425,426],{},"    name VARCHAR(100) NOT NULL,\n",[67,428,429],{"class":69,"line":88},[67,430,431],{},"    price DECIMAL(10,2)\n",[67,433,434],{"class":69,"line":94},[67,435,97],{},[28,437,438,55],{},[38,439,143],{},[145,441,442,445],{},[148,443,444],{},"对必须有值的字段设置，例如商品名称、用户密码。",[148,446,447,448,451],{},"有助于数据库设计和查询优化（索引 ",[64,449,450],{},"NOT NULL"," 列通常更高效）。",[28,453,454,55],{},[38,455,456],{},"注意",[145,458,459,464],{},[148,460,461,463],{},[64,462,402],{}," 表示“未知”或“缺失”，不等于空字符串或 0。",[148,465,466,467,469,470,472],{},"添加 ",[64,468,450],{}," 约束前，需确保现有数据没有 ",[64,471,402],{},"。",[31,474,476],{"id":475},"五default默认值约束","五、DEFAULT（默认值约束）",[28,478,479,481],{},[38,480,40],{},"：为列指定默认值。如果插入数据时未提供该列的值，则自动使用默认值。",[28,483,484,55],{},[38,485,54],{},[57,487,489],{"className":59,"code":488,"language":61,"meta":62,"style":62},"CREATE TABLE orders (\n    id INT PRIMARY KEY,\n    status VARCHAR(20) DEFAULT 'pending',\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);\n",[64,490,491,496,500,505,510],{"__ignoreMap":62},[67,492,493],{"class":69,"line":70},[67,494,495],{},"CREATE TABLE orders (\n",[67,497,498],{"class":69,"line":76},[67,499,85],{},[67,501,502],{"class":69,"line":82},[67,503,504],{},"    status VARCHAR(20) DEFAULT 'pending',\n",[67,506,507],{"class":69,"line":88},[67,508,509],{},"    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n",[67,511,512],{"class":69,"line":94},[67,513,97],{},[28,515,516,55],{},[38,517,143],{},[145,519,520,523],{},[148,521,522],{},"为常用列提供默认值，简化插入语句。",[148,524,525,526,529],{},"例如：状态默认为 ",[64,527,528],{},"'active'","，创建时间默认为当前时间戳。",[28,531,532,55],{},[38,533,456],{},[145,535,536,543],{},[148,537,538,539,542],{},"默认值可以是常量、表达式（如 ",[64,540,541],{},"CURRENT_TIMESTAMP","）或函数。",[148,544,545,546,548],{},"如果列定义为 ",[64,547,450],{}," 且没有默认值，插入时必须显式提供值。",[31,550,552],{"id":551},"六check检查约束","六、CHECK（检查约束）",[28,554,555,557],{},[38,556,40],{},"：确保列中的值满足指定的条件。",[28,559,560,55],{},[38,561,54],{},[57,563,565],{"className":59,"code":564,"language":61,"meta":62,"style":62},"CREATE TABLE employees (\n    id INT PRIMARY KEY,\n    name VARCHAR(50),\n    age INT CHECK (age >= 18),\n    salary DECIMAL(10,2) CHECK (salary > 0)\n);\n",[64,566,567,572,576,580,585,590],{"__ignoreMap":62},[67,568,569],{"class":69,"line":70},[67,570,571],{},"CREATE TABLE employees (\n",[67,573,574],{"class":69,"line":76},[67,575,85],{},[67,577,578],{"class":69,"line":82},[67,579,127],{},[67,581,582],{"class":69,"line":88},[67,583,584],{},"    age INT CHECK (age >= 18),\n",[67,586,587],{"class":69,"line":94},[67,588,589],{},"    salary DECIMAL(10,2) CHECK (salary > 0)\n",[67,591,592],{"class":69,"line":100},[67,593,97],{},[28,595,596,55],{},[38,597,143],{},[145,599,600,603],{},[148,601,602],{},"限制数据范围，如年龄不能为负数、价格必须大于 0。",[148,604,605],{},"实现简单的业务规则。",[28,607,608,55],{},[38,609,610],{},"MySQL 兼容性",[145,612,613,620],{},[148,614,615,616,619],{},"MySQL 8.0.16+ 开始完全支持 ",[64,617,618],{},"CHECK"," 约束，会实际验证数据。",[148,621,622,623,625,626,629],{},"在早期版本（5.7及以下）中，",[64,624,618],{}," 语法被解析但",[38,627,628],{},"不生效","（被忽略）。建议使用触发器或应用层校验作为替代。",[28,631,632,55],{},[38,633,634],{},"表级 CHECK",[57,636,638],{"className":59,"code":637,"language":61,"meta":62,"style":62},"CREATE TABLE user (\n    id INT,\n    start_date DATE,\n    end_date DATE,\n    CHECK (end_date > start_date)\n);\n",[64,639,640,645,649,654,659,664],{"__ignoreMap":62},[67,641,642],{"class":69,"line":70},[67,643,644],{},"CREATE TABLE user (\n",[67,646,647],{"class":69,"line":76},[67,648,121],{},[67,650,651],{"class":69,"line":82},[67,652,653],{},"    start_date DATE,\n",[67,655,656],{"class":69,"line":88},[67,657,658],{},"    end_date DATE,\n",[67,660,661],{"class":69,"line":94},[67,662,663],{},"    CHECK (end_date > start_date)\n",[67,665,666],{"class":69,"line":100},[67,667,97],{},[31,669,671],{"id":670},"七auto_increment自动递增","七、AUTO_INCREMENT（自动递增）",[28,673,674,676,677,680],{},[38,675,40],{},"：用于整数列，插入数据时自动生成递增的唯一值。通常搭配 ",[64,678,679],{},"PRIMARY KEY"," 使用。",[28,682,683,55],{},[38,684,54],{},[57,686,688],{"className":59,"code":687,"language":61,"meta":62,"style":62},"CREATE TABLE users (\n    id INT PRIMARY KEY AUTO_INCREMENT,\n    name VARCHAR(50)\n);\n",[64,689,690,694,699,703],{"__ignoreMap":62},[67,691,692],{"class":69,"line":70},[67,693,321],{},[67,695,696],{"class":69,"line":76},[67,697,698],{},"    id INT PRIMARY KEY AUTO_INCREMENT,\n",[67,700,701],{"class":69,"line":82},[67,702,91],{},[67,704,705],{"class":69,"line":88},[67,706,97],{},[28,708,709,55],{},[38,710,143],{},[145,712,713,716],{},[148,714,715],{},"生成无业务含义的逻辑主键，简单且高效。",[148,717,718],{},"适合作为代理键（Surrogate Key）。",[28,720,721,55],{},[38,722,158],{},[145,724,725,728,735,738],{},[148,726,727],{},"初始值默认为 1，每插入一行自动加 1。",[148,729,730,731,734],{},"可通过 ",[64,732,733],{},"ALTER TABLE table_name AUTO_INCREMENT = 100"," 设置起始值。",[148,736,737],{},"即使删除行，自增值不会回退（保持递增）。",[148,739,740,741,743,744,747],{},"插入时显式指定值或 ",[64,742,402],{}," 或 ",[64,745,746],{},"DEFAULT"," 均会触发自动生成。",[28,749,750,55],{},[38,751,246],{},[145,753,754,771,777],{},[148,755,756,757,760,761,760,764,760,767,770],{},"只能用于整数类型（",[64,758,759],{},"TINYINT","、",[64,762,763],{},"SMALLINT",[64,765,766],{},"INT",[64,768,769],{},"BIGINT","）。",[148,772,773,774,776],{},"每个表最多一个 ",[64,775,172],{}," 列，且必须被索引（通常是主键）。",[148,778,779],{},"在分布式系统中，自增可能产生冲突或性能问题，可改用雪花算法等分布式 ID。",[31,781,783],{"id":782},"八约束管理添加删除","八、约束管理（添加\u002F删除）",[57,785,787],{"className":59,"code":786,"language":61,"meta":62,"style":62},"-- 添加唯一约束\nALTER TABLE table_name ADD UNIQUE (column_name);\n\n-- 删除主键约束\nALTER TABLE table_name DROP PRIMARY KEY;\n\n-- 删除外键约束（需知道外键名）\nALTER TABLE child_table DROP FOREIGN KEY fk_name;\n\n-- 添加 CHECK 约束（MySQL 8.0+）\nALTER TABLE table_name ADD CONSTRAINT chk_name CHECK (条件);\n",[64,788,789,794,799,803,808,813,817,822,827,831,836],{"__ignoreMap":62},[67,790,791],{"class":69,"line":70},[67,792,793],{},"-- 添加唯一约束\n",[67,795,796],{"class":69,"line":76},[67,797,798],{},"ALTER TABLE table_name ADD UNIQUE (column_name);\n",[67,800,801],{"class":69,"line":82},[67,802,104],{"emptyLinePlaceholder":103},[67,804,805],{"class":69,"line":88},[67,806,807],{},"-- 删除主键约束\n",[67,809,810],{"class":69,"line":94},[67,811,812],{},"ALTER TABLE table_name DROP PRIMARY KEY;\n",[67,814,815],{"class":69,"line":100},[67,816,104],{"emptyLinePlaceholder":103},[67,818,819],{"class":69,"line":107},[67,820,821],{},"-- 删除外键约束（需知道外键名）\n",[67,823,824],{"class":69,"line":113},[67,825,826],{},"ALTER TABLE child_table DROP FOREIGN KEY fk_name;\n",[67,828,829],{"class":69,"line":118},[67,830,104],{"emptyLinePlaceholder":103},[67,832,833],{"class":69,"line":124},[67,834,835],{},"-- 添加 CHECK 约束（MySQL 8.0+）\n",[67,837,838],{"class":69,"line":130},[67,839,840],{},"ALTER TABLE table_name ADD CONSTRAINT chk_name CHECK (条件);\n",[31,842,844],{"id":843},"九总结表","九、总结表",[846,847,848,869],"table",{},[849,850,851],"thead",{},[852,853,854,857,860,863,866],"tr",{},[855,856,8],"th",{},[855,858,859],{},"作用",[855,861,862],{},"可空性",[855,864,865],{},"一张表允许多个",[855,867,868],{},"创建索引",[870,871,872,889,906,921,936,950,963],"tbody",{},[852,873,874,877,880,883,886],{},[875,876,679],"td",{},[875,878,879],{},"唯一标识每行",[875,881,882],{},"不可为空",[875,884,885],{},"否（只能一个）",[875,887,888],{},"是（聚簇索引）",[852,890,891,894,897,900,903],{},[875,892,893],{},"FOREIGN KEY",[875,895,896],{},"参照其他表",[875,898,899],{},"允许为空（除非额外加 NOT NULL）",[875,901,902],{},"是",[875,904,905],{},"建议创建，提升关联查询性能",[852,907,908,910,913,916,918],{},[875,909,257],{},[875,911,912],{},"值不能重复",[875,914,915],{},"允许为空（多个 NULL）",[875,917,902],{},[875,919,920],{},"是（唯一索引）",[852,922,923,925,928,931,933],{},[875,924,450],{},[875,926,927],{},"禁止空值",[875,929,930],{},"-",[875,932,902],{},[875,934,935],{},"不创建",[852,937,938,940,943,946,948],{},[875,939,746],{},[875,941,942],{},"提供默认值",[875,944,945],{},"不限",[875,947,902],{},[875,949,935],{},[852,951,952,954,957,959,961],{},[875,953,618],{},[875,955,956],{},"满足布尔条件",[875,958,945],{},[875,960,902],{},[875,962,935],{},[852,964,965,967,970,973,976],{},[875,966,172],{},[875,968,969],{},"自动递增",[875,971,972],{},"通常配合主键，不可为空",[875,974,975],{},"最多一个",[875,977,978],{},"依赖主键索引",[28,980,981],{},"合理使用约束，可以在数据库层面保证数据的正确性和一致性，减少应用层的校验负担。",[23,983,984],{"id":984},"参考文献",[846,986,987,997],{},[849,988,989],{},[852,990,991,994],{},[855,992,993],{},"资料",[855,995,996],{},"说明",[870,998,999,1013],{},[852,1000,1001,1010],{},[875,1002,1003],{},[1004,1005,1009],"a",{"href":1006,"rel":1007},"https:\u002F\u002Fdev.mysql.com\u002Fdoc\u002Frefman\u002F8.0\u002Fen\u002F",[1008],"nofollow","MySQL 8.0 手册",[875,1011,1012],{},"官方",[852,1014,1015,1021],{},[875,1016,1017],{},[1004,1018,1020],{"href":1019},"\u002Fknowledge\u002Fbooklet\u002Fsql","数据存储导读",[875,1022,1023],{},"学习路径",[1025,1026,1027],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":62,"searchDepth":76,"depth":76,"links":1029},[1030,1041],{"id":25,"depth":76,"text":26,"children":1031},[1032,1033,1034,1035,1036,1037,1038,1039,1040],{"id":33,"depth":82,"text":34},{"id":176,"depth":82,"text":177},{"id":296,"depth":82,"text":297},{"id":393,"depth":82,"text":394},{"id":475,"depth":82,"text":476},{"id":551,"depth":82,"text":552},{"id":670,"depth":82,"text":671},{"id":782,"depth":82,"text":783},{"id":843,"depth":82,"text":844},{"id":984,"depth":76,"text":984},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fsql\u002FMySql\u002Fconstraints","knowledge\u002Fknowledge\u002Fbooklet\u002Fsql\u002FMySql\u002Fconstraints.md","md",{"items":1047},[1048,1052,1056,1060,1064,1068],{"path":1049,"title":1050,"description":1051,"category":10,"score":100},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Ftool","常用函数","MySQL 提供了丰富的内置函数，用于处理字符串、数值、日期和时间以及条件逻辑。下面分类介绍最常用的基础函数。",{"path":1053,"title":1054,"description":1055,"category":10,"score":100},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fjoin","多表查询","多表查询用于从两个或更多表中获取数据。常见的连接类型包括内连接、外连接（左、右）和自连接。",{"path":1057,"title":1058,"description":1059,"category":10,"score":100},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Finstall","MySQL 安装与基本操作","MySQL 的安装因操作系统而异，但安装完成后，通过命令行客户端连接并进行基本管理的方法是通用的。下面分别介绍安装方式和常用命令。",{"path":1061,"title":1062,"description":1063,"category":10,"score":100},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Ftype","数据类型","MySQL 支持多种数据类型，可分为数值、字符串、日期时间、枚举\u002F集合以及 JSON 等。选择合适的类型可以优化存储空间和查询性能。",{"path":1065,"title":1066,"description":1067,"category":10,"score":100},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fdql","查询数据","数据查询语言（DQL）用于从数据库中检索数据，核心是 SELECT 语句。下面从基础查询、条件筛选、排序、限制行数、聚合与分组等方面进行介绍。",{"path":1069,"title":1070,"description":1071,"category":10,"score":100},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fddl","数据库与表的基本操作","DDL（Data Definition Language）用于定义数据库结构，包括创建、修改、删除数据库和表。下面介绍 MySQL 中常用的 DDL 语句。",{"series":1073,"title":12,"items":1074,"index":82,"prev":1104,"next":1105},"booklet\u002Fsql\u002Fmysql",[1075,1079,1083,1087,1088,1090,1094,1096,1098,1100,1102],{"path":1076,"title":1077,"date":1078,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fauth","用户与权限管理","2021-06-06",{"path":1080,"title":1081,"date":1082,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fbackup","备份与恢复","2024-02-23",{"path":1084,"title":1085,"date":1086,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fbase","MySQL 基础概念","2021-03-18",{"path":7,"title":8,"date":14,"pinned":15},{"path":1069,"title":1070,"date":1089,"pinned":15},"2024-07-14",{"path":1091,"title":1092,"date":1093,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fdml","数据操作","2024-05-30",{"path":1065,"title":1066,"date":1095,"pinned":15},"2024-08-16",{"path":1057,"title":1058,"date":1097,"pinned":15},"2025-04-04",{"path":1053,"title":1054,"date":1099,"pinned":15},"2025-11-29",{"path":1049,"title":1050,"date":1101,"pinned":15},"2026-01-19",{"path":1061,"title":1062,"date":1103,"pinned":15},"2024-10-16",{"path":1084,"title":1085,"date":1086,"pinned":15},{"path":1069,"title":1070,"date":1089,"pinned":15}]