MySQL 内置约束与函数 第二节

MySQL 内置约束和函数

1.表约束

在数据库中为了保证数据库插入时按照指定规则插入,引入表约束,常见表约束有

主键约束primar key(不允许为空,不允许重复)如果是整数类型一般定义主键自动增长auto_increment,一般通过可视化连接工具添加

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(10),
  `password` char(10),
  PRIMARY KEY (`id`)
)

唯一约束,也叫唯一索引,用于设置该字段不可重复

ALTER TABLE `user`.`user` ADD UNIQUE INDEX index_name(`name`);

非空约束not null 用于指定该字段不能为空一般在创表时指定或可视化连接工具添加

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(10) NOT NULL,
  `password` char(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

4.外键约束,在创建外键约束时一定要保证两个表的数据库引擎相同且不能为 MYISAM,一般通过可视化连接工具添加。

ALTER TABLE `client` ADD CONSTRAINT `emp_id_fk` FOREIGN KEY (`emp_id`) REFERENCES `emp`(`id`);

一般创表命令如下

CREATE TABLE mytb(
    id INT NOT NULL AUTO_INCREMENT,
    NAME VARCHAR(100) NOT NULL,
    pwd VARCHAR(40) NOT NULL,
    birth DATE,
    PRIMARY KEY(id)
    )ENGINE=INNODB DEFAULT CHARSET=utf8;
如果你不想字段为null可以设置字段的属性为not null,在操作数据库时如果输入该字段的数据为null,就会报错

AUTO_INCREMENT 定义列为自增的属性,一般用于主键,每次插入数据后数值会自动加1.

PRIMARY KEY关键字用于定义列为主键。可以使用多列来定义主键称为复合主键,列键以逗号分割

ENGINE设置存储引擎,CHARSET设置编码

!注意:utf-8与utf8mb4的区别在于utf8mb4兼容图标字体。如果引擎和字符编码在安装时设置好的则在创表时可以不指定。

2.数据类型

mysql中为了满足各种业务需要,提供很多数据类型,常用类型如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7mndKxL8-1635783879594)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211031191909600.png)]

!注意
1.DECIMAL(P,D) 的语法中:
P 是表示有效数字数的精度。
P 范围为 165D 是表示小数点后的位数。 
D 的范围是 0~30MySQL 要求 D 小于或等于(<=)P。
 如:DECIMAL(6,2)中最多可以存储 6 位数字,小数位数为 2 位;因此,列的范围是从-9999.999999.992.char(n)varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,
    	比如 CHAR(30) 就可以存储 30 个字符。
 char 是一种定长字符串。它一旦声明后无论存储的值是否达到该长度,都占有相应的字节长度。
 varchar 是一种变长字符串,它的长度由存储的内容决定,为存满的时以实际存储内容为主。
 
3.BLOB 是一个二进制大对象,可以容纳可变数量的二进制数据。
   有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
    
4.TEXT 同样也有 4 种类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。
   它们的区别也是可存储的最大长度不同。具体使用哪种类型可根据实际情况选择。
1.创建一张表 system_user 包含 int id 自增主键,char(10) name 不为空,varchar(255) password 不为空且默认值为 123456,blob image 图片,text information 介绍,tinyint sex 性别,decimal(10,2) money 资产,DATETIME birthdays 生日,并使用 SQLYog 往表中插入 3 条测试数据。
2.创建一张表 system_classroom 包含 int id 不为空且自增,varchar(50) name 不为空,并往表中插入三个班级:JAVA,UI,新媒体
3.在 system_user 中加入字段 classroom_id,并添加外键指向班级表中的 id,同时为所有的 system_user 分配自己的班级。

参考答案:
#1、创建一张表 system_user 包含 int id,char(10) name, varchar (255) password 不为空且默认值 123456,blob image、text information
#tinyint sex,decimal(10,2) money. id 不为空且自增。并插入3条数据
create table system_user(
id int primary key not null auto_increment comment '编号',
name char(10) not null comment '姓名',
password varchar(255) not null default '123456' comment '密码',
image blob comment '头像',
information text comment '简历',
sex tinyint comment '性别',
money decimal(10,2) comment '余额'
)
#2、创建一张表 system_classroom 包含int id, varchar(50) name 不为空.并插入三个班级 JVAV ,UI ,新媒体
create table system_classroom(
id int primary key not null  comment '班级编号',
name varchar(50) comment '班级名称'
)
#3、在system_user中加入 system_user ,并添加外键指向班级表中的id,同时为system_user分配自己的班级
alter table system_user add classroom_id int after id;
alter table system_user add constraint id foreign key (classroom_id) references system_classroom(id)

3.视图

视图其实就是一张虚拟表,一张从别的表中导出的一张不完整或经过运算的虚拟表。

视图有什么用,当我们经常查询一个表中的某几个字段的时候,我们可以把这几个字段单独导出一个视图,以后查询的时候直接可以 select *,在数据库中只存放了视图的定义,没有存放视图的数据,视图是依赖原来表中的数据的,原表中的数据一旦发生变化,视图查询出的结果也会跟着变化。下面进行创建一个视图。

案例:给语文老师创建一个视图

CREATE VIEW vi_chinese_user 
AS SELECT id,`name`,`chinese` FROM `student`;

视图在查询时和普通表查询语句完全相同。

DROP VIEW `vi_chinese_user`;

4.触发器

触发器是由事件来触发某个操作,这些事件包括,ins

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抹泪的知更鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值