Day7 SQL

终於要进入到我熟悉的後端了,在Day5安装XAMPP时有勾选了PHP、MySQL、phpMyAdmin,今天要介绍的是一套专门管理资料的程序语言,SQL专门负责资料的新增、修改、删除。

常见的关联式资料库有MySQL及PostgreSQL,phpMyAdmin则是一套由PHP构成的Web-Base资料库管理工具,这时可以使用UI操作来管理资料,也可以使用指令的方式,为了方便衔接後续的文章以及打指令看起来比较厉害所以以下示范都用指令,今天出门前忘记把有装XAMPP环境的电脑开机了,希望晚上回家有空可以补上操作画面。

假设一下今天要做的案例,我今天想要做一个点名系统,那主要管理的对象就会是人、出勤资料,那首先要做的事情就是建立一张表并且定义格式。

人的部分我会需要知道注册顺序、属於自己的序号、使用者名称、电话、建立时间、最後更新时间

新增使用者表(注1)

CREATE TABLE members(
	id INT PRIMARY KEY,
	member_id uuid,
	name varchar(20),
	phone_number varchar(13),
	created_at timestamp,
	updated_at timestamp
)

出勤的部分需要顺序、出勤独立序号、使用者独立序号、建立时间、最後更新时间

新增出勤表(注2)

CREATE TABLE attendances(
	id INT PRIMARY KEY,
	attendances_id uuid,
	member_id uuid,
	created_at timestamp,
	updated_at timestamp
)

移除出勤表

DROP TABLE attendances

新增一笔使用者资料

INSERT INTO members
(id, member_id, name, phone_number, created_at, updated_at)
VALUES (1,'92a1c094-4af7-4e9c-9a55-0cd1be3e86ae', 'cow', '0911111111', '2021-08-08 08:08:08', '2021-08-08 08:08:08')

一次新增多笔使用者资料

INSERT INTO members
VALUES (2,'92a1c094-4af7-4e9c-9a55-0cd1be3e86af', 'cow2', '0911111112', '2021-08-08 08:08:08', '2021-08-08 08:08:08'),
(3,'92a1c094-4af7-4e9c-9a55-0cd1be3e86ae', 'cow3', '0911111113', '2021-08-08 08:08:08', '2021-08-08 08:08:08'),
(4,'92a1c094-4af7-4e9c-9a55-0cd1be3e86aa', 'cow4', '0911111114', '2021-08-08 08:08:08', '2021-08-08 08:08:08')

新增一笔出勤资料

INSERT INTO attendances
(Id, attendances_id, member_id, created_at, updated_at)
VALUES(1, ‘92a1c094-4af7-4e9c-9a55-0cd1be3e86ab’, ‘92a1c094-4af7-4e9c-9a55-0cd1be3e86ac’, '2021-08-08 09:09:09’, '2021-08-08 09:09:09’)

取得所有使用者资料并且依照id排序 (注3)

SELECT * 
FROM members
ORDER BY id DESC

将名为cow的使用者改名为very cow (注4)

UPDATE members
SET name = very cow
WHERE name = cow

移除一笔使用者资料 (注5)

DELETE FROM members
WHERE name = 'cow4'

取得一笔某一使用者的资料及全部出勤资料 (注6)

SELECT members.member_id, members."name", members.phone_number, attendances.created_at, attendances.updated_at
FROM members
INNER JOIN attendances
ON members.member_id = attendances.member_id

注1:
PRIMARY KEY每张表只会有一个栏位是主键,通常会设定为最常用来查询的栏位
字串的栏位内建是储存255个字,为了避免浪费空间能设定储存字数是最好的

注2:
在出勤表里面记了一个member_id是为了让使用者表及出勤表有办法连结在一起

注3:
没事不要用*进行全表搜寻,负责管理资料库的人会讨厌你
ORDER BY有分ASC(正排序)及DESC(倒排序)

注4:
修改资料时条件一定要下清楚,不然全公司的人都会被改名为very cow

注5:
删除资料时更要注意,资料删除下去就救不回来了,如果公司资料被删除,存款一定也会被老板删除

注6:
这边讲到了注2的让两张表连结在一起的JOIN指令,JOIN的种类也有很多可以再慢慢摸索

今天只有介绍最基本的操作,这边稍微再提几个资料库的关键字:
1.有关联式资料库就有非关连式资料库(NoSQL)
2.关联式资料库的正规化很重要
3.关联式资料库的索引(Index)很重要

今天的资料库介绍就到这边结束了,谢谢观看的各位,请记得按赞分享开启小铃铛,你的支持会让按赞数+1。

----------------------------------我是更正分隔线----------------------------------

1.id型别可以加上 AUTO_INCREMENT,这样输入资料时系统会自动帮忙+1比较聪明
2.MySQL并没有uuid型别,上方有用到uuid型别的皆须更改为varchar(36),原因是因为uuid型别固定是36个字元
3.timestamp型别需加入NOT NULL DEFAULT NOW(),因打文章时使用的是PostgreSQL无法测试,在此更正
4.新增 attendances 表时 attendance_id 为单数不是 attendances_id
5.如下图所示,启用phpadmin的方式为 url 打上 127.0.0.1/phpadmin即可进入服务,进入後选取左边新增来增加资料库https://ithelp.ithome.com.tw/upload/images/20210907/20115048dQKRLja7YN.jpg
6.於1的地方输入资料库名称、2的地方选取utf8_general_ci,此参数与储存文字时有关,如果选错可能会造成中文字无法正确储存,但这部分我并没有深入研究https://ithelp.ithome.com.tw/upload/images/20210907/20115048V1MU0L5Keh.jpg
7.时间可以用NOW()函数、uuid可以用uuid()函数创建
8.选取上方SQL後可直接下指令操作资料库,於1的地方注意不要跑错资料库,2的地方送出指令https://ithelp.ithome.com.tw/upload/images/20210907/20115048HL3hN2jnir.jpg
9.将SQL全部确认是否正确後整理於下方可直接使用

CREATE TABLE members(
	id INT PRIMARY KEY AUTO_INCREMENT,
	member_id varchar(36),
	name varchar(20),
	phone_number varchar(14),
	created_at timestamp NOT NULL DEFAULT NOW(),
	updated_at timestamp NOT NULL DEFAULT NOW()
)
CREATE TABLE attendances(
	id INT PRIMARY KEY AUTO_INCREMENT,
	attendance_id varchar(36),
	member_id varchar(36),
	created_at timestamp NOT NULL DEFAULT NOW(),
	updated_at timestamp NOT NULL DEFAULT NOW()
)
DROP TABLE attendances
INSERT INTO members
(member_id, name, phone_number, created_at, updated_at)
VALUES (uuid(), 'cow', '0911111111', NOW(), NOW())
INSERT INTO members
(member_id, name, phone_number, created_at, updated_at)
VALUES(uuid(), 'cow2', '0911111112', NOW(), NOW()),
(uuid(), 'cow3', '0911111113', NOW(), NOW()),
(uuid(), 'cow4', '0911111114', NOW(), NOW())
INSERT INTO attendances 
(attendance_id, member_id, created_at, updated_at)
VALUES(uuid(), (SELECT member_id FROM members WHERE name='cow1'), NOW(), NOW())
SELECT * 
FROM members
ORDER BY id DESC
UPDATE members
SET name = 'very cow'
WHERE name = 'cow1'
DELETE FROM members
WHERE name = 'cow4'
SELECT members.member_id,members.name,members.phone_number,attendances.created_at,attendances.updated_at
FROM members
INNER JOIN attendances

<<:  More About Textures

>>:  Day07,搭配gitlab-ci执行image auto build

每秒几十万上下 - 1分K 当冲策略是否有搞头 ?!

最近股市只有一个字 怕.jpg 今天研究了大多的回测策略,大多都是以日计算,想想可不可以用 1分K ...

Day 26 | 共享 MobX store with get_it

还记得我们很早之前说过Flutter有一个问题就是嵌套太多层时我们要从下层拿到上层的东西时会变得十分...

爬虫怎麽爬 从零开始的爬虫自学 DAY14 python条件运算式

前言 各位早安,书接上回我们练习了条件判断语法 if else elif 的用法,今天我们要来介绍它...

23 | 【进阶教学】了解 WordPress「清单检视 List View」功能

由於 WordPress 区块编辑器 已经推出了一段时间,不过部分新手在操作时发现不好上手,尤其在...

Spring Boot定时任务排程器(DAY13)

我: 哇~ 同学你有好多资源是怎麽来的啊? 同学: 你猜猜看,猜错的话我就要检查你大脑发育有没有正常...