前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql[0x01]--基础知识

mysql[0x01]--基础知识

作者头像
江涛学编程
发布2020-06-19 16:29:46
6200
发布2020-06-19 16:29:46
举报
文章被收录于专栏:江涛的博客

mysql是一款很牛逼的关系型数据库。

上大学时,导论老师教的是用SQL Server,开发老师教的是用MySQL,Oracle也在课程体系之内,自学用的是Redis和Mongodb,以上构成了前段时间我对数据库我接触过的并且使用过然而也只是个crud boy的全部认知。在没听过丁奇老师的《MySQL实战45讲》之前,我觉得MySQL CURD写的6,然后事务啥的搞搞懂就还行吧。看了他的课后,受益良多,遂决定重新梳理下MySQL的知识点,这也坚定了我离开学校后,每个月花点钱投资在学习上的决心,付出就会有回报。

一、前期工作

1.1、MySQL和MariaDB的关系

兄弟关系,是这样子的,收购sun公司的Oracle公司,财大气粗,收购了MySQL。MySQL开源社区担心有闭源的风险,就另起炉灶,开了一个MySQL的分支,叫MariaDB(这个Maria起的好啊,MySQL的创始人女儿的名字)

1.2、安装配置

参考我的GitHub开源笔记:https://github.com/ataola/ataolaSkillsStack/blob/master/ToolsUseage/Mysql/README.md

好啦,看到这里,你大致应该是电脑上有个MySQL,别急先别跑起来,我们先坐下约定啊。

1.3、 我们的约定

关于MySQL的一些基本操作,规范一点,统一这里数据库名小写(都小写的,你大写也没用),数据库表名前面加个“t_”后面小写,字段名首字母大写,跟一个表名的首字母,然后数据库语句基本组成大写, 这样子看上去整齐就比较美观了。

1.4、注释

代码语言:javascript
复制
写法一:
# This is jiangtao Zheng Speaking!

写法二:
--- This is Jiangtao Speaking!

二、关于建表删表,如果你是cmder,那蛮重要的

2.1、创建数据库的两种方法

代码语言:javascript
复制
# 方法一:删库重建
DROP DATABASE IF EXISTS helloworld;
CREATE DATABASE helloworld;

# 方法二:有库不重建,没库重建
CREATE DATABASE IF NOT EXISTS helloworld;

这里的话,我们通常写方法二这句话就够了,为什么要加楼上这句话呢?就说,我们可能会遇到这样一种情况,我创建了一个数据库,但是有冲突,我数据库里面已经有了一个这样的数据库了。所以你是不是要判断一下, 如果有,删它。这里有两种写法, 一种是 "DROP DATABASE IF EXISTS helloworld", 另一种是"CREATE DATABASE IF NOT EXISTS helloworld", 这里我更倾向于前者,因为你不能保证后者的表就跟我要创建的一致吧。

2.2、创建数据库表的两种方法

同样的按照楼上2.1的思路,你应该猜也能猜到了。

代码语言:javascript
复制
# 方法一: 删表重建
USE helloworld;
DROP TABLE IF EXISTS t_user;
CREATE TABLE t_user (
    `Uid` INT PRIMARY KEY,  --id
    `Uname` VARCHAR(20) NOT NULL  --姓名
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
DESCRIBE `user`;

#方法二:有表不删表, 没表重建
USE helloworld;
CREATE TABLE IF NOT EXISTS t_user (
    `Uid` INT PRIMARY KEY,  --id
    `Uname` VARCHAR(20) NOT NULL  --姓名
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

三、A CRUD Boy

3.1、增(insert)

代码语言:javascript
复制
INSERT INTO t_user (`Uname`, `Uage`, `Uaddress`) VALUES('郑江涛', '23', '浙江杭州');

"增 "需要注意的是主键是否需要自增,如果自增的话,那么就不需要写上去了,这里我们可以考虑这样两种情况一种是部分插入、一种是完全插入。部分插入就是在符合表的约束前提下,我只插入表的一部分,剩下我不管,置空还是初始值你自己定义。完全插入看楼上例子。

3.2、删(delete)

代码语言:javascript
复制
DELETE FROM t_user WHERE `Uname` = "郑江涛";

3.3、改(update)

代码语言:javascript
复制
UPDATE t_user SET Uage = 23 WHERE Uname = "郑江涛";

3.4、查(select)

查是比较头疼的,查询这里也分,条件查询、连接查询、嵌套查询、关联查询、部分查询和全部查询等等。

代码语言:javascript
复制
# 全部查询
SELECT * FROM t_user;

#条件查询
--- 查询年龄为22的选手
SELECT * FROM t_user WHERE `UAge` = 22;

#嵌套查询
--- 查询开发部工资小于10000的选手的姓名和地址 (IN)
SELECT DISTINCT `EName`, `EAddress` FROM t_employee WHERE `ESalary` < 10000 AND `Dno` IN (SELECT `Dno` FROM t_department WHERE `DName` = '开发部');

#连接查询
--- 查询开发部工资小于10000的选手的姓名和地址 (NATURAL JOIN)

SELECT DISTINCT `EName`, `EAddress` FROM t_employee NATURAL JOIN t_department WHERE `DName` = '开发部' AND `ESalary` < 10000;

# 部分查询

SELECT `UName`, `UAge` FROM t_user;

这里只是列举一些最基本的,深入地学习还需要大家靠平时去CRUD。

四、问题思考

4.1、 如何合理设计字段,例如电话号码,给它设置数字好,还是字符串好?

字符串好,也没听说过电话号码能够拿来加减啊,所以还是字符串好,从这个方面考虑。

4.2、用SQL怎么建立主外键约束

代码语言:javascript
复制
-- 部门表(主表)
CREATE TABLE t_dept(
    Did INT PRIMARY KEY,
    Dname VARCHAR(20)
)

-- 修改员工表(副表/从表)
CREATE TABLE t_employee(
    Eid INT PRIMARY KEY,
    Ename VARCHAR(20),
    Deptid INT,-- 把部门名称改为部门ID
    -- 声明一个外键约束
    CONSTRAINT employee_dept_fk FOREIGN KEY(Deptid) REFERENCES t_dept(Did)
    --           外键名称                  外键               参考表(参考字段)
)

4.3、关联查询(多表查询)有哪些形式?

交叉连接查询:不管三七二十一,查什么字段,需要什么表都给我写上,效率不高,会有笛卡尔积的产生,运气好会碰到数据重复。

代码语言:javascript
复制
SELECT Ename, Dname FROM t_employee, t_dept;

内连接查询:写清楚那些表的字段存在关系,然后用等号 连起来,使用很平凡啊

代码语言:javascript
复制
SELECT Ename, Dname FROM t_employee, t_dept WHERE t_employee.Deptid = t_dept.Did;

内连接还可以这样写

代码语言:javascript
复制
SELECT Ename, Dname FROM t_employee INNER JOIN t_dept ON t_employee.Deptid = t_dept.Did

有内连接我们也很容易想到有外连接,所以接下来看下外连接

左[外]连接查询:使用左边表的数据去匹配右边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null

代码语言:javascript
复制
SELECT d.DeptName, e.EName FROM t_dept d LEFT OUTER JOIN t_employee e ON d.Did = e.DeptId

右[外]连接查询: 使用右边表的数据去匹配左边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null

代码语言:javascript
复制
SELECT d.DeptName, e.EName FROM t_dept d RIGHT OUTER JOIN t_employee e ON d.Did = e.DeptId
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 江涛学编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前期工作
    • 1.1、MySQL和MariaDB的关系
      • 1.2、安装配置
        • 1.3、 我们的约定
          • 1.4、注释
          • 二、关于建表删表,如果你是cmder,那蛮重要的
            • 2.1、创建数据库的两种方法
              • 2.2、创建数据库表的两种方法
              • 三、A CRUD Boy
                • 3.1、增(insert)
                  • 3.2、删(delete)
                    • 3.3、改(update)
                      • 3.4、查(select)
                      • 四、问题思考
                        • 4.1、 如何合理设计字段,例如电话号码,给它设置数字好,还是字符串好?
                          • 4.2、用SQL怎么建立主外键约束
                            • 4.3、关联查询(多表查询)有哪些形式?
                            相关产品与服务
                            云数据库 SQL Server
                            腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档