日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

SQL约束语法

發(fā)布時(shí)間:2025/3/15 数据库 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL约束语法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

約束

作用:對(duì)表中的數(shù)據(jù)進(jìn)行限定,保證數(shù)據(jù)的正確性、有效性、完整性!

約束分類:
約束說明
PRIMARY KEY主鍵約束
PRIMARY KEY AUTO_INCREMENT主鍵、自動(dòng)增長(zhǎng)
UNIQUE唯一約束
NOT NULL非空約束
FOREIGN KEY外鍵約束
FOREIGN KEY ON UPDATE CASCADE外鍵級(jí)聯(lián)更新
FOREIGN KEY ON DELETE CASCADE外鍵級(jí)聯(lián)刪除
主鍵約束:

特點(diǎn):

  • 主鍵約束包含:非空和唯一兩個(gè)功能
  • 一張表只能有一個(gè)列作為主鍵
  • 主鍵一般用于表中數(shù)據(jù)的唯一標(biāo)識(shí)

語(yǔ)法:

含義SQL語(yǔ)句
在創(chuàng)建表的時(shí)候給字段添加主鍵字段名 字段類型 PRIMARY KEY
在已有表中添加主鍵ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
刪除主鍵ALTER TABLE 表名 DROP PRIMARY KEY;
主鍵?增字段名 字段類型 PRIMARY KEY AUTO_INCREMENT
修改自增起始值ALTER TABLE 表名 AUTO_INCREMENT=起始值;

演示:

-- 標(biāo)準(zhǔn)語(yǔ)法 CREATE TABLE 表名(列名 數(shù)據(jù)類型 PRIMARY KEY,列名 數(shù)據(jù)類型,... );-- 創(chuàng)建學(xué)生表,并加主鍵 CREATE TABLE student(id INT PRIMARY KEY,-- id是主鍵NAME VARCHAR(30),age TINYINT );-- 查詢學(xué)生表詳細(xì)信息 DESC student;-- 添加數(shù)據(jù) INSERT INTO student VALUES(NULL,'韓信',99); -- 不能為空 INSERT INTO student VALUES(1,'韓信',99);-- 不能重復(fù) INSERT INTO student VALUES1,'露娜',98); INSERT INTO student VALUES(2,'李白',97);-- 刪除主鍵 ALTER TABLE student DROP PRIMARY KEY;-- 建表以后單獨(dú)添加主鍵 ALTER TABLE student MODIFY id INT PRIMARY KEY;
主鍵自增:
  • Mysql中的自增約束,必須配合鍵的約束一起用
  • 如果刪除某一行數(shù)據(jù)再添加一行,那id就會(huì)再刪除的id的基礎(chǔ)上加1
-- 建表時(shí)添加主鍵自增約束 CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(30),age TINYINT );-- 添加數(shù)據(jù) INSERT INTO student VALUES (NULL,'韓信',99); INSERT INTO student VALUES (NULL,'李白',98);-- 刪除主鍵自增約束 ALTER TABLE student MODIFY id INT;-- 建表后單獨(dú)添加主鍵自增約束 ALTER TABLE student MODIFY id INT AUTO_INCREMENT; 唯一約束作用:使這個(gè)字段的值不能夠重復(fù)
唯一約束的格式CREATE TABLE 表名 (字段名 字段類型, 字段名 字段類型 UNIQUE );
非空約束CREATE TABLE 表名 (字段名 字段類型,字段名 字段類 NOT NULL, );
默認(rèn)值作用:如果這個(gè)字段不設(shè)置值,就使用默認(rèn)值。
默認(rèn)值的格式CREATE TABLE 表名 (字段名 字段類型, DEFAULT 默認(rèn)值);
唯一約束:

唯一約束就是不讓值重復(fù),使用關(guān)鍵字UNIQUE

-- 唯一約束 標(biāo)準(zhǔn)語(yǔ)法 CREATE TABLE 表名(列名 數(shù)據(jù)類型 UNIQUE,列名 數(shù)據(jù)類型,... );-- 建表時(shí)添加唯一約束 CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(30),age TINYINT UNIQUE );-- 添加數(shù)據(jù) INSERT INTO student VALUES (NULL,'韓信',99); INSERT INTO student VALUES (NULL,'李白',99);-- 刪除唯一約束 ALTER TABLE student DROP INDEX age;-- 建表后添加唯一約束,如果要約束的列已經(jīng)有重復(fù)數(shù)據(jù)是添加不了的 ALTER TABLE student MODIFY age INT UNIQUE;
非空約束:
-- 非空約束標(biāo)準(zhǔn)語(yǔ)法 CREATE TABLE 表名(列名 數(shù)據(jù)類型 NOT NULL,列名 數(shù)據(jù)類型,... );-- 創(chuàng)建表時(shí)添加非空約束 CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20) NOT NULL, -- 給name添加非空約束age INT UNIQUE );-- 添加數(shù)據(jù) INSERT INTO student VALUES (NULL,'韓信',99),(NULL,'李白',98);-- 刪除非空約束 ALTER TABLE student MODIFY name VARCHAR(20);-- 創(chuàng)建表后單獨(dú)添加非空約束,如果有已經(jīng)存在的null值會(huì)提醒,但不報(bào)錯(cuò),原來的null值會(huì)變空 ALTER TABLE student MODIFY name VARCHAR(20) NOT NULL;
外鍵約束:
  • 一個(gè)表中的某個(gè)字段引用其他表的主鍵,這個(gè)字段稱為外鍵
  • 主表:主鍵所在的表,約束別人的表,將數(shù)據(jù)給別人用
  • 副表/從表:外鍵所在的表,被約束的表,使用別人的數(shù)據(jù)

作用:

作用就是讓表和表之間產(chǎn)生關(guān)系,保證數(shù)據(jù)的準(zhǔn)確性

為什么有外鍵約束:

表和表之間的數(shù)據(jù)有關(guān)聯(lián)的時(shí)候,沒有相關(guān)的數(shù)據(jù)約束無(wú)法保證數(shù)據(jù)的準(zhǔn)確性!

什么時(shí)候用?

表和表之間有關(guān)聯(lián)的時(shí)候唄,比如是用戶和訂單兩個(gè)表之間

  • 當(dāng)我們?cè)趀mployee的dep_id里面輸入不存在的部門,數(shù)據(jù)依然可以添加.但是并沒有對(duì)應(yīng)的部門,不能出現(xiàn)這種情況。employee的dep_id中的內(nèi)容只能是department表中存在的id

    需要達(dá)到目的:需要約束dep_id只能是department表中已經(jīng)存在id
    解決方式:使用外鍵約束

-- 創(chuàng)建表的時(shí)候添加外鍵約束 -- 格式 CONSTRAINT 外鍵名 FOREIGN KEY (本表外鍵列名) REFERENCES 主表名(主表主鍵列名) -- 創(chuàng)建用戶和訂單表 CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT, -- idNAME VARCHAR(20) NOT NULL -- 姓名 );-- 創(chuàng)建orderlist訂單表 CREATE TABLE orderlist(id INT PRIMARY KEY AUTO_INCREMENT, -- idnumber VARCHAR(20) NOT NULL, -- 訂單編號(hào)uid INT, -- 訂單所屬用戶CONSTRAINT ou_wjys FOREIGN KEY (uid) REFERENCES USER(id) );-- 添加USER表數(shù)據(jù) INSERT INTO USER VALUES (NULL,'韓信'),(NULL,'李白'),(NULL,'露娜');-- 添加orderlist表數(shù)據(jù) INSERT INTO orderlist VALUES (NULL,'001',1),(NULL,'001',1), (NULL,'002',2),(NULL,'002',2), (NULL,'003',3),(NULL,'003',3);-- 查詢數(shù)據(jù) SELECT * FROM USER; SELECT * FROM orderlist;-- 查詢表結(jié)構(gòu) DESC USER; DESC orderlist;-- 刪除外鍵 ALTER TABLE orderlist DROP FOREIGN KEY ou_wjys;-- 創(chuàng)建表后單獨(dú)添加外鍵約束 ALTER TABLE orderlist ADD CONSTRAINT ou_wjys FOREIGN KEY (uid) REFERENCES USER(id);
外鍵級(jí)聯(lián)更新和級(jí)聯(lián)刪除:

什么是級(jí)聯(lián)更新和級(jí)聯(lián)刪除

把user用戶表中的某個(gè)用戶刪,該用戶所有的訂單也隨之被刪除
把user用戶表中的某個(gè)用戶id修改,訂單表中該用戶所屬的訂單用戶編號(hào)也隨之修改

語(yǔ)法格式:

級(jí)聯(lián)更新:ON UPDATE CASCADE
級(jí)聯(lián)刪除:ON DELETE CASCADE
級(jí)聯(lián)更新和級(jí)聯(lián)刪除:ON UPDATE CASCADE ON DELETE CASCADE

-- 添加級(jí)聯(lián)更新 ALTER TABLE 表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY (本表外鍵列名) REFERENCES 主表名(主鍵列名) ON UPDATE CASCADE; -- 添加級(jí)聯(lián)刪除 ALTER TABLE 表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY (本表外鍵列名) REFERENCES 主表名(主鍵列名) ON DELETE CASCADE; -- 添加級(jí)聯(lián)更新和級(jí)聯(lián)刪除 ALTER TABLE 表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY (本表外鍵列名) REFERENCES 主表名(主鍵列名) ON UPDATE CASCADE ON DELETE CASCADE;

演示:

-- 添加級(jí)聯(lián)更新和級(jí)聯(lián)刪除 ALTER TABLE orderlist ADD CONSTRAINT ou_wjys FOREIGN KEY (uid) REFERENCES USER(id) ON UPDATE CASCADE ON DELETE CASCADE; -- 將韓信這個(gè)用戶的id改為9 UPDATE USER SET id = 9 WHERE id = 1 ;-- 將韓信這個(gè)用戶刪除 DELETE FROM USER WHERE id = 9;

總結(jié)

以上是生活随笔為你收集整理的SQL约束语法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。