mysql 数据库 day_02

这篇博客主要介绍了MySQL数据库的基础操作,包括创建数据库、数据表,以及各种数据类型的使用,如字符串、数字和日期类型。还讨论了表字段的字节限制、约束类型如主键、非空和外键,以及默认值设置。此外,提供了练习题和作业,帮助读者巩固所学知识。
摘要由CSDN通过智能技术生成

复习:

1、右键桌面,终端
2、mysql -uroot -p
password:回车
3、show databases; 显示所有数据库
4、create database test2 charset utf8;
创建数据库,指定默认字符编码
5、use test2;
进入数据库
6、退出mysql

exit 或 \q

创建数据表

1、数据类型
2、约束
3、表本身的增删改查
    创建表
    删除表
    修改表结构

查看表

建表语句

create table user(
    id int,
    username varchar(32),
    password varchar(32)
)engine=innodb charset=utf8;

show tables  查看

engine 引擎

Mysql数据库 数据类型

1、字符串
char(指定固定长度) 定长字符串,最多255个字节
varchar(最大长度) 变长字符串,超过出错,65535个字节,一般不超过255
text 65535字节
blob 大数据对象,以字节方式存储数据

2、数字
zerofill 显示时,位数不足,可以补0
tinyint 1字节
smallint 2字节
int 4字节 int(6) 不影响保存的数据范围,只影响查询显示的位数
bigint 8字节
不带符号,添加 unsigned

float       4字节
double  8字节
    可能保存不精确的值

decimal/mumeric
    保存精确浮点数
    需要指定总长度和小数位位数

    decimal(10,2) 八.二

3、日期

date        年月日
time        时分秒
datetime    年月日时分秒  可以保存到9999年      
timestamp   年月日时分秒  可以保存到2038年
        第一个timestamp字段,在行数据更新时,自动修改为系统当前时间
也可以使用 bigint 整数表示时间
    java中时间是用长整型毫秒值表示

毫秒值:1970-1-1 0点开始

表字段总字节量限制为 65535

*varchar 需要额外的两个字节来表示长度
*一个字段如果允许 null 值,需要额外1个字节 

*text 类型 65535 个字节,仅占用表的10个字节额度

约束 5种

*所有的约束保存在 information_schema 库中
table_constraints 表中
*限制字段的取值
*主键、非空、唯一、外键、检查(mysql不支持)
1、主键
*)对一行数据的唯一标识
*)不重复
*)不能为空 null
*)尽量使用业务无关的数据作为主键
*)连续自增整数 auto_increment
*)随机字符串
*)主键会自动添加索引
*)添加主键
*)建表时添加
create table tb1(
id bigint primary key auto_increment,

);
*)修改表添加主键
alter table tb1 add primary key(id);
*)删除主键
alter table tb1 drop primary key;
*)auto_increment
*)查看下一个自增值
show create table tb1\G;
*)一直增加不会退
*)如果在表中手动插入一个更大的主键值,会从这个值继续递增
*)只有主键才能自增,如果删除自增主键约束,要先取消自增再取消
主键约束
*)双主键(不推荐)
两个字段合并作为主键
create table tb1(
id,,,
name,,,
,,,,
primary key(id,name)
);
2、非空
不能取null值
*)添加非空约束
创建表时
create table tb1(
id int primary key,
name varchar(20) not null
);
查看表中的非空约束
desc tb1;
show create table tb1\G
修改字段,添加或删除非空约束
alter table tb1 modify name varchar(32) not null;
alter table tb1 modify name varchar(32) null;

3,唯一约束
    限制字段的值不能重复,但允许多个null值
    *)添加唯一约束
        *)创建表时添加
            create table tb1(
                ,,,
                name varchar(20) unique,
                ,,,             
            );
            create table tb1(
                ,,,
                name,,,
                gender,,,
                ,,,,
                unique key(name,gender)                 
            );  两个字段组合不重复
        *)修改字段,添加唯一约束
            alter table student modify name varchar(20)unique;
            alter table student add unique key(name,gender);
        *)查看唯一约束
            show create table tb1\G;
        *)取消唯一约束
            alter table tb1 drop index 约束名
4、外键
    外键一般引用另一个主键中的值
    *)mysql的innodb引擎 才支持外键,效率低
                myisam引擎不支持外键,效率高

    学生表         联系方式表                
    id name,,       id    stu_id    tel
    01   张三     1   01  45465
    02   李四     2   02  45641
    03   王五     3   03  13215

    *)添加外键约束
        *)创建表时添加
            create table tb2(
                ,,,
                stu_id,,
                ,,,
                foreign key(stu_id) references student(id)              
            );
        *)修改字段添加外键
            alter table tb2
            add foreign key(stu_id) references student(id);
        *)取消外键约束
            alter table tb2 drop foreign key 约束名;
5,检查约束(mysql不支持)
    create table tb1(
        ,,,         
        gender
        age
        ,,,
        check(gender='M' or gender='F'),
        check(age>=16 and age<=60)
    );

==================================================================================

默认值

create table tb_item(
,,,
status tinyint default 0,
,,,
);

商品类别

id name parent_id is_parent sort_order
1 服装 0
2 手机 0
3 电脑 0
4 女装 1
5 笔记本 3
6 台式机 3
7 老人机 2
8 男装 2
9 智能机

练习

1、测试数据类型,以及表的 65535字节量限制
create table tb1(
id int(6), –4字节
money decimal(10,2), –10字节
title varchar(21839) –21839*3+2+1
)engine=innodb charset=utf8;

create table tb6(
    id int(6),      
    title varchar(21939)    
)engine=innodb charset=utf8;

2、测试text类型

drop table tb8;
create table tb8(
    id int(6),      
    title varchar(51939),
    des text    
)engine=innodb charset=utf8;

3、测试主键
create table student(
id bigint primary key auto_increment,
name varchar(20)
);

--插入一行数据
insert into student(name) values('张三');
insert into student(name) values('李四');

--查询
select * from student;

4、手动向自增主键插入更大的值
insert into student(id,name) values(10000,’王五’);
show create table student\G; 查看

5、删除主键约束
–取消自增
alter table student modify id bigint;
–删除主键约束
alter table student drop primary key;

6、学生姓名添加非空约束
drop table if exists student; 如果存在就删除

create table student(
    id bigint unsigned primary key auto_increment,
    name varchar(20) not null,
    gender char(1)
);

desc student; 描述学生表
show create table student;

insert into student(gender) values('m'); 不能只插入性别字段,名字字段是非空    失败
insert into student(name,gender) values('张三那','m');

select * from student;

7、修改学生表添加学号字段,不能重复
alter table student add stu_num int unsigned unique after id;

desc student;
show create table student\G; --查看唯一约束名

use information_schema;
select*from  table_constraints where table_schema='test2';--在约束表中查看

use test2;  

--插入重复学号测试
insert into student(name,stu_num) values('张四','2017001');
insert into student(name,stu_num) values('张四','2017002');
insert into student(name,stu_num) values('张三','2017002');
--删除唯一约束
alter table student drop index stu_num;
--再添加唯一约束
--如果已经有重复数据,不能添加唯一约束
alter table student add unique key(stu_num);

8、外键测试,添加联系方式表,用stu_id引用学生的主键id值
create table contacts(
id bigint unsigned primary key auto_increment,
stu_id bigint,
tel varchar(20),
foreign key(stu_id) references student(id)
);
desc contacts; 查看
show create table contacts\G;

插入数据:   
select * from student;
insert into contacts(stu_id,tel) values(1,'15456');
insert into contacts(stu_id,tel) values(2,'13456');
insert into contacts(stu_id,tel) values(3,'14456');
insert into contacts(stu_id,tel) values(4,'15556');
insert into contacts(stu_id,tel) values(6,'15556');
insert into contacts(stu_id,tel) values(6666,'15556');
删除外键
alter table contacts drop foreign key 约束名;

9、创建 分类表和商品表
–删除数据库 jtds
drop database if exists jtds;
–重新创建数据库 jtds
create database jtds charset utf8;
–进入jtds库
use jtds;
–新建分类表 tb_item_cat
create table tb_item_cat(
id bigint(20) primary key auto_increment comment,
parent_id bigint(20),
name varchar(50),
status tinyint default 1,
sort_order int,
is_parent tinyint default 1,
created datetime,
updated datetime,
foreign key(parent_id) references tb_item_cat(id)
)engine=innodb charset=utf8;
—-上面创建表,不成功

create table tb_item_cat(
    id bigint(20) primary key auto_increment,
    parent_id bigint(20),
    name  varchar(50),
    status tinyint default 1, 
    sort_order  int,
    is_parent tinyint default 1,
    created datetime,
    updated datetime,
    foreign key(parent_id) references tb_item_cat(id)   
)engine=innodb charset=utf8;


新建商品表
create table tb_item(
    id bigint(20) primary key auto_increment comment '商品编号',
    cid bigint(10) not null comment '所属叶子类目',
    brand varchar(50) comment '品牌',
    model varchar(50) comment '型号',
    title varchar(100) comment '商品标题',
    sell_point varchar(500) comment '商品卖点',
    price bigint comment '*100倍,保存整形计算快',
    num int(10) comment '库存数量',
    barcode varchar(30) comment '商品条形码',
    image varchar(500) comment '商品图片',
    status tinyint(4) default 2 comment '商品状态,1-正常,2-下架,3-删除,默认2',
    created datetime comment '创建时间,更新时当前系统时间',
    updated datetime comment '更新时间',
    foreign key(cid) references tb_item_cat(id)
)engine=innodb charset=utf8;

作业:

4.2.2、创建商品描述表(tb_item_desc)
item_id 外键引用商品主键

create table tb_item_desc(
    item_id bigint(20) primary key comment '商品编号',--没有主键自增
    item_desc text comment '商品描述,Json格式',
    created datetime comment '创建时间',
    updated datetime comment '更新时间',
    foreign key(item_id) references tb_item(id)
)engine=innodb charset=utf8;

4.2.1、创建商品规格参数表(tb_item_param)
item_cat_id分类id引用分类表主键

create table tb_item_param(
    id bigint(20) primary key auto_increment comment '自增编号',
    Item_cat_id bigint(20) not null comment '商品分类id',
    param_data text comment '商品参数,Json格式',
    created datetime comment '创建时间',
    updated datetime comment '更新时间',
    foreign key(item_cat_id) references tb_item_cat(id)
)engine=innodb charset=utf8;

4.2.1、创建用户表(tb_user)

create table tb_user(
    id bigint(20)  primary key auto_increment comment'用户编号',
    username varchar(50) unique not null comment'用户名',
    password varchar(32) not null comment'密码加密存储',
    phone varchar(20) unique comment'注册手机号',
    email varchar(50) unique comment'注册邮箱',
    created datetime comment'创建时间'          
)engine=innodb charset=utf8;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值