Mysql的几种约束

作者: 月球的企鹅 | 来源:发表于2018-08-01 15:33 被阅读189次

    一、Mysql支持以下约束:

    ※ 主键约束 :primary key

    ※ 唯一性约束:unique key

    ※ 外键约束:foreign key

    ※ 非空约束:not null(null)

    ※ 自增约束:auto_increment

    ※ 默认值约束:default

    二、 主键约束:

    一个表只能有一个主键,当建表时忘记设置主键约束时.设置为主键的列查询速度会非常快,所以一般会用聚集索引,这个我们后面会讲到。

    添加主键约束:设置myself表的age为主键

    alter table myself add primary key(age);
    

    语法:alter table 表名 add primary key;(列名)※ 可以有多个列名

    修改主键约束:将id设置为主键

    alter table myself modify id int primary key;
    

    语法:alter table 表名 modify 列名称 列类型 primary key;

    删除主键约束:

    alter table myself drop primary key;
    

    语法:alter table 表名 drop primary key;

    三、外键约束:

    何为外键,当建表时需要用到另外一个表的主键作为本表的的主键时,需要设置外键。设置外间后,若想在删除本表数据时会级联删除或者默认删除其他方式。

    添加外键约束:设置本表的cno为外键

    alter table myself add foreign key cno references course(cno); 
    

    语法:alter table 表名称 add foreign key (列名称) references 关联表名称(列名称);

    外键删除:

    alter table myself drop foreign key myself_ibfk_1;
    

    语法:alter table 表名称 drop foreign key 外键名称; ※外键名和外键名称不一样

    查询外键名:查询myself外键名

    show create table myself
    

    语法:show create table 表名

    删除表时有两种模式:

    ※ on delete cascade 级联删除

    ※ on delete set null 表的关联列的值设置为null

    四、非空约束:

    可以在每个字段后面加上这NULLNOT NULL 修饰符来指定该字段是否可以为空(NULL),还是说必须填上数据(NOT NULL)。MySQL默认情况下指定字段为NULL修饰符,如果一个字段指定为NOT NULL,MySQL则不允许向该字段插入空值(这里面说的空值都为NULL),因为这是“规定”。

    create table friends (
      id int(3) not null,
      name varchar(8) not null,
      pass varchar(20) not null
    );
    INSERT INTO friends VALUES (NULL , 'simaopig', 'simaopig');
    

    但是在自增列和TIMESTAMP字段中,这个规则并不适用。向这些字段中插入NULL值将会导致插入下一个自动增加的值或者当前的时间戳。当插入新数据时对应的列为不能空。非空约束是相对于默认值约束而说的。

    添加非空约束:

    alter table myself modify id int not null;
    

    语法:alter table 表名 modify 列名 列类型 not null;

    修改非空约束:修改非空就是改为空

    alter table myself modify id int null;
    

    语法:alter table 表名 modify 列名 列类型 null

    删除非空约束:删除非空约束就是设置为默认值

    alter table modify id int default 'abe'
    

    语法:alter table modify 列名 列类型 默认值;

    五、默认值约束:default:

    可以使用DEFAULT修饰符为字段设定一个默认值。当插入记录时,如果忘记插入该字段的值,MySQL会自动为您设置上该字段的默认值。

    create table im (
      id int(3) not null,
      name varchar(25) not null default 'QQ' 
    );
    INSERT INTO im( id, name ) VALUES ( 2, 'MSN' ) ;
    INSERT INTO im( id ) VALUES ( 3 ) ;
    SELECT * FROM im LIMIT 0 , 30;
    

    limit语法文末介

    如果一个字段中没有指定DEFAULT修饰符,MySQL会依据这个字段是NULL还是NOT NULL自动设置默认值。如果指定字段可以为NULL,则MySQL为其设置默认值为NULL。如果是NOT NULL字段,MySQL对于数值类型插入0,字符串类型插入空字符串,时间戳类型插入当前日期和时间,ENUM类型插入枚举组的第一条。
    当插入时没有插入值时,会自动插入默认值。默认值约束相对于非空约束而说。

    添加默认值约束:

    alter table myself add id int not null default 'abc';
    

    语法:alter table 表名 add 列名 列类型 not null default '默认值';

    六、唯一性约束:

    本列的内容只能唯一不能重复。

    添加唯一约束:

    alter table myself add unique(id);
    

    语法:alter table 列名 add unique(列名称) ※可以有多个列名称,用逗号隔开。

    修改唯一约束:

    alter table myself modify id int unique;
    

    语法:alter table 表名 modify 列名称 列类型 unique;

    删除唯一约束:删除age列的唯一约束

    alter table myself drop index age;
    

    语法:alter table 表名称 drop index 列名称;

    7、自增约束:

    AUTO_INCREMENT修饰符只适用于INT字段,表明MySQL应该自动为该字段生成一个数(每次在上一次生成的数值上面加1)。对于主键(稍候介绍),这是非常有用的。因为其允许开发者使用MySQL为每条记录创建唯一的标识符。

    CREATE TABLE items(
    id int( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    label varchar( 255 ) NOT NULL
    );
    insert into items(label) values ('xxx');
    insert into items(label) values ('yyy');
    insert into items(label) values ('zzz');
    select * from items;
    

    tip:mysql不支持check约束,要想达到check约束的效果,应将限制列设置为enum 枚举型。
    非主外键字段可以同时设置NOT NULL,CHECK约束,或者NOT NULL,DEFAULT,CHECK,只要不冲突就可以。


    limit语法
    Limit子句可以被用于强制 SELECT 语句返回指定的记录数。Limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。

      //初始记录行的偏移量是 0(而不是 1):
      mysql> SELECT * FROM table LIMIT 5,10; //检索记录行6-15
      //为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
      mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last
      //如果只给定一个参数,它表示返回最大的记录行数目。换句话说,LIMIT n 等价于 LIMIT 0,n:
      mysql> SELECT * FROM table LIMIT 5;     //检索前 5 个记录行
    

    参考资料
    MySQL 约束类型
    MySQL的Limit详解

    相关文章

      网友评论

        本文标题:Mysql的几种约束

        本文链接:https://www.haomeiwen.com/subject/rbzlvftx.html