SQL约束语法
約束
作用:對(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ǔ)法:
| 在創(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 VALUES(1,'露娜',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
| 唯一約束的格式 | 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
解決方式:使用外鍵約束
外鍵級(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)更新和級(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é)
- 上一篇: java 多线程两种方式_JAVA多线程
- 下一篇: mysql jar jdk1.6_Win