ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

lyt经典版MySQL基础——常见约束

2020-07-28 15:03:55  阅读:296  来源: 互联网

标签:lyt INT MySQL 约束 stuinfo KEY 经典 TABLE id


  1 #常见约束
  2 /*
  3 含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
  4 
  5 分类:六大约束
  6     NOT NULL:非空,用于保证该字段的值不能为空
  7     比如姓名、学号等
  8     DEFAULT:默认,用于保证该字段有默认值
  9     比如性别
 10     PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
 11     比如学号、员工编号等
 12     UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
 13     比如座位号
 14     CHECK:检查约束【mysql中不支持】
 15     比如年龄、性别
 16     FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于
 17     主表的关联列的值
 18         在从表添加外键约束,用于引用主表中某列的值
 19     比如学生表的专业编号,员工表的部门编号,员工表的工种编号
 20 
 21 添加约束的时机:
 22     1.创建表时
 23     2.修改表时
 24     
 25 约束的添加分类:
 26     列级约束:
 27         六大约束语法上都支持,但外键约束没有效果
 28     表级约束:
 29         除了非空、默认,其他的都支持
 30         
 31 主键和唯一的大对比:
 32         保证唯一性    是否允许为空    一个表中可以有多少个    是否允许组合
 33     主键    √        x        至多有1个        √,但不推荐
 34     唯一    √        √        可以有多个        √,但不推荐
 35 外键:
 36     1、要求在从表设置外键关系
 37     2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
 38     3、主表的关联列必须是一个key(一般是主键或唯一键)
 39     4、插入数据时,先插入主表,再插入从表
 40     删除数据时,先删除从表,再删除主表
 41     
 42     insert into major values(1,'java');
 43     insert into major values(2,'h5');
 44     insert into stuinfo values(1,'john','男',null,19,1,1);
 45     insert into stuinfo values(2,'john','男',null,19,2,2);
 46 */
 47 
 48 CREATE TABLE 表名(
 49     字段名 字段类型 列级约束,
 50     字段名 字段类型,
 51     表级约束
 52 )
 53 
 54 #一、创建表时添加约束
 55 #1.添加列级约束
 56 /*
 57 语法:
 58 直接在字段名和类型后面追加 约束类型即可。
 59 只支持:默认、非空、主键、唯一
 60 */
 61 CREATE DATABASE students;
 62 USE students;
 63 CREATE TABLE stuinfo(
 64     id INT PRIMARY KEY,#主键
 65     stuName VARCHAR(20) NOT NULL,#非空
 66     gender CHAR(1) CHECK(gender='男' OR gender='女'),#检查约束
 67     seat INT UNIQUE,#唯一
 68     age INT DEFAULT 18,#默认约束    
 69     majorId INT REFERENCES major(id)#外键
 70 );
 71 
 72 DROP TABLE IF EXISTS major;
 73 CREATE TABLE major(
 74     id INT UNIQUE,
 75     majorName VARCHAR(20)
 76 );
 77 DESC stuinfo;
 78 #查看stuinfo表中所有的索引,包括主键、外键、唯一
 79 SHOW INDEX FROM stuinfo;
 80 
 81 #2.添加表级约束
 82 /*
 83 语法:在各个字段的最下面
 84 【constraint 约束名】 约束类型(字段名)
 85 */
 86 DROP TABLE IF EXISTS stuinfo;
 87 CREATE TABLE stuinfo(
 88     id INT,
 89     stuname VARCHAR(20),
 90     gender CHAR(1),
 91     seat INT,
 92     age INT,
 93     majorid INT,
 94     
 95     CONSTRAINT pk PRIMARY KEY(id),#主键
 96     CONSTRAINT uq UNIQUE(seat),#唯一
 97     CONSTRAINT ck CHECK(gender='男' OR gender='女'),#检查
 98     CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键
 99 );
100 
101 DROP TABLE IF EXISTS stuinfo;
102 CREATE TABLE stuinfo(
103     id INT,
104     stuname VARCHAR(20),
105     gender CHAR(1),
106     seat INT,
107     age INT,
108     majorid INT,
109     seat2 INT,
110     
111     PRIMARY KEY(id,stuname),#主键
112     UNIQUE(seat),#唯一键
113     CHECK(gender='男' OR gender='女'),#检查
114     FOREIGN KEY(majorid) REFERENCES major(id)#外键
115 );
116 SHOW INDEX FROM stuinfo;
117 
118 #通用的写法:
119 CREATE TABLE IF NOT EXISTS stuinfo(
120     id INT PRIMARY KEY,
121     stuname VARCHAR(20) NOT NULL UNIQUE,
122     sex CHAR(1),
123     age INT DEFAULT 18,
124     seat INT UNIQUE,
125     majorid INT,
126     CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
127 );
128 
129 #二、修改表时添加约束
130 /*
131 1、添加列级约束
132 alter table 表名 modify column 字段名 字段类型 新约束;
133 
134 2、添加表级约束
135 alter table 表名 add 【constraint 约束名】 约束类型(字段名) 【外键的引用】;
136 */
137 DROP TABLE IF EXISTS stuinfo;
138 CREATE TABLE stuinfo(
139     id INT,
140     stuname VARCHAR(20),
141     gender CHAR(1),
142     seat INT,
143     age INT,
144     majorid INT,
145     seat2 INT
146 );
147 SHOW INDEX FROM stuinfo;
148 DESC stuinfo;
149 #1.添加非空约束
150 ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
151 #2.添加默认约束
152 ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
153 #3.添加主键
154 #(1)列级约束
155 ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
156 #(2)表级约束
157 ALTER TABLE stuinfo ADD PRIMARY KEY(id);
158 
159 #4.添加唯一
160 #(1)列级约束
161 ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
162 #(2)表级约束
163 ALTER TABLE stuinfo ADD UNIQUE(seat);
164 
165 #5.添加外键
166 ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id);
167 ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);
168 
169 #三、修改表时删除约束
170 #1.删除非空约束
171 ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
172 
173 #2.删除默认约束
174 ALTER TABLE stuinfo MODIFY COLUMN age INT;
175 
176 #3.删除主键
177 ALTER TABLE stuinfo DROP PRIMARY KEY;
178 
179 #4.删除唯一
180 ALTER TABLE stuinfo DROP INDEX seat;
181 
182 #5.删除外键
183 ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
184 DESC stuinfo;
185 SHOW INDEX FROM stuinfo;

 

标签:lyt,INT,MySQL,约束,stuinfo,KEY,经典,TABLE,id
来源: https://www.cnblogs.com/yanwuliu/p/13391125.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有