南寧做網站設計方案微商軟文范例
1、查看約束
?SHOW CREATE TABLE table_name
2、主鍵約束(PRIMARY KEY)
主鍵約束最顯著的特征是主鍵列中的值是不允許重復(唯一)的,通過主鍵約束可強制表 的實體完整性。當創(chuàng)建或更改表時可通過定義 primary key 約束來創(chuàng)建主鍵。一個表只 能有一個primary key約束,且primary key約束中的列不能接受NULL值。
alter table tab_name add constraint pk_name primary key (deptno);
在創(chuàng)建表時有以下幾種方式:(三種)?
?-- 創(chuàng)建表時CREATE TABLE `table_name` (`id` int PRIMARY KEY, -- 設置主鍵`name` varchar(20));CREATE TABLE `table_name` (`id` int NOT NULL,`name` varchar(20) ,PRIMARY KEY (`id`) -- 設置主鍵);CREATE TABLE `table_name` (`id` int NOT NULL,`name` varchar(20) ,constraint pk primary key(id) -- 設置主鍵);
----設置主鍵的其它方式(用于修改字段的主鍵)
?-- 設置主鍵是deptnoALTER TABLE emp MODIFY empno INT PRIMARY KEY; -- 修改列的屬性來添加主鍵約束ALTER TABLE 表名稱 ADD PRIMARY KEY(id);ALTER TABLE dept ADD CONSTRAINT pk_name PRIMARY KEY(deptno);
?----刪除主鍵
?ALTER TABLE 表名稱 DROP PRIMARY KEY; -- 【推薦】
3、自增長列(AUTO_INCRUEMENT)
并不是所有表在設計完成后都能找到適合作為主鍵的列,為此數據庫提供了自增長列,自 增長列是數值類型( INT , FLOAT , DOUBLE 等)的,其值是由數據庫自動維護的,是永遠都不 會重復的,因此自增長是最適合作為主鍵列的。在創(chuàng)建表時,通過 auto_increment 關鍵 字來標識自增長列,在MySQL數據庫中自增長列可以是主鍵列,也可以是唯一列(有唯一 約束的列)。
特點:
1. 標識列必須和一個Key搭配(Key指主鍵、唯一、外鍵....)
2. 一個表最多有一個標識列
3. 標識列的類型只能是數值型
4. 標識列可以通過 SET auto_increment_increment = 3;?或者??????????????????????????????????????????????????????SET @@auto_increment_increme nt = 3; 設置步長(全局),可以通過插入行時手動插入標識列值設置起始值。(思 考:什么情況下此設置會失效)
如果設置步長會從 1 + 步長 依次遞增。
如果表中已有數據,會按照 1 + 步長進行計算,如果這個 值 已有則再加直到沒有
自增長與主鍵?
CREATE TABLE emp(empNo INT PRIMARY KEY AUTO_INCREMENT,job VARCHAR(10),mgr INT,sal DOUBLE,comm DOUBLE,deptno INT
)CHARACTER SET utf8;-- 設置自增長列的初始值
CREATE TABLE temp(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(2)
) AUTO_INCREMENT=10;-- 設置自增長列的初始值
ALTER TABLE emp AUTO_INCREMENT = 10;
alter table 表名稱 modify column id int auto_increment;-- 刪除自增長列
ALTER TABLE 表名稱 MODIFY COLUMN id INT;
4、唯一約束
對于非主鍵列中的值也要求唯一性的時候,就需要唯一約束。
CREATE TABLE `table_name` (`id` int NOT NULL,`name` VARCHAR(20) UNIQUE?? ??? ?-- 唯一約束
);CREATE TABLE `table_name`(`id` int NOT NULL,`name` VARCHAR(20),constraint uq_name UNIQUE(name)?? ?-- 唯一約束
);alter table 表名稱 ADD unique(列名稱);
alter table dept ADD constraint uq_name UNIQUE(deptname);# 刪除唯一約束
alter table tb_name drop constraint constraint_name;
alter table 表名稱 drop index 唯一約束名;?? ?-- 刪除索引
- 唯一約束要求值不能重復
- 一張表可以有多個唯一約束列
- 約束默認的名稱為其列名
- 唯一約束創(chuàng)建后會自動創(chuàng)建一個唯一索引
5、 默認約束default
為列中的值設置默認值,default ....,如果已經定了值,默認值就無效了
-- 創(chuàng)建表時
CREATE TABLE `table_name` (`id` int DEFAULT NULL, # 默認約束`name` varchar(20) unique,
);-- 添加默認約束第一種
alter table 表名稱 modify column 列名 列類型 default 默認值;
-- 添加默認約束第二種
alter table 表名 change column old_col_name new_col_name new_type default value;-- 刪除
alter table 表名稱 modify column 列名 列類型; -- 將默認值改為 NULL
ALTER TABLE tb_name ALTER col_name DROP DEFAULT; -- 刪除了默認值,新增時必須有值
- 創(chuàng)建表時,不寫默認值都默認 NULL (在無非空約束的情況下)
- 默認約束能和主鍵約束可以同時存在
- 默認約束不能和 AUTO_INCREMENT 同時使用
6. 非空約束
NOT NULL :非空,用于保證該字段的值不能為空。例如學生表的學生姓名及學號等等?
-- 創(chuàng)建表時
CREATE TABLE `table_name` (`id` int NOT NULL, # 非空約束`name` varchar(20),
);alter table 表名稱 modify column 列名 列類型 not null;-- 刪除
alter table 表名稱 modify column 列名 列類型 [null];
7. 外鍵約束
A表中列的值來自于另外一張表B的主鍵或唯一鍵的列稱為 外鍵FK,將被引用值得表稱為
主表或父表,將引用值得表稱為從表或子表。 例如: emp 表中有 deptno 列,值來自于 de
pt 表的 主鍵 deptno 。 dept 是主表, emp 是從表。
?
-- 創(chuàng)建表時
CREATE TABLE `dept`(dept_no INT PRIMARY KEY,dept_name VARCHAR(20),
)CREATE TABLE `emp` (`id` int NOT NULL,`name` varchar(20),`deptno` int,CONSTRAINT fk_dept_no FOREIGN KEY(deptno) REFERENCES dept(dept_no)
);alter table userinfo add constraint foreign key fk_dept_no (dept_no) REFERENCES dept(deptno);-- 刪除
ALTER TABLE tb_name DROP CONSTRAINT constraint_name;
alter table 表名稱 drop foreign key 設置外鍵時的名稱;?
?在外鍵約束中,主表(父表)是指有外鍵的表,子表(從表)是指沒有外鍵的表。 一般來說,外鍵是本表中的字段,本表是子表,通常外鍵引用父表的主鍵。但是當外鍵引用的是父表不為主鍵的字段時,此時外鍵所約束的列可以有一個或多個null同時出現。因為null不是值,不存在重復。
- 創(chuàng)建外鍵時,會在引用表(從表)的字段上建立索引
- 這個字段上有則不創(chuàng)建
- 在 userinfo 表中添加或修改時, dept_no 列的值必須是 dept 表中 deptno 字段中的存在值或者 NULL
- 刪除主表數據時,會先檢查被刪除數據在從表中有沒有對此數據的關聯(引用),如果有不能直接刪除。
如果想要解除此限制需要先禁用外鍵約束【不推薦】
我們可以在創(chuàng)建約束時,設置級聯操作【具體如何操作?】
- - `on delete CASCADE`/ `on update CASCADE` 級聯刪除 / 級聯更新
- - `ON DELETE SET NULL` / `ON UPDATE SET NULL`
8、檢查約束?
check 檢查約束,在數據添加或修改時保證數據的有效性。符合表達式的才會正確執(zhí)行。
-- 創(chuàng)建檢查約束的集中方法:
CREATE TABLE users (... ,age INT CHECK (age >= 18)
);CREATE TABLE users (... ,CONSTRAINT chk_xxx CHECK(expr)
);ALTER TABLE emp2 MODIFY sal DOUBLE CHECK(sal >= 2000);
ALTER TABLE tb_name ADD CONSTRAINT chk_xx check(id > 10);-- 刪除約束
ALTER TABLE tb_name DROP CONSTRAINT tb_chk_num;
- 在MySQL 8.0.16之前的版本中沒有 CHECK 約束。