MySql常見約束


含義:一種限制,用於限制表中的數據,為了保證表中數據的准確性和可靠性。

分類:六大約束

  1.NOT NULL :非空,用於保證該字段的值不能為空。例如學生表的學生姓名及學號等等。

  2.DEFAULT:默認值,用於保證該字段有默認值。例如學生表的學生性別

  3.PRIMARY KEY:主鍵,用於保證該字段的值具有唯一性並且非空。例如學生表的學生學號等。

  4.UNIQUE:唯一,用於保證該字段的值具有唯一性,可以為空。例如注冊用戶的手機號,身份證號等。

  5.CHECK:檢查約束(MySql不支持),檢查字段的值是否為指定的值。

  6.FOREIGN KEY:外鍵,用於限制兩個表的關系,用於保證該字段的值必須來自於主表的關聯列的值,在從表添加外鍵約束,用於引用主表中某些的值。例如學生表的專業編號

添加約束的實際:

  1.創建表時

  2.修改表時

約束的添加分類:

  列級約束:六大約束語法上都支持,但外鍵約束沒有效果

  表級約束:除了非空、默認、其它的都支持。

  示例:

    ①添加列級約束   

1 create table if not exists t_stuinfo(
2     id int primary key,    #主鍵
3     stuName varchar(20) not null,    #非空
4     gender char(1) check(gender='' or gender=''),    #檢查約束,MySql沒有效果但不報錯
5     seat int unique,    #唯一約束
6     age int default 18,    #默認(值)約束
7     majorId int references major(id) #外鍵約束,MySql沒有效果,但不報錯
8     );
9     

    ②添加表級約束

    語法:在創建表字段的最下面

          constraint 約束名 約束類型(字段名)

    

 1 create table if not exists t_stuinfo(
 2     id int,
 3     stuName varchar(20),
 4     gender char(1),
 5     seat int,
 6     age int,
 7     majorId int,
 8     constraint pk primary key(id),    #約束名隨意,主鍵不生效,但不報錯。
 9     constraint uq unique(seat),    #唯一約束
10     constraint ck check(gender='' or gender=''),    #檢查約束,MySql不支持此約束,不報錯但不生效
11     constraint fk_stuinfo_major foreign key(majorId) references major(id)    #外鍵約束
12     );
13     

 主鍵和唯一的區別

約束名稱 保證唯一性 是否允許為空 一個表中可以有多少個 是否允許組合
主鍵 × 最多有1個,可以沒有 √(不推薦)
唯一 可以有多個 √(不推薦)

外鍵:

  1.要求在從表中設置外鍵關系

  2.從表的外鍵列的類型和主表的關聯列的類型要求一致或兼容,名稱無要求。

  3.主表的關聯列必須時一個Key(一般為主鍵或唯一,外鍵也可以但無意義)

  4.插入數據時,先插入主表,再插入從表

     刪除數據時,先刪除從表,再刪除主表

修改表時添加約束

  1.添加非空約束

1 alter table 表名稱 modify column 列名 列類型 not null;

  2.添加默認約束

1 alter table 表名稱 modify column 列名 列類型 default 默認值;

  3.添加主鍵

    ①列級約束方式

1 alter table 表名稱 modify column 列名 列類型 primary key;

    ②表級約束方式

1 alter table 表名稱 add primary key(id);

  4.添加唯一

    ①列級約束

1 alter table 表名稱 modify column 列名 列類型 unique;

    ②表級約束

1 alter table 表名稱 add unique(列名稱);

  5,添加外鍵(列級寫法可行,但無效果)

    ①表級約束

1 alter table 表名稱 add constraint fk_stuinfo_magor foreign key(magorId) references major(id);

  6.添加通用寫法(語法)

    ①列級約束 

1 alter table 表名稱 modify column 列名 列類型 新約束;

    ②表級約束

1 alter table 表名稱 add constraint 約束名 約束類型(列名稱) [外鍵的引用];

 

修改表時刪除約束

  1.刪除非空約束

1 alter table 表名稱 modify column 列名 列類型 [null];

  2.刪除默認約束

1 alter table 表名稱 modify column 列名 列類型;

  3.刪除主鍵

    ①

1 alter table 表名稱 modify column id int;

    ②

1 alter table 表名稱 drop primary key;

  4.刪除唯一

1 alter table 表名稱 drop index(索引名) 設置唯一時的名稱;

  5.刪除外鍵

1 alter table 表名稱 drop foreign key(索引名) 設置外鍵時的名稱;

 

標識列

  又稱為自增長列,可以不用手動的插入值,系統提供默認的序列值

  特點:

    1.標識列必須和一個Key搭配(Key指主鍵、唯一、外鍵....)

    2.一個表最多有一個標識列

    3.標識列的類型只能是數值型

    4.標識列可以通過SET auto_increment_increment = 3;設置步長(全局),可以通過插入行時手動插入標識列值設置起始值。

  1.創建表時設置標識列

1 create table user(
2     id int primary key auto_increment,
3     name varchar(20)
4     );

  2.修改表時設置標識列

1     alter table 表名稱 modify column id int primary key auto_increment;

  3.修改表時刪除標識列

1 alter table 表名稱 modify column id int primary key;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM