SQL约束语法
約束
作用:對表中的數(shù)據(jù)進行限定,保證數(shù)據(jù)的正確性、有效性、完整性!
約束分類:
| PRIMARY KEY | 主鍵約束 |
| PRIMARY KEY AUTO_INCREMENT | 主鍵、自動增長 |
| UNIQUE | 唯一約束 |
| NOT NULL | 非空約束 |
| FOREIGN KEY | 外鍵約束 |
| FOREIGN KEY ON UPDATE CASCADE | 外鍵級聯(lián)更新 |
| FOREIGN KEY ON DELETE CASCADE | 外鍵級聯(lián)刪除 |
主鍵約束:
特點:
- 主鍵約束包含:非空和唯一兩個功能
- 一張表只能有一個列作為主鍵
- 主鍵一般用于表中數(shù)據(jù)的唯一標識
語法:
| 在創(chuàng)建表的時候給字段添加主鍵 | 字段名 字段類型 PRIMARY KEY |
| 在已有表中添加主鍵 | ALTER TABLE 表名 ADD PRIMARY KEY(字段名); |
| 刪除主鍵 | ALTER TABLE 表名 DROP PRIMARY KEY; |
| 主鍵?增 | 字段名 字段類型 PRIMARY KEY AUTO_INCREMENT |
| 修改自增起始值 | ALTER TABLE 表名 AUTO_INCREMENT=起始值; |
演示:
-- 標準語法 CREATE TABLE 表名(列名 數(shù)據(jù)類型 PRIMARY KEY,列名 數(shù)據(jù)類型,... );-- 創(chuàng)建學生表,并加主鍵 CREATE TABLE student(id INT PRIMARY KEY,-- id是主鍵NAME VARCHAR(30),age TINYINT );-- 查詢學生表詳細信息 DESC student;-- 添加數(shù)據(jù) INSERT INTO student VALUES(NULL,'韓信',99); -- 不能為空 INSERT INTO student VALUES(1,'韓信',99);-- 不能重復 INSERT INTO student VALUES(1,'露娜',98); INSERT INTO student VALUES(2,'李白',97);-- 刪除主鍵 ALTER TABLE student DROP PRIMARY KEY;-- 建表以后單獨添加主鍵 ALTER TABLE student MODIFY id INT PRIMARY KEY;主鍵自增:
- Mysql中的自增約束,必須配合鍵的約束一起用
- 如果刪除某一行數(shù)據(jù)再添加一行,那id就會再刪除的id的基礎上加1
| 唯一約束的格式 | CREATE TABLE 表名 (字段名 字段類型, 字段名 字段類型 UNIQUE ); |
| 非空約束 | CREATE TABLE 表名 (字段名 字段類型,字段名 字段類 NOT NULL, ); |
| 默認值 | 作用:如果這個字段不設置值,就使用默認值。 |
| 默認值的格式 | CREATE TABLE 表名 (字段名 字段類型, DEFAULT 默認值); |
唯一約束:
唯一約束就是不讓值重復,使用關鍵字UNIQUE
-- 唯一約束 標準語法 CREATE TABLE 表名(列名 數(shù)據(jù)類型 UNIQUE,列名 數(shù)據(jù)類型,... );-- 建表時添加唯一約束 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)有重復數(shù)據(jù)是添加不了的 ALTER TABLE student MODIFY age INT UNIQUE;非空約束:
-- 非空約束標準語法 CREATE TABLE 表名(列名 數(shù)據(jù)類型 NOT NULL,列名 數(shù)據(jù)類型,... );-- 創(chuàng)建表時添加非空約束 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)建表后單獨添加非空約束,如果有已經(jīng)存在的null值會提醒,但不報錯,原來的null值會變空 ALTER TABLE student MODIFY name VARCHAR(20) NOT NULL;外鍵約束:
- 一個表中的某個字段引用其他表的主鍵,這個字段稱為外鍵
- 主表:主鍵所在的表,約束別人的表,將數(shù)據(jù)給別人用
- 副表/從表:外鍵所在的表,被約束的表,使用別人的數(shù)據(jù)
作用:
作用就是讓表和表之間產(chǎn)生關系,保證數(shù)據(jù)的準確性
為什么有外鍵約束:
表和表之間的數(shù)據(jù)有關聯(lián)的時候,沒有相關的數(shù)據(jù)約束無法保證數(shù)據(jù)的準確性!
什么時候用?
表和表之間有關聯(lián)的時候唄,比如是用戶和訂單兩個表之間
- 當我們在employee的dep_id里面輸入不存在的部門,數(shù)據(jù)依然可以添加.但是并沒有對應的部門,不能出現(xiàn)這種情況。employee的dep_id中的內(nèi)容只能是department表中存在的id
需要達到目的:需要約束dep_id只能是department表中已經(jīng)存在id
解決方式:使用外鍵約束
外鍵級聯(lián)更新和級聯(lián)刪除:
什么是級聯(lián)更新和級聯(lián)刪除
把user用戶表中的某個用戶刪,該用戶所有的訂單也隨之被刪除
把user用戶表中的某個用戶id修改,訂單表中該用戶所屬的訂單用戶編號也隨之修改
語法格式:
級聯(lián)更新:ON UPDATE CASCADE
級聯(lián)刪除:ON DELETE CASCADE
級聯(lián)更新和級聯(lián)刪除:ON UPDATE CASCADE ON DELETE CASCADE
演示:
-- 添加級聯(lián)更新和級聯(lián)刪除 ALTER TABLE orderlist ADD CONSTRAINT ou_wjys FOREIGN KEY (uid) REFERENCES USER(id) ON UPDATE CASCADE ON DELETE CASCADE; -- 將韓信這個用戶的id改為9 UPDATE USER SET id = 9 WHERE id = 1 ;-- 將韓信這個用戶刪除 DELETE FROM USER WHERE id = 9;總結
- 上一篇: java 多线程两种方式_JAVA多线程
- 下一篇: 修改wap游戏服务器,修改wap游戏服务