【任务5】注册与登录:初步完成注册相关功能
1、创建一个 register.hmtl 文件。
2、写一个 Register 接口,用于处理用户注册。
3、新建一个数据库,我们的数据库名字为 from_zeroto_expert
3、设计一个 user 表,,请把你的建表语句在下面打卡。
注意,建表语句必须自己写,不能复制粘贴哈,做项目如果只看不写=没做哦。
本问题对应的项目链接:从0设计一个web项目
PS:每次在最后,都要给出你的GitHub链接哦,方便我打开
1、创建一个 register.hmtl 文件。
2、写一个 Register 接口,用于处理用户注册。
3、新建一个数据库,我们的数据库名字为 from_zeroto_expert
3、设计一个 user 表,,请把你的建表语句在下面打卡。
注意,建表语句必须自己写,不能复制粘贴哈,做项目如果只看不写=没做哦。
本问题对应的项目链接:从0设计一个web项目
PS:每次在最后,都要给出你的GitHub链接哦,方便我打开
共以下 17 个回答
CREATE TABLE
user(idint NOT NULL AUTO_INCREMENT,usernamevarchar(20) NOT NULL,passwordint NOT NULL,saltvarchar(5) NOT NULL,PRIMARY KEY (
id)) ENGINE=InnoDB
提交地址:https://github.com/CurryisCoat/community/tree/dev
create table
tb_user(idINT(11) not null auto_increment comment “主键”,namevarchar(100) not null default “”,passwordvarchar(100) not null default “”, primary key(id))engine=InnoDB auto_increment=1 ;https://github.com/Rajahn/FromZerotoExpert01
建表语句
create table if not exists usr
(
id int primary key auto_increment
username varchar(20) not null unique,
password varchar(32) not null,
email varchar(32) unique
);
注册建表仅保存用户名和密码这些主要信息
之后用户信息重新建表,分表储存便于之后查询
GitHub:https://github.com/ZLPYYDS/FromZerotoExpert/tree/dev
CREATE TABLE IF NOT EXISTS
user(user_id INT PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR(8) NOT NULL UNIQUE,
user_pwd CHAR(32) NOT NULL,
user_phone CHAR(11),
user_email VARCHAR(16));
本来创建的表有用户详细信息,后来参考评论区用户详细信息另存的想法,仅保留下来了有关用户登录的重要信息。
GitHub:https://github.com/lei342345795/FromZerotoExpert
create table user(
id int primary key auto_increment,
username varchar(30) unique not null,
password varchar(16) not null,
age int,
sex varchar(5)
);
GitHub链接:https://github.com/Egofir/ferry
建表语句
用户名不能重复
email字段未使用,未来可以拓展找回密码,重置密码功能
github仓库:https://github.com/yijixin66/FromZerotoExpert
服务器:http://8.142.128.17/FromZerotoExpert/register.html
1.建表语句
CREATE TABLE USER(
uid int PRIMARY KEY AUTO_INCREMENT,
username varchar(16) UNIQUE NOT NULL,
password varchar(32) NOT NULL
);
2.github: (https://github.com/Guat0305/FromZerotoExpert/tree/dev)
1.建表语句
create table `users`(
`id` int(11) not null auto_increment comment '主键',
`nick_name` varchar(32) not null default '' comment '昵称',
`avatar` varchar(255) not null default '' comment '头像',
`email` varchar(32) not null default '' comment '邮箱',
`phone` varchar(32) not null default '' comment '电话',
`role` int(4) not null default 1 comment '角色',
primary key (`id`) ,
unique index `uni_nick_name` (`nick_name`) ,
) engine = innodb;
create table `user_auths`
(
`id` int(11) not null auto_increment comment '主键',
`uid` int(11) not null comment '关联本站用户id',
`identify_type` int(4) not null default 0 comment '登陆类型(手机号|邮箱|用户名)第三方(微信|qq)',
`identifier` varchar(255) not null comment '标识(手机号 邮箱 用户名或第三方应用的唯一标识)',
`credential` varchar(255) not null comment '密码凭证(站内保存密码,站外不保存或保存token)',
`salt` char(4) not null comment '加盐',
primary key (`id`) using btree,
unique index `uni_identifier` (`identifier`)
) engine = innodb;
2.Github地址
https://github.com/lucca-suen/FromZerotoExpert/tree/v2.1
建表语句:create table tbl_user
(
id int auto_increment
primary key,
username varchar(10) null,
password varchar(20) null,
sex char null,
age tinyint null,
constraint tbl_user_username_uindex
unique (username)
);
Github:https://github.com/Caesar-NoBug/FromZerotoExpert/tree/day4
学完Spring Boot之后重新搭建了一下项目和更新了github的地址
https://github.com/Runninginsilence1/FromZero2Expert/tree/dev
关于表的设计
虽然这次任务的重点是表的设计…但是我思考了很久,最终还是觉得,至少对于任务要求的业务来说:用户名长度或者密码的设计应该由后端的代码控制,表的设计应该是偏向更加底层的需求才对,所以就直接使用最普通的表;关于用户信息的问题,我觉得用多表查询实现比较好,登录就用登录表,不要太多无用的信息。
用户信息的验证
我有几种思路,但是思来想去都觉得比较简单,而且代码水平不够实现困难,所以决定先实现最基本的功能再说;
之前几次打卡都是用原生的Servlet做的,这次主要过了一遍ssm再重新来做
mysql 版本5.7
建表语句
关于对表设计的思考,你的思路是可行的,就是简单一点,放和登录相关的一些字段,另外就是,由于密码会加密,防止泄漏后被暴力破解,一般长度都会比较长哦。
可以先看看一些项目案例哦,没有接触过案例会比较难滴,接触一下对应案例,再来实现勒
数据库建表语句:
CREATE TABLE user (
id int AUTO_INCREMENT PRIMARY KEY COMMENT ‘用户id’,
username varchar(15) not null UNIQUE COMMENT ‘账号’,
password VARCHAR(15) not null DEFAULT(‘123′)COMMENT’密码’,
user_nickname VARCHAR(10) not null DEFAULT(‘666′) COMMENT’用户昵称’
)ENGINE=INNODB default charset=utf8mb4 ;
github:https://github.com/Haiyang-coder/FromZerotoExpert/tree/dev
其实用户的基本信息肯定不只是这么简单,其他信息也需要另一个表和这个表链接,不过我水平目前做起来有点慢,先完成最基本的任务,后面会重构和慢慢完善。
这样说吧,能完成 最基本 的,就合格了哦(对于没有做过一两个项目经验的人来说),对于做过一两个项目经验的人来说,那就是考验它是不是只跟着视频做而不思考了。
所以呢,我觉得你完成最基本的就行,后面再来看看自己曾经做的,以及其他人提供的思考。
建表语句:
CREATE TABLE
user(user_id INT NOT NULL AUTO_INCREMENT COMMENT “主键”,
user_name VARCHAR(32) NOT NULL COMMENT “用户昵称”,
user_account VARCHAR(16) NOT NULL COMMENT “用户账号”,
user_password VARCHAR(16) NOT NULL COMMENT “用户密码”,
user_email VARCHAR(32) NOT NULL COMMENT “用户邮箱”,
PRIMARY KEY(user_id),
UNIQUE KEY
user_name_key(user_name),UNIQUE KEY
user_account_key(user_account))ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT=”用户表”;
因为之前了解过mysql的索引机制,就总结了下
1. 表中主键字段设计为自增还是不自增?
因为mysql中默认使用Innodb存储引擎,mysql建立主键索引默认为聚簇索引,而Innodb存储引擎创建的聚簇索引默认使用B+ Tree索引,B+ Tree索引是用B+树数据结构实现的。B+树的叶子节点存放完整的数据记录,而其它节点只存放主键值。B+是是按索引值(主键值)顺序构建的,这样可以提供查询速度,支持范围查询,因为B+树所有的叶子节点构成一个双向链表。当使用自增主键时,那每次新插入的数据就按顺序放在当前索引节点的位置,不需要移动数据,当页面被写满后,会自动开辟出一个新的页面。而使用非自增主键,这时每次插入数据的主键值是随机的,这条数据可能会插入到当前数据页的中间位置,这时就需要移动其它原有数据的位置,甚至会造成当前数据页的数据移动到其它数据页,称为页分裂。页分裂还可能会造成大量的内存碎片,使索引结构不紧凑,影响索引查询的速度。所以从索引优化的角度来看,主键字段应该设计为自增的。
2.应该在哪些字段上建立索引?不应该在哪些字段上建立索引?
索引的存在是为了帮助提高查询速度。但建立索引需要花费时间和占用空间,后期还需要动态维护索引。索引要建立合适的索引。
应该建立索引的字段:
不应该建立索引的字段:
github仓库地址:https://github.com/shuaishuaixi03/FromZerotoExpert/tree/dev
总结的很到位666
建表语句:
create table
user(idbigint auto_increment not null,usernamevarchar(50) not null default(NULL),passwordchar(32) not null default(NULL),emailvarchar(50) default(NULL),commentvarchar(50) default(NULL),primary key (
id),unique key
username_unique(username)) engine=innodb default charset=utf8mb4 comment=’用户’;
服务器链接:http://124.223.184.187:8088/FromZerotoExpert
Github仓库链接:https://github.com/jiangyklala/FromZerotoExpert/tree/dev
CREATE TABLE
user(idint(64) NOT NULL AUTO_INCREMENT COMMENT ‘用户id’,usernamevarchar(32) NOT NULL DEFAULT ” COMMENT ‘用户名’,passwordvarchar(50) NOT NULL COMMENT ‘用户密码’,PRIMARY KEY (
id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’用户表 ‘;
INSERT into user VALUES(1,”zzx”,”123″);
设计登录接口,主要就是主键ID,用户名,密码,之后就是存储引擎的选择,默认是innoDB,这种存储引擎都是讲数据存储在磁盘上,了解了一下为什么选innodb,主要和表的设计有关,还有就是采用的底层的数据结构是B+树,B+树可以看成是B树的优化,主要就是B+树的非叶子节点不存储数据,只存储键值,这样的话就可以存储更多键值,使得树的高度边低,查询的效率也会提升。
Github:https://github.com/zzxjava/FromZerotoExpert/tree/dev
建表语句:
DROP TABLE IF EXISTS fromzerotoexpert_user;
CREATE TABLE
fromzerotoexpert_user(idINT(64) NOT NULL AUTO_INCREMENT COMMENT ‘用户id’,usernameVARCHAR(255) NOT NULL COMMENT ‘用户名’,passwordVARCHAR(255) NOT NULL COMMENT ‘用户密码’,user_emailVARCHAR(255) NOT NULL DEFAULT ” COMMENT ‘用户邮箱’,user_roleint(4) NOT NULL DEFAULT ‘1’ COMMENT ‘用户角色,0为管理员,1为普通用户’,PRIMARY KEY (
id))ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
github路径:https://github.com/HenrilineCC/FromZerotoExpert/tree/dev
之前跟着视频做的项目,完全看着视频照抄即可,这次项目自己来搭建根据印象里将项目各个部分分层后感受到了有些地方确实分模块之后的方便和逻辑上的严谨,对整体模块也有更加清晰的认知。数据库对索引还不是了解很深所以没有加进去,等后续仔细学了之后再来重新设计。没有自己写过前端的对接,所以卡壳了一会。
建表语句:
DROP TABLE IF EXISTS user;
CREATE TABLE user(
id INT PRIMARY KEY AUTO_INCREMENT,
username varchar(255) DEFAULT(NULL),
password varchar(255) DEFAULT(NULL),
email varchar(255) DEFAULT(NULL),
salt varchar(255) DEFAULT(NULL),
activeStatus INT DEFAULT(0)
)ENGINE=INNODB;
gitHub路径:https://github.com/Second6s9/FromZerotoExpert/tree/dev
gitHub防覆盖路径:https://github.com/Second6s9/FromZerotoExpert/tree/day05
说明:本次建表只设计了六个字段,并没有把年龄、性别等详细信息加入在表中,原因有二,一是觉得如果把所有信息都写在一个表中,会降低查询性能,因此后续可能把更详细的信息拆分成另外的表比如student表,里面记录了用户更详细的信息,然后用外键链接。二是前端页面只提供了三个字段的表单,一些用户的信息也不好预填写,所以干脆设计成一个简单的表,里面只记录了一些必要的信息,等到用户填写详细信息的数据时,再对应详细信息的表。另外,对于索引的知识我了解的并不是很多,所以这里都没有加,还需要进一步学习。
服务器地址:http://39.101.66.57:8080/FromZerotoExpert/register
很棒,事实上,在以前我那个部门时,除了有一个 user 表以外,还有一个 user_details 表,记录用户的详细信息。user表则记录一些用的比较多的基本信息 + 记录一些外键。
嗯嗯,谢谢帅弟哥点拨,我也是学习了一些别人做的项目,然后自己做的时候照猫画虎似的设计,也不知道对错,总之学习的路还很长,哈哈。
可以滴,总之就是 做项目,思考 很重要,不管对错都行,看到就会给大家意见滴,每个模块弄完会进行总结之类的,只有你们思考了,才能知道我说的东西,不然就会觉得 理所当然。
加油!
建立表的语句:
CREATE TABLE
User(usernamevarchar(25) COLLATE utf8_bin DEFAULT NULL,passwordvarchar(25) COLLATE utf8_bin DEFAULT NULL,UNIQUE KEY
name(username)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
[gitHub地址:] (https://github.com/BigDeann/FromZerotoExpert/tree/master)
这次足足搞了两周才完成任务,这次任务学习了黑马的ssm课程,知道了哪些东西是用来做什么的。还真正的学会了使用终端方式提交代码至gitHub。不过这次的任务依然是照猫画虎跟着别人的文章写的,咱们就是说只能勤能补拙!