创建表
CREATE TABLE student ( sno INT, sname VARCHAR (20), sbirthday DATE, ssex CHAR(1), class INT );
查看数据库的表结构
- desc
desc tablename; 字段名 数据类型 非空约束 主键 默认值约束 自增长/外键
- show create table
show create table tablename # 会将创建表的语句直接展示出来
CREATE TABLE `feed_barrage_log` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `feed_user_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '投喂者uid', `be_fed_user_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '被投喂者uid', `barrage_id` varchar(100) NOT NULL DEFAULT '' COMMENT '被投喂的弹幕id', `barrage_text` varchar(255) NOT NULL DEFAULT '' COMMENT '被投喂的弹幕内容', `room_id` int(10) NOT NULL DEFAULT '0' COMMENT '投喂弹幕时所在的房间号', `feed_prize_count` int(10) NOT NULL DEFAULT '0' COMMENT '投喂礼物的个数', `feed_prize_type` tinyint(2) NOT NULL DEFAULT '0' COMMENT '投喂礼物的类型, 1: 鱼粮', `is_parrot_plan` tinyint(2) NOT NULL DEFAULT '0' COMMENT '是否为鹦鹉计划用户投喂, 0: 不是, 1: 是', `status` tinyint(2) NOT NULL DEFAULT '0' COMMENT '礼物发放状态, 0: 发放失败, 1: 发放成功', `prize_order_id` varchar(200) NOT NULL DEFAULT '' COMMENT '礼物发放订单id', `create_time` int(10) NOT NULL DEFAULT '0' COMMENT '创建时间', `update_time` int(10) NOT NULL DEFAULT '0' COMMENT '更新时间', `date` int(10) NOT NULL DEFAULT '0' COMMENT '投喂的日期', `ip` varchar(50) NOT NULL DEFAULT '' COMMENT '用户ip', `did` varchar(50) NOT NULL DEFAULT '' COMMENT '用户did', `ct` int(2) NOT NULL DEFAULT '0' COMMENT '客户端类型', `app_version` varchar(10) NOT NULL DEFAULT '' COMMENT '客户端版本', PRIMARY KEY (`id`,`date`), KEY `idx_uid_date` (`feed_user_id`,`be_fed_user_id`,`date`), KEY `idx_feed_uid_date` (`feed_user_id`,`date`), KEY `idx_be_fed_uid_date` (`be_fed_user_id`,`date`) ) ENGINE=InnoDB AUTO_INCREMENT=3928 DEFAULT CHARSET=utf8mb4 COMMENT='弹幕投喂流水表'
约束类型
- 概念
为了保证数据库中的数据的完整性,准确性而设置的一些限制规则;
- 数据的完整性
- 实体完整性:约束记录
- 域完整性:字段数据的完整性
- 参照完整性:约束表和表之间引用关系的完整性
- 自定义完整性:用户自己定义的一些要求
- 主键约束
- 它是数据表中的一个或者多个字段的组合。
- 主键的作用:唯一的标识一行记录;可排序,帮助提高查询效率;
- 设置主键:
- 1.定义表的时候,设置主键;primary key 标记该字段为主键
create table tablename( id int primary key, class_name varchar(10), )engine=innodb;
-
- 2.复合主键设置
create table tablename( id int , class_name varchar(10), primary key(id,class_name) )engine=innodb;
以上两种方式均为建表时候创建好主键;
-
- 3.通过修改表结构方法修改主键
alter table tablename add 字段名 类型 primary key; # 增加主键 alter table tablename modify 字段名 类型 primary key; # 调整主键 add # 增加字段 增加约束 modify # 修改字段的类型或者约束 不能改字段名 change # 可以修改字段名 类型 约束 drop # 删除字段 或者 约束 # 删除主键 alter table tablename drop primary key;
-
- 4.设置主键的注意事项
- 最少性:作为主键的字段,越少越少
- 稳定性:作为主键的字段,数据的变更频率越低越好
- 4.设置主键的注意事项
- 非空约束
- 指的是字段的数据不能为空
- 作用是当被非空约束的字段在插入数据的时候,必须赋值
- 如何设定非空约束
-
- 定义表的时候,在字段名的数据类型后面加上not null
- 变更表的方式追加not null
- 定义表的时候,在字段名的数据类型后面加上not null
alter table tablename modify 字段名 类型 not null # 定义表结构的时候 增加 not null create table tablename( id int not null, class_name varchar(10) not null )engine=innodb;
- 注意事项
- 使用了非空,插入数据的时候一定要赋值
- 非空可以和默认值,唯一约束,检查约束一起组合使用
- 默认值约束
- 可以给字段设置默认值,当插入舒适的时候,如果没有给字段赋值,就会自动使用默认值;
- 设置方法:字段名 数据类型 default 默认值
# 定义表结构的时候 增加 默认值 create table tablename( id int not null, class_name varchar(10) not null, sbirthday date default '2020-01-01' )engine=innodb; # 改表结构方式 alter table tablename modify 字段 类型 default '待设置的默认值';
- 自增长约束
- 被约束的字段,在数据记录增加的时候,在原来最大值的基础上自动加1;
- 语法:字段名 数据类型 auto_increment;
- 注意事项
-
- 一般搭配主键使用
- 每张表只允许一个字段使用这个约束
- 自增长的序列是单独存放的,也就是我们删除最后一条记录,不影响序列
- truncate table 删除数据,这种删除无法恢复;
- 一般搭配主键使用
# 改表结构方式 alter table tablename modify 字段 类型 auto_increment;
- 检查约束
- mysql一般不支持检查约束,设置了可选内容的约束
-
- 给字段设置了检查约束,字段的值只能在指定的范围内挑选;
alter table tablename modify 字段名 enum('男','女'); # 检查约束放置在数据类型中
- 设置方式
字段名 enum('v1','v2',.....) # 只能从指定的数值中任选一个 字段名 set('v1','v2',.....) # set可以多选
- 唯一约束
- 被唯一约束字段,它的值不可重复
- 设置方法:字段名 数据类型 unique
- 注意事项
- unique 使用的时候,字段的业务含义需要符合唯一要求
- unique 不能和默认值约束一起使用
alter table tablename modify 字段名 数据类型 unique;
- 外键约束