MySql 学习之路-高级2

 

目录:
1.约束

2.ALTER TABLE

3.VIEW

1.约束

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

  语法:

CREATE TABLE TABLENAME
(
COLUMN_NAME1 DATA_TYPE(SIZE) CONSTRAINT_NAME,
COLUMN_NAME2 DATA_TYPE(SIZE) CONSTRAINT_NAME,
COLUMN_NAME3 DATA_TYPE(SIZE) CONSTRAINT_NAME
);

约束有如下几种常用:

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; -- 删除字段

视图再补充吧,有点忙没时间写了。。。。。。。。。。。

原文地址:https://www.cnblogs.com/linuxchao/p/9229710.html

时间: 2024-10-09 08:37:21

MySql 学习之路-高级2的相关文章

mysql学习之路_高级数据操作

关系 将实体与实体的关系,反应到最终数据表的设计上来,将关系分为三种,一对多,多对多,多对多. 所有关系都是表与表之间的关系. 一对一: 一张表的一条记录一定只对应另外一张表的一条记录,反之亦然. 例 Id 姓名 性别 年龄 电话号码 1 张三 男 23 13320848263 一对多 一张表中有一条记录,对应另一张表多条记录但是反过来,另一张表的一条记录只能对应这张表的一条记录. 例母亲与孩子的关系 多对多 一张表中的一条记录对应另外一张表的多条记录,同时另一张表的一条记录对应另外一张表的多条

MySQL学习之路(五)MySQL高级查询

MySQL统计函数 count():统计数量: max():统计最大值: min():统计最小值: avg():统计平均数: sum():统计和: Select count(*) from student; MySQL排序 group by: order by: 默认是升序排序: Select * from student group by sid asc;--升序排序 Select * from student group by sid DESC;--降序排序 Select * from st

MySQL学习笔记_9_MySQL高级操作(上)

 MySQL高级操作(上) 一.MySQL表复制 create table t2 like t1;               #复制表结构,t2可以学习到t1所有的表结构 insert into t2 select * from t1;    #复制表数据,但是这样还是会有缺陷,因为没有考虑到列的对应,因为t1与t2的表结构完全一致,所以此次操作才不会出错! 建议: insert into t3(name) select name from t1; #指定复制的列 二.MySQL索引 1.

MySQL学习之路:多实例无法启动排错

由于我们的服务器会借给我们部分公司使用,但是部分公司有没有运维,都是开发直接操作,导致出现一些问题后直接来找我处理.为此,也学习到很多. 近来,一哥们由于不知道操作什么导致服务器直接挂掉,于是我联系机房启动机器后查看日志,没有发现什么明显的日志,只是有一条watchdog的日志信息.于是又多方搜寻关于watchdog的相关知识.发现的也大致是皮毛而已,也有部分提交一些内核信息是关于watchdog的bug.此处也无法做什么排查的(主要还是我的技术不精).只能推测是开发使用应用程序触发了watch

MySQL学习笔记_10_MySQL高级操作(下)

 MySQL高级操作(下) 五.MySQL预处理语句 1.设置预处理stmt,传递一个数据作为where的判断条件 prepare stmt from "select * from table_name where id > ?"; 2.设置一个变量 set @i = 1; 3.执行预处理语句 execute stmt using @i; 4.删除预处理指令 drop prepare stmt; 六.MySQL事务处理 [注意]MyISAM存储引擎对事务并不支持,应该使用In

mysql学习之路

                Mysql php阶段将数据库分为三个阶 基础阶段: mysql数据库的基本操作(增删改查),以及一些高级操作(视图,触发器,函数,存储过程等),PHP操作没有sql数据库. 优化阶段: 如何提高数据库效率,如索引,分表等. 部署阶段: 如何搭建真实的系统环境,如服务集群,负载均衡. 数据库基础 什么是数据库: 数据库:database ,存储数据的仓库(高效的存储和处理数据库的介质如磁盘.内存) 数据库分类: 1,关系型数据库:(sql型) 2,非关系型数据库(

mysql学习之路_外键

回顾4 连接查询: 连接多张表到一起,不管记录数如何,字段数一定会增加. 分类:内连接,外连接.自然连接,交叉连接, 交叉连接:cross join (笛卡尔积) 内连接:inner join,左右两张表有连接条件匹配(不匹配自动忽略) 外连接:left/right join 主表的一条记录一定会存在匹配保留副表数据,否则置空 自然连接:natural join 自动匹配(相同字段名) PHP操作:mysql Php充当客户端,开启mysql扩展 连接认证:mysql_connect;执行sql

MySQL学习之路(二) MySQL基础操作

进入数据库 use 库名: 创建表结构 语法:create table 库名.表名( 字段名 数据类型 约束, 字段名 数据类型 约束 ) create table text.t_user( id int(10), t_name varchar(10) --最后一行不需要逗号 ) 查看所有表 show tables; 查看表中字段属性 desc t_user; describe t_user; show columns from t_user; 重新命名表名 rename table t_use

MySQL学习之路(四) MySQL数据类型

整数型 tinyint:迷你整形,最多有256中状态:使用一个字节存储: smallint:小整形,最多有6556种状态:使用两个字节存储: mediumint:中整形:使用三个字节存储: int:标准整形:使用四个字节存储: bigint:大整形:使用八个字节存储: 浮点型 float(M,D):单精度:占用四个字节:精度范围在7位左右: double*M,D:双精度:占用八个字节:精度在15位左右: M:代表整数长度,D:代表小数个数: 超出小数长度会自发四舍五入: 日期型 datetime