精华内容
下载资源
问答
  • mysql常见约束

    2019-01-05 22:56:03
    mysql常见约束 直接po代码和案例 #常见约束 /* 含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性(或者叫一致性) 分类:六大约束 NOT NULL:非空,用于保证该字段的值不能为空 比如...

    mysql常见约束

    直接po代码和案例

    #常见约束
    
    /*
    
    
    含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性(或者叫一致性)
    
    
    分类:六大约束
    	NOT NULL:非空,用于保证该字段的值不能为空
    	比如姓名、学号等
    	DEFAULT:默认,用于保证该字段有默认值
    	比如性别
    	PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
    	比如学号、员工编号等
    	UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
    	比如座位号
    	CHECK:检查约束【mysql中不支持】
    	比如年龄、性别
    	FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
    		在从表添加外键约束,用于引用主表中某列的值
    	比如学生表的专业编号,员工表的部门编号,员工表的工种编号
    	
    
    添加约束的时机:
    	1.创建表时
    	2.修改表时
    	
    
    约束的添加分类:
    	列级约束:注意:列级约束不支持取名字,即列级约束无法取约束名
    		六大约束语法上都支持,但外键约束没有效果
    		
    	表级约束:表级约束支持取名字,即表级约束可以取约束名
    		
    		除了非空、默认,其他的都支持
    		
    		
    主键和唯一的大对比:
    
    		保证唯一性  是否允许为空       一个表中可以有多少个          是否允许组合
    	主键	√		×		至多有1个(也可以没有)        √,但不推荐
    	唯一	√	   √(只能有一个为空)	可以有多个                   √,但不推荐
    外键:
    	1、要求在从表设置外键关系
    	2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
    	3、主表的关联列必须是一个key(一般是主键或唯一)
    	4、插入数据时,先插入主表,再插入从表
    	删除数据时,先删除从表,再删除主表
    
    
    */
    
    /*
    CREATE TABLE 表名(
    	字段名 字段类型 列级约束,
    	字段名 字段类型,
    	表级约束
    
    );
    */
    
    #一、创建表时添加约束
    
    #1.添加列级约束
    /*
    语法:
    
    直接在字段名和类型后面追加 约束类型即可。
    
    只支持:默认、非空、主键、唯一
    
    
    
    */
    
    #mysql中不支持CHECK检查约束,写了CHECK检查约束不会报错,写了CHECK检查约束,语法不会报错,但是不起效果
    CREATE TABLE person(
    	id INT PRIMARY KEY,#主键
    	uName VARCHAR(20) NOT NULL,#非空
    	gender CHAR(1) CHECK(gender='男' OR gender ='女'),#检查(虽然语法不会报错,但是该约束不起效果,即不支持检查约束)
    	seat INT UNIQUE,#唯一
    	age INT DEFAULT 20,#默认约束
    	countryId INT REFERENCES country(id)#外键(虽然语法不会报错,但是该约束不起效果,即不支持列级外键约束)
    );
    #
    DESC person;
    #
    #查看person表中的所有索引,包括主键、外键、唯一
    SHOW INDEX FROM person;
    
    #
    CREATE TABLE myUser(
    	id INT PRIMARY KEY,#主键
    	uName VARCHAR(30) NOT NULL UNIQUE,#非空约束
    	#在mysql中不支持检查约束
    	gender CHAR(1) CHECK(gender IN ('男', '女')),#检查(虽然语法不会报错,但是该约束不起效果,即不支持检查约束)
    	seat INT UNIQUE,#唯一
    	age INT DEFAULT 23, #默认约束
    	countryId INT REFERENCES  country(id)#外键(虽然语法不会报错,但是该约束不起效果,即不支持列级外键约束)
    );
    
    
    CREATE TABLE country(
    	id INT PRIMARY KEY,
    	cName VARCHAR(20)
    );
    #
    DESC country;
    #
    DESC myUser;
    #查看myUser表中的所有索引,包括主键、外键、唯一
    SHOW INDEX FROM myUser;
    
    #2.添加表级约束
    /*
    
    语法:在各个字段的最下面
     【constraint 约束名】 约束类型(字段名) 
     注意:可以不起约束名,会有一个默认的约束名
    */
    
    /*表级约束:除了非空、默认,其他的都支持*/
    
    CREATE TABLE myUser2(
    	id INT,
    	uName VARCHAR(30),
    	gender CHAR(1),
    	seat INT ,
    	age INT,
    	countryId INT,
    	CONSTRAINT pk_id PRIMARY KEY(id),#主键
    	CONSTRAINT uq_uName UNIQUE(uName),#唯一键
    	#在mysql中不支持CHECK检查约束,但是写了CHECK检查约束,语法也是不会报错的
    	CONSTRAINT ck_gender CHECK(gender='男' OR gender='女'),#检查约束
    	CONSTRAINT fk_myUser2_country FOREIGN KEY(countryId) REFERENCES country(id) #外键约束
    );
    #
    DESC myUser2;
    #
    SHOW INDEX FROM myUser2;
    
    
    #注意:可以不起约束名,会有一个默认的约束名
    CREATE TABLE myUser3(
    	id INT,
    	uName VARCHAR(30),
    	gender CHAR(1),
    	seat INT ,
    	age INT,
    	countryId INT,
    	#不起约束名,会有一个默认的约束名
    	PRIMARY KEY(id),#主键
    	UNIQUE(uName),#唯一键
    	FOREIGN KEY(countryId) REFERENCES country(id) #外键约束
    );
    
    #
    DESC myUser3;
    #
    SHOW INDEX FROM myUser3;
    
    #
    #通用的写法:
    CREATE TABLE IF NOT EXISTS myUser4(
    	id INT PRIMARY KEY,
    	uName VARCHAR(20) NOT NULL,
    	gender CHAR(1),
    	age INT DEFAULT 20,
    	seat INT UNIQUE,
    	countryId INT,
    	CONSTRAINT fk_myUser4_country FOREIGN KEY(countryId) REFERENCES country(id)
    );
    #
    DESC myUser4;
    #
    SHOW INDEX FROM myUser4;
    
    
    #主键是否允许组合,是允许的,但不推荐
    #唯一键是否允许组合,是允许的,但不推荐
    CREATE TABLE IF NOT EXISTS myUser5(
    	id INT,
    	uName VARCHAR(20),
    	hobby VARCHAR(30),
    	PRIMARY KEY(id,uName),#主键(2列组合)
    	UNIQUE(uName,hobby)#唯一键(2列组合)
    );
    #
    TRUNCATE myUser5
    #
    INSERT INTO myUser5 VALUES(1, 'jack', 'read');
    INSERT INTO myUser5 VALUES(1, 'tom', 'read');
    #
    SELECT * FROM myUser5;
    
    #列级约束可以给一个字段同时添加多个约束
    CREATE TABLE IF NOT EXISTS myUser6(
    	id INT,
    	uName VARCHAR(20) NOT NULL UNIQUE, #既加非空约束,又加唯一约束,顺序无所谓
    	seat VARCHAR(30) UNIQUE NOT NULL #既加非空约束,又加唯一约束,顺序无所谓
    );
    
    #
    DESC myUser6;
    #查看表的索引
    SHOW INDEX FROM myUser6;
    #查看表的key结构
    SHOW KEYS FROM myUser6;
    
    
    #
    DROP TABLE myUser7;
    #
    DESC myUser7;
    SHOW INDEX FROM myUser7;
    SHOW KEYS FROM myUser7;
    SELECT * FROM myUser7;
    #
    CREATE TABLE IF NOT EXISTS myUser7(
    	id INT,
    	uName VARCHAR(20),
    	gender CHAR(1),
    	age INT,
    	seat INT,
    	countryId INT
    );
    #二、修改表时添加约束
    
    /*
    1、添加列级约束
    alter table 表名 modify column 字段名 字段类型 新约束;
    
    2、添加表级约束
    alter table 表名 add 【constraint 约束名】 约束类型(字段名) 【外键的引用】;
    
    
    */
    /*
    修改seat列的列名,名字改成mySeat,改完列名后,再执
    行SHOW INDEX FROM myUser7;或SHOW KEYS FROM myUser7;语句,查看一下Key_name是什
    么,我们发现Key_name是原来的列名seat,而Column_name是新的列名mySeat,由
    此可见Key_name和Column_name并不等价,他们可能是不一致的,这一点需要大家注意
    */
    ALTER TABLE myUser7 CHANGE COLUMN seat mySeat INT;
    #
    DESC myUser7;
    SHOW INDEX FROM myUser7;
    SHOW KEYS FROM myUser7;
    SELECT * FROM myUser7;
    #
    
    #1.添加非空约束
    ALTER TABLE myUser7 MODIFY COLUMN uName VARCHAR(20) NOT NULL;
    #如果我要把非空约束删了,或者说把非空约束改成可以为空(直接在类型后面加个NULL)
    ALTER TABLE myUser7 MODIFY COLUMN uName VARCHAR(20) NULL;
    #如果我要把非空约束删了,或者说把非空约束改成可以为空(直接在类型后面什么都不加,默认就是null)
    ALTER TABLE myUser7 MODIFY COLUMN uName VARCHAR(20);
    #可以给字段同时添加多个约束(同时添加非空约束和唯一约束)
    ALTER TABLE myUser7 MODIFY COLUMN uName VARCHAR(20) NOT NULL UNIQUE;
    ALTER TABLE myUser7 MODIFY COLUMN uName VARCHAR(20) NULL UNIQUE;
    #
    
    #2.添加默认约束
    DESC myUser7;
    ALTER TABLE myUser7 MODIFY COLUMN age INT DEFAULT 18;
    #如果我要把默认约束删了,或者说把默认约束的默认值修改一下
    ALTER TABLE myUser7 MODIFY COLUMN age INT;
    ALTER TABLE myUser7 MODIFY COLUMN age INT DEFAULT 23;
    
    #3.添加主键(2种写法)
    DESC myUser7;
    #(1)列级约束
    ALTER TABLE myUser7 MODIFY COLUMN id INT PRIMARY KEY;
    #(2)表级约束
    ALTER TABLE myUser7 ADD PRIMARY KEY(id);
    #添加主键约束时,给约束取名字
    ALTER TABLE myUser7 ADD CONSTRAINT pk_myUser7_id PRIMARY KEY(id);
    
    #4.添加唯一
    DESC myUser7;
    SHOW INDEX FROM myUser7;
    #(1)列级约束
    ALTER TABLE myUser7 MODIFY COLUMN seat INT UNIQUE;
    ALTER TABLE myUser7 MODIFY COLUMN seat INT UNIQUE NOT NULL;
    ALTER TABLE myUser7 MODIFY COLUMN seat INT NOT NULL UNIQUE;
    ALTER TABLE myUser7 MODIFY COLUMN seat INT UNIQUE NULL;
    ALTER TABLE myUser7 MODIFY COLUMN seat INT NULL UNIQUE;
    #(2)表级约束
    ALTER TABLE myUser7 ADD UNIQUE(seat);
    #添加唯一约束时,给约束取名字
    ALTER TABLE myUser7 ADD CONSTRAINT uq_myUser7_seat UNIQUE(seat);
    
    #
    #5.添加外键
    #添加约束时,省略约束名
    ALTER TABLE myUser7 ADD FOREIGN KEY(countryId) REFERENCES country(id);
    #添加约束时,给约束取名字
    ALTER TABLE myUser7 ADD CONSTRAINT fk_myUser7_country FOREIGN KEY(countryId) REFERENCES country(id);
    
    #三、修改表时删除约束
    
    #1.删除非空约束
    ALTER TABLE myUser7 MODIFY COLUMN uname VARCHAR(20) NULL;
    #或者
    ALTER TABLE myUser7 MODIFY COLUMN uname VARCHAR(20);
    
    #2.删除默认约束
    ALTER TABLE myUser7 MODIFY COLUMN age INT;
    
    
    #3.删除主键
    #这种写法没效果
    ALTER TABLE myUser7 MODIFY COLUMN id INT;
    #这种写法有效果
    ALTER TABLE myUser7 DROP PRIMARY KEY;
    
    
    #4.删除唯一(删除唯一约束的约束名)
    SHOW INDEX FROM myUser7;
    /*
    删除该列的唯一约束其实就是删除该列的索引,即删除该列的Key_name,Key_name通
    过SHOW INDEX FROM 表名;这条语句可以查出来
    */
    ALTER TABLE myUser7 DROP INDEX seat; 
    ALTER TABLE myUser7 DROP INDEX uq_myUser7_seat; 
    
    
    #5.删除外键(删除外键约束的约束名)
    /*
    如下语句是没问题的,可是执行该语句却报错,在网
    上查资料,说这是mysql的一个bug,我用的mysql版本是5.5.15
    出现这种情况的具体原因我没有去深究
    */
    ALTER TABLE myUser7 DROP FOREIGN KEY fk_myUser7_country;
    #
    SELECT VERSION();
    
    #
    DESC myUser7;
    SHOW INDEX FROM myUser7;
    SHOW INNODB STATUS;
    SHOW CREATE TABLE myUser7; 
    #
    CREATE TABLE myEmp2(
    	id INT,
    	ename VARCHAR(50)
    );
    
    CREATE TABLE myDept2(
    	id INT,
    	dname VARCHAR(30)
    );
    #
    DESC myEmp2;
    DESC myDept2;
    SHOW INDEX FROM myEmp2;
    SHOW INDEX FROM myDept2;
    /*
    列级约束:注意:列级约束不支持取名字,即列级约束无法取约束名		
    表级约束:注意:表级约束支持取名字,即表级约束可以取约束名
    */
    #1.向表myEmp2的id列中添加PRIMARY KEY约束(my_emp_id_pk)
    ALTER TABLE myEmp2 MODIFY COLUMN id INT PRIMARY KEY;
    ALTER TABLE myEmp2 ADD PRIMARY KEY(id);
    ALTER TABLE myEmp2 ADD CONSTRAINT my_emp_id_pk PRIMARY KEY(id);
    
    
    #2.向表myDept2的id列中添加PRIMARY KEY约束(my_dept_id_pk)
    ALTER TABLE myDept2 MODIFY COLUMN id INT PRIMARY KEY;
    ALTER TABLE myDept2 ADD PRIMARY KEY(id);
    ALTER TABLE myDept2 ADD CONSTRAINT my_dept_id_pk PRIMARY KEY(id);
    
    
    #3.向表myEmp2中添加列dept_id,并在其中定义FOREIGN KEY约束,与之相关联的列是myDept2表中的id列。
    ALTER TABLE myEmp2 ADD COLUMN dept_id INT;
    
    ALTER TABLE myEmp2 ADD FOREIGN KEY(dept_id) REFERENCES myDept2(id);
    ALTER TABLE myEmp2 ADD CONSTRAINT fk_myEmp2_myDept2 FOREIGN KEY(dept_id) REFERENCES myDept2(id);
    
    #总结
    #列级约束和表级约束的区别
    #注意:在mysql中不支持CHECK检查约束
    /*
    		位置		支持的约束类型		      是否可以起约束名
    列级约束:	列的后面	语法都支持,但外键没有效果     不可以
    表级约束:	所有列的下面	默认和非空不支持,其他支持     可以(但给主键取名字没有效果,主键约束名默认是PRIMARY)
    */
    
    
    #
    #创建表的时候写注释
    CREATE TABLE userinfo(
    	id INT COMMENT '编号',
    	uname VARCHAR(40) COMMENT '用户名',
    	address VARCHAR(120) COMMENT '家庭住址',
    	hobby VARCHAR(200) COMMENT '爱好'
    
    )COMMENT = '用户信息表';
    
    #修改表的注释
    ALTER TABLE userinfo COMMENT '用户信息资料表';
    
    #修改字段的注释,注意:字段名和字段类型照写就行
    ALTER TABLE userinfo MODIFY COLUMN uname VARCHAR(40) COMMENT '姓名';
    
    #查看表注释的方法,在生成的SQL语句中看
    SHOW CREATE TABLE userinfo;
    #在元数据的表里面看
    USE information_schema;
    SELECT * FROM TABLES WHERE TABLE_SCHEMA='shoppingcart' AND TABLE_NAME='userinfo';
    
    #查看字段注释的方法
    SHOW FULL COLUMNS FROM userinfo;
    #在元数据的表里面看
    SELECT * FROM COLUMNS WHERE TABLE_SCHEMA='shoppingcart' AND TABLE_NAME='userinfo';

     

     

    展开全文
  • MySQL常见约束

    2020-12-02 13:14:37
    MySQL常见约束 /* 一、含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性 二、分类:六大约束 1.NOT NULL:非空,用于保证该字段的值不能为空 比如姓名、学号等 2.DEFAULT:默认,用于保证该...

    MySQL常见约束

    /*

    一、含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性

    二、分类:六大约束
    1.NOT NULL:非空,用于保证该字段的值不能为空
    比如姓名、学号等
    2.DEFAULT:默认,用于保证该字段有默认值
    比如性别
    3.PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
    比如学号、员工编号等
    4.UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
    比如座位号
    5.CHECK:检查约束【mysql中不支持】
    比如年龄、性别
    6.FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
    在从表添加外键约束,用于引用主表中某列的值
    比如学生表的专业编号,员工表的部门编号,员工表的工种编号

    三、添加约束的时机:
    1.创建表时
    2.修改表时

    四、约束的添加分类:

    • 列级约束:

    六大约束语法上都支持,但外键约束没有效果

    • 表级约束:

    除了非空、默认,其他的都支持

    在这里插入图片描述

    五、外键:
    1、要求在从表设置外键关系
    2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
    3、主表的关联列必须是一个key(一般是主键或唯一)
    4、插入数据时,先插入主表,再插入从表
    删除数据时,先删除从表,再删除主表

    可以通过以下两种方式来删除主表的记录:
    #方式一:在定义外键时定义可以使用级联删除:ON DELETE CASCADE

    ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;
    

    #方式二:在定义外键时定义可以使用级联置空:SET NULL

    ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;
    

    */

    CREATE TABLE 表名(
    	字段名 字段类型 列级约束,
    	字段名 字段类型,
    	表级约束
    
    )
    

    一、创建表时添加约束

    1.添加列级约束

    /*
    语法:

    直接在字段名和类型后面追加 约束类型即可。

    只支持:默认、非空、主键、唯一

    */

    CREATE DATABASE students;
    USE students;
    DROP TABLE stuinfo;

    CREATE TABLE stuinfo(
    	id INT PRIMARY KEY,#主键
    	stuName VARCHAR(20) NOT NULL UNIQUE, #非空且唯一
    	gender CHAR(1) CHECK(gender='男' OR gender ='女'),#检查
    	seat INT UNIQUE,#唯一
    	age INT DEFAULT  18,#默认约束
    	majorId INT REFERENCES major(id)#外键
    
    );
    

    CREATE TABLE major(
    id INT PRIMARY KEY,
    majorName VARCHAR(20)
    );

    查看stuinfo中的所有索引,包括主键、外键、唯一

    SHOW INDEX FROM stuinfo;
    

    2.添加表级约束

    /*

    语法:在各个字段的最下面
    【constraint 约束名】 约束类型(字段名)
    */

    DROP TABLE IF EXISTS stuinfo;

    CREATE TABLE stuinfo(
    	id INT,
    	stuname VARCHAR(20),
    	gender CHAR(1),
    	seat INT,
    	age INT,
    	majorid INT,
    	
    #非空和默认不支持
        CONSTRAINT pk PRIMARY KEY(id),#主键(mysql中主键名一直为PRIMARY,改了也没效果)
    	CONSTRAINT uq UNIQUE(seat),#唯一键
    	CONSTRAINT ck CHECK(gender ='男' OR gender  = '女'),#检查
    	CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键
    	
    );
    
    SHOW INDEX FROM stuinfo;
    

    通用的写法:★

    除了外键用表级约束,其余都用列级约束:

    CREATE TABLE IF NOT EXISTS stuinfo(
    	id INT PRIMARY KEY,
    	stuname VARCHAR(20) not null,
    	sex CHAR(1),
    	age INT DEFAULT 18,
    	seat INT UNIQUE,
    	majorid INT,
    	CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
    
    );
    

    二、修改表时添加约束

    /*
    语法:
    1、添加列级约束
    alter table 表名 modify column 字段名 字段类型 新约束;

    2、添加表级约束
    alter table 表名 add 【constraint 约束名】 约束类型(字段名) 【外键的引用】;

    */
    DROP TABLE IF EXISTS stuinfo;

    CREATE TABLE stuinfo(
    	id INT,
    	stuname VARCHAR(20),
    	gender CHAR(1),
    	seat INT,
    	age INT,
    	majorid INT
    )
    

    DESC stuinfo;

    1.添加非空约束

    ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
    

    2.添加默认约束

    ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
    

    3.添加主键(支持列级约束和表级约束)

    #①列级约束

    ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
    

    #②表级约束

    ALTER TABLE stuinfo ADD PRIMARY KEY(id);
    

    4.添加唯一

    #①列级约束

    ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
    

    #②表级约束

    ALTER TABLE stuinfo ADD UNIQUE(seat);
    

    5.添加外键

    ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id); 
    

    三、修改表时删除约束

    1.删除非空约束

    #也可以省略NULL,因为默认就是它

    ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL; 
    

    2.删除默认约束

    ALTER TABLE stuinfo MODIFY COLUMN age INT;
    

    3.删除主键

    ALTER TABLE stuinfo MODIFY COLUMN id INT;
    

    或者

    ALTER TABLE stuinfo DROP PRIMARY KEY;
    

    4.删除唯一

    ALTER TABLE stuinfo MODIFY COLUMN seat INT;
    

    或者

    ALTER TABLE stuinfo DROP INDEX seat;
    

    5.删除外键

    ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
    

    SHOW INDEX FROM stuinfo;

    展开全文
  • MYSQL 常见约束

    2020-05-16 13:10:26
    含义:一种限制,用于限制表中的数据,为了保证数据的准确性和可靠性 分类:六大约束 ...CHECK 检查约束,【mysql中不支持】 FOREIGN KEY 外键, 用于限制两个表的关系,用于保证该字段的值必须来自于主表的...

    含义:一种限制,用于限制表中的数据,为了保证数据的准确性和可靠性

    分类:六大约束

    NOT NULL 非空,用于保证该字段的值不能为空

    DEFAULT   默认 , 用于保证该字段有默认值

    比如性别

    PRIMARY KEY  主键, 用于保证该字段的值具有唯一性,并且非空

    比如学号

    UNIQUE  唯一, 用于保证该字段的值具有唯一性,可以为空

    比如座位号

    CHECK 检查约束,【mysql中不支持】

    FOREIGN KEY 外键, 用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表中添加外键约束,用于引用主表中某列的值

    比如 专业编号、部门编号

    语法:

    CREATE TABLE 表名(

            字段名 字段类型 列级约束,

            字段名  字段类型,

            表级约束

    );

    列级约束:六大约束都可以,外键约束没有效果

    表级约束:除了非空、默认,其他的都支持

    展开全文
  • MySQL常见约束条件

    2021-04-13 10:14:28
    MySQL常见约束条件 1、约束条件分类: 1)not null :非空约束,保证字段的值不能为空 s_name VARCHAR(10) NOT NULL, #非空 2)default:默认约束,保证字段总会有值,即使没有插入值,都会有默认值! age INT ...

    MySQL常见约束条件

    1、约束条件分类:

    1)not null :非空约束,保证字段的值不能为空

         s_name VARCHAR(10) NOT NULL, #非空
    

    2)default:默认约束,保证字段总会有值,即使没有插入值,都会有默认值!

         age INT DEFAULT 18, #默认约束
    

    3)unique:唯一,保证唯一性但是可以为空,比如座位号

      	 s_seat INT UNIQUE,#唯一约束
    

    4)check:检查性约束【MySQL不支持,语法不报错,但无效】

         s_sex CHAR(1) CHECK(s_sex='男' OR s_sex='女'),#检查约束(Mysql无效)
    

    5)primary key :主建约束,同时保证唯一性和非空

         id INT PRIMARY KEY,#主建约束(唯一性,非空)
    

    6)foreign key:外键约束,用于限制两个表的关系,保证从表该字段的值来自于主表相关联的字段的值!

         teacher_id INT REFERENCES teacher(id)   #这是外键,写在列级,Mysql无效
    

    注意

    1. 列级约束
      上面6种约束都可以写,语法都支持,不报错,但外键约束写了mysql无效不起作用

    2. 表级约束
      非空、默认不支持,其他都可以!

      语法:

      其他: 【constraint 约束名】 约束类型(字段名称) ,

      外键: 【constraint 约束名】 约束类型(字段名称) foreign key(字段名称) references 关联表名(其字段名),

    DROP TABLE IF EXISTS students;
    CREATE TABLE students(
    id INT ,
    s_name VARCHAR(10) not null,# 非空约束
    s_sex CHAR(1) default '男',  # 默认约束
    s_seat INT,
    age INT ,
    teacher_id INT , 
     
    #上面是列级约束,下面有表级约束
     
    CONSTRAINT pk PRIMARY KEY(id), #主建约束,pk是起的名,后面一样
    CONSTRAINT uq UNIQUE(s_seat),  #唯一约束
    CONSTRAINT ck CHECK(s_sex='男' OR s_sex='女'), #检查约束
    CONSTRAINT fk_students_teacher FOREIGN KEY(teacher_id) REFERENCES teacher(id)  #外键约束
    );
    

    2、MySQL修改表时添加或删除约束

    即修改表字段的数据类型或约束

    外键删除约束: ALTER TABLE 表名 DROP CONSTRAINT 约束名称

    1. 非空约束
    alter table students modify column s_name varchar(20) not null; # 添加 
    alter table students modify column s_name varchar(20) ;         # 删除 不写约束条件
    
    alter table students modify column age int default 18; #添加
    alter table students modify column age;                #删除
    

    2)默认约束

    3)唯一键约束

    alter table students modify column seat int unique; #添加
    alter table students drop index seat;               #删除
    show index from students;                           #查看唯一约束
    

    4)主键约束

    alter table students modify column id int primary key; #添加
    alter table students drop primary key;                 #删除 约束名称
    

    5)外键约束

    alter table students add foreign key(major_id) references majors(id); #添加
    alter table students drop foreign key fk_students_teacher;         #删除 约束名称
    

    **3、自增长列 **auto_incrementid

    id int primary key auto_increment,
    

    一个表中有且只能有一个自增长列,自增长列一般和主键搭配

    修改表的时候添加自增长列:

    alter table t_indentity modify column id int primary key auto_increment;
    

    删除自增长列:

    alter table t_indentity modify column id int;
    

    原文链接:https://blog.csdn.net/qq_42402854/article/details/84714934

    展开全文
  • MySQL 常见约束和常见数据类型 常见约束 /* 含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性 create table 表名( 字段名 字段类型 约束, 字段名 字段类型 列级约束 表级约束 ) 分类: not ...
  • 常见约束 用于限制表中的数据,为了保证表中的数据的准确性和可靠性 分类 not null :非空,保证该字段不能为空,比如姓名,学号 default:默认,用于保证该字段有默认值,比如性别 primary key:主键,用于保证该...
  • 介绍完数据类型后,接着介绍MySQL中的常见约束、事务以及视图。本文就分别从这三个方面进行介绍。 文章目录一、常见约束1. 创建表时添加约束2. 修改表时添加约束3. 修改表时删除约束二、事务控制语言三、视图1. 视图...
  • mysql常见约束

    千次阅读 2014-08-04 11:40:37
    所谓数据库约束,就是g
  • (一) MySQL入门,问题不大 https://segmentfault.com/a/1190000022799851 (一) 引入约束 (1) 约束出现在哪里? 想要讲解约束,就要知道约束用在哪里,用来干嘛? SQL 语言通过定义一个关系所对应的基本表来完成关系...
  • [CONSTRAINT 约束名] UNIQUE [(字段名)]

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,949
精华内容 13,979
关键字:

mysql常见约束

mysql 订阅