MySql 学习之路-高级2

1
目录:
1
2
3
4
5
1.约束
 
2.ALTER TABLE
 
3.VIEW

1.约束

  说明:SQL约束用于规定表中的数据规则,如果存在违反约束的数据行为,行为会被约束终止,约束可以在建表是规定,也可以在建表后规定,通过ALTER TABLE 实现.

  语法:

1
2
3
4
5
6
CREATE TABLE TABLENAME
(
COLUMN_NAME1 DATA_TYPE(SIZE) CONSTRAINT_NAME,
COLUMN_NAME2 DATA_TYPE(SIZE) CONSTRAINT_NAME,
COLUMN_NAME3 DATA_TYPE(SIZE) CONSTRAINT_NAME
);

 约束有如下几种常用:

1
2
3
4
5
NOT NULL                          -- 指示某列不能存储NULL值
UNIQUE                            -- 保证某列的每行必须有唯一值
PRIMARY KEY                       -- 前2个约束的结合,每个表只能有一个PRIMARY KEY 约束   
CHECK                             -- 保证列中的值复合指定的条件
DEFAULT                           -- 规定没有给列赋值时的默认值

针对以上约束,我们来看下具体的应用实例

  实例1:

复制代码
1 CREATE TABLE TABLENAME
2 (
3 ID INT NOT NULL AUTO_INCREMENT,
4 NAME VARCHAR(255) UNIQUE ,
5 AGE INT ,
6 CITY VARCHAR(255) DEFAULT 'CHINA',
7 PRIMARY KEY (ID),
8 CHECK (AGE > 18)
9 );
复制代码

如果给列起名字或者给多个列附加多个约束可以使用下面的方法

  实例2:

复制代码
 1 CREATE TABLE TABLENAME
 2 (
 3 ID INT NOT NULL AUTO_INCREMENT,-- 自动填充此列 从1开始
 4 NAME VARCHAR(255) UNIQUE ,
 5 AGE INT ,
 6 CITY VARCHAR(255) DEFAULT 'CHINA',
 7 PRIMARY KEY (ID),
 8 CHECK (AGE > 18)
 9 CONSTRAINT 别名 约束名 (列1,列2,..)
10 );
复制代码

如果多个列添加UNIQUE约束,第9行代码可以改成如下形式

CONSTRAINT UNIQUE_NAME UNIQUE (AGE,CITY)

如果多个列添加CHECK约束,第9行代码可以改成如下形式

CONSTRAINT CHECK_NAME CHECK (AGE>18 AND CITY = 'CHINA')

我们已经建立表的几个约束,那么如果我们执行如下SQL时会报错

INSERT INTO TABLENAME VALUES(1,'XUECHAO',22,'CH');
INSERT INTO TABLENAME VALUES(2,'XUECHAO',15,'CH');

因为NAME已经添加了UNIQUE约束,AGE添加了CHECK约束

PS:我还是个菜鸟,理解的不是很全面, 我理解的约束就是这样的,如果您有什么不同的理解,可以评论区告诉我,很感谢!

2.ALTER TABLE

  说明:前面我们在建表的时候已经添加了约束,如果我们建表的时候没有添加约束,那么我们可以通过ALTER TABLE 在表后添加约束,下面来看看下面的实例

  实例1:

ALTER TABLE TABLENAME
ADD UNIQUE (ID);
或
ALTER TABLE TABLENAME 
ADD CONSTRAINT UN_NAME UNIQUE (ID , NAME);

添加别的约束也是同样的原理和写法

  说明:ALTER TABLE 能够给表附加约束,还有另外一个用途,向表中添加新字段,删除字段,修改字段数据类型(我知道的就这些 ^_^)

  实例2:

1 ALTER TABLE TABLENAME ADD COLUMN SCORE INT;-- 新增字段SCORE
2 
3 ALTER TABLE TABLENAME MODIFY SCORE VARCHAR(255); -- 修改字段数据类型
4 
5 ALTER TABLE TABLENAME DROP COLUMN SCORE; -- 删除字段
posted @   杨浪  阅读(171)  评论(0)    收藏  举报
编辑推荐:
· SQL Server 2025 中的改进
· 当数据爆炸遇上SQL Server:优化策略全链路解析
· 记录一次线上问题排查:JDK序列化问题
· 微服务之间有哪些调用方式?
· 记一次SQL隐式转换导致精度丢失问题的排查
阅读排行:
· DeepSeek又在节前放大招!
· 分享5款开源、美观的 WinForm UI 控件库
· 领域驱动的事实与谬误 一 DDD 与 MVC
· 从零到一搭建一个前端工具函数库
· 4种插值算法
历史上的今天:
2017-06-27 html实现鼠标悬停变成手型实现方式
2017-06-27 用ul li实现边框重合并附带鼠标经过效果
点击右上角即可分享
微信分享提示