流年似水博客开通了,本站主要是写关于Web和大数据方面内容,正在更新中,欢迎大家光临!
  1. 文章:97 篇
  2. 总浏览:35,805 次
  3. 评论:22条
  4. 最后更新:2020-06-08
  5. 分类目录:39 个

MySQL约束汇总

MySQL l, xy 138℃ 0评论

  1. 约束

(1)      概念:用来约束字段的行为,比如非空、默认值等。

(2)      注意:

1           mysql中没有检查约束(check),但是写也不会报错,只是不会起作用。

(3)      分类(按照修饰的字段个数)

1           单行约束

1)         非空约束: NOT NULL

2           多行约束

1)         唯一约束 :UNIQUE

2)         默认约束 :DEFAULT

3)         主键约束 :PRIMAEY KEY

4)         外键约束 :FOREIGN KEY

5)         检查约束 :CHECK

6)         无符号   : UNSIGNED

(4)      分类

1           列级约束

1)         非空约束: NOT NULL

2           表级约束

1)         唯一约束 :UNIQUE

2)         默认约束 :DEFAULT

3)         主键约束 :PRIMAEY KEY

4)         外键约束 :FOREIGN KEY

5)         检查约束 :CHECK

6)         无符号   : UNSIGNED

  1. 非空约束

(1)      特点

1           被非空约束修饰以后,该列(字段)不能为空,即插入数据的时候,该列不能为空(除非同时指定了默认值【使用DEFAULT指定默认值】),否则会报错!

(2)      使用情况

1           添加:

2           创建表的时

create table temp01(

    id int(11)  not null,

    username varchar(20)

);

3           表添加字段时(新字段使用)

alter table temp01 add column password varchar(20) not null;

4           修改表字段数据类型时

alter table temp01 modify column username varchar(30) not null;

5           修改表字段名称时

alter table temp01 change username users varchar(30) not null;

6           删除:

1)         修改表字段数据类型的时候

alter table temp01 modify column users varchar(30);

  1. 唯一约束(UNIQUE

(1)      特点

1           被唯一约束修饰的字段(列)不能重复(不包括NULL值),可以允许有多个NULL

2           一张表中多个字段可以同时添加唯一约束

3           一张表中多个字段可以添加联合约束(多个字段联合起来相同才会报错)

4           如果在列上执行唯一约束,默认情况下索引的名称为列名

5           注意:

1)         如果一张表中没有主键(有主键的情况则不会),一个字段既有唯一约束也有非空约束,那么mysql会自动将该字段约束提成为主键约束。

(2)      使用情况

1           创建:

1)         创建表的时

create table temp02(
    id int(11)  unique not null,
    username varchar(20),
    constraint u_uk unique(username)
);

2)         表添加字段时(新字段使用)

alter table temp02 add column password varchar(20) unique;

3)         修改表字段时(同非空约束)

2           删除

1)         通过索引删除

alter table temp02 drop index u_uk;

  1. 默认约束(DEFAULT

(1)      特点

1           指定字段添加时的默认值(缺省值,如果添加的时候没有被显示的指定)

2           表字段如果没有显示使用DEFAULT指定默认值,那么默认值为NULL(创建表时数据库自动加上)

(2)      使用场景

1           创建

1)         创建表时

create table temp03(
    id int(11) primary key,
    username varchar(20) unique default 'zxy'
);

2)         添加字段时

alter table temp03 add column password varchar(20) default '123456';

3)         修改字段时

同非空约束(略)

2           删除

1)         修改字段

alter table temp03 modify column password varchar(30);
alter table temp03 modify column password varchar(30) default null;

  1. 主键约束(PRIMARY KEY

(1)      特点

1           一张表中只能有一个主键

2           被主键修饰的字段,不可以为空,也不可以重复;相当于非空+唯一(not null + unique

3           mysql中只有被主键修饰以后,才可以使用自动增长(auto_increment

(2)      使用场景

1           创建

1)         创建表时

create table temp04(
    id int(11) primary key,
    username varchar(20) unique default 'zxy'
);

 

create table temp04(
    id int(11),
    username varchar(20),
    constraint i_pk primary key(id)
);

2)         添加字段时(此时应该表中没有主键,否则不能成功)

alter table temp04 add column password varchar(20) primary key;

3)         修改字段时

同非空约束(略)

2           删除

1)         索引删除

alter table temp04 drop primary key;

  1. 外键(FOREIGN KEY

(1)      特点

1           一张表中可以多个外键

2           外键引用其他表的字段一定能要有唯一约束,一般情况下都是引用其他表的主键

3           引用外键的表称为从表,被引用的表称为主表

4           默认情况下,如果从表中有引用主表中的记录,主键中不能删除该条记录。但是可以指定引用的关系来修改这一情况

1)         ON DELETE CASCADE 级联删除,主表中删除记录,也会删除从表中引用的记录

2)         ON DELETE SET NULL :级联置空,主表中删除记录,也从表中置空外键引用

(2)      使用场景

1           创建

1)         创建表时

CREATE TABLE dept(
    dept_id INT AUTO_INCREMENT PRIMARY KEY,
    dept_name VARCHAR(20)
);

 

CREATE TABLE emp(
    emp_id INT AUTO_INCREMENT PRIMARY KEY,
    last_name VARCHAR(15),
    dept_id INT,
    CONSTRAINT emp_dept_id_fk FOREIGN KEY(dept_id)
    REFERENCES dept(dept_id)
);

ba9ced57-b01b-4cae-ab4d-02e602757676.001.png

 

2)         修改:

alter table emp add constraint emp_dept_id_fk foreign key(dept_id) references dept(dept_id);

2           删除

1)         索引删除

alter table emp drop foreign key emp_dept_id_fk;

  1. 无符号(UNSIGNED

(1)      特点

1           修饰数字类型

2           修饰以后,不能表示负数。数据类型的范围发生改变。例如:tinyint有符号表示范围(-128-127),无符号表示范围(0-255)。注意:int无符号表示对应的java类型为Long

3           一般用于不存储负数的情况,常用于主键与自增长一起使用

(2)      使用

CREATE TABLE temp22 (
  id int(10) unsigned NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`id`)
);

  1. 自动增长

(1)      特点

1           一列的数字能够自动增长,默认增长步长为1

2           只有主键才能使用自动增长

(2)      使用

CREATE TABLE temp22 (
  id int(10) unsigned NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`id`)
);

 

 

 MySQL中的数据类型请参考:MySQL常用的数据类型汇总

转载请注明:流年似水 » MySQL约束汇总

喜欢 (2)or分享 (0)

Warning: copy(https://cn.gravatar.com/avatar/?s=54&d=%2Fwp-content%2Fthemes%2Fyusi1.0%2Fimg%2Fdefault.png&r=g): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 239

Warning: copy(/wp-content/themes/yusi1.0/img/default.png): failed to open stream: No such file or directory in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 243
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址