千家信息网

MYSQL中基础知识点有哪些

发表于:2025-02-16 作者:千家信息网编辑
千家信息网最后更新 2025年02月16日,这篇文章给大家分享的是有关MYSQL中基础知识点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。数据库概述Database:数据库,用于永久的存储数据的软件,海量存储、
千家信息网最后更新 2025年02月16日MYSQL中基础知识点有哪些

这篇文章给大家分享的是有关MYSQL中基础知识点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

数据库概述

Database:数据库,用于永久的存储数据的软件,海量存储、高效存取。
数据库软件的种类:

(1)网状数据库(2)树形/层次型数据库(3)关系型数据库(Relational DB) (4)非关系型数据库(NoSQL)

RDBMS(RDB Management System)部署结构:
(1)服务器端:负责存储/管理数据,其中的数据都是二进制格式存储,人无法直接查看--如工商银行总行中的数据库服务器
(2)客户端:负责连接到服务器,向服务器发送增删改查指令--如ATM机

RDBMS服务器端数据的逻辑结构:
Server=>Database=>Table=>Row=>Column

mysqld、httpd、ftpd、sshd、smbd....
Demon:精灵、守护者、守护程序、精灵程序、服务器程序

MySQL系统的使用

(1)服务器端:下载并安装MySQL服务器软件

mysql.commariadb.orgxampp.org = Apache+MySQL+PHP

(2)服务器端:启动MySQL服务器软件

c:/xampp/mysql/bin/mysqld.exe保证3306端口被打开

===========================
(3)客户端:下载并安装一款MySQL客户端软件

c:/xampp/mysql/bin/mysql.exe作用相当于银行的ATM终端客户机

(4)客户端:提供用户名和密码,登录到数据库服务器上

mysql.exe   -uroot   -p       不能加分号!mysql   -uroot              不能加分号!

MySQL服务器常用的管理命令

提示:所有的管理命令都必须以;分号结尾!仅use和quit除外!
(1)quit; 退出到服务器的连接
(2)show databases; 显示当前服务器上所有的数据库
(3)use 库名; 进入/开始使用指定的数据库
(4)show tables; 显示当前数据库中有哪些表
(5)desc 表名; 描述一下指定表的列(描述表头)

常用的SQL命令

SQL:Structured Query Language,结构化查询语言,是一门编程语言。最早由IBM公司提出的,后来由ISO采纳为关系型数据库行业国际标准,先后推出了多个版本,如SQL87、SQL92、SQL99;目前各大数据库厂家所支持。

SQL语句的执行方式:
(1)交互模式:输入一行执行一行,....,适合于临时的查看数据。 mysql -uroot 回车
(2)脚本模式:把要执行的多条命令编写在一个文本文件中,一次性的提交给服务器执行,适合于批量反复执行的多条语句。 mysql -uroot < d:/xx.sql 回车

SQL语言的语法:
(1)所有的SQL语句必须以;分号结尾。
(2)SQL语句不区分大小写。习惯上,系统预定义的关键字都大写,非关键字都小写。
(3)SQL语句中可以使用 单行注释(#...) 和 多行注释(/.../)

DROP DATABASE IF EXISTS 库名;
CREATE DATABASE 库名 CHARSET=UTF8;
USE 库名;
CREATE TABLE 表名(列名 类型, 列名 类型, ....);
INSERT INTO 表名 VALUES(值, 值, ....);
SELECT * FROM 表名;

数据库中的乱码问题

产生的原因:计算机把每个字符都分配唯一个数字。若存字符时与取字符时所用的编码方案不同,就会产生乱码。

a <=> 97   b <=> 98....

字符编码方案/字符集:把每个需要呈现的字符都分配一个唯一的数字编码。世界上有几套常用的字符集:
(1)ASCII字符集:只对所有的英文字符进行了编码(128个)
(2)GB2312/GBK:对常用的英文字符、中文简体字符都进行了编码(40000多个)
(3)BIG5:对常用的英文字符、中文繁体字符都进行了编码
(4)Unicode字符集:对常用的英文字符、简体汉字、繁体汉字、日文、韩文...主流语言的常用符号都进行了编码,具体存储时又分为UTF-8/UTF-16/UTF-32三种存储方案

解决乱码问题的方法--保证"三处统一":
(1).sql文件的存储编码
(2)mysql.exe连接mysqld.exe所用的编码
(3)mysqld.exe中存储数据所用的编码

MySQL服务器端数据的逻辑结构:

SERVER=>DATABASE=>TABLE=>ROW=>COLUMN
如何连接到数据库服务器:
交互模式:mysql.exe -uroot -p
脚本模式:mysql.exe -uroot -p < d:/2.sql

常用的SQL语句:

(1)增:INSERT INTO 表 VALUES(值, 值, ...);
(2)删:DELETE FROM 表;
(3)改:UPDATE 表 SET 列=值, ...,列=值 ;
(4)查:SELECT * FROM 表;

DELETE FROM laptop; #删除所有的记录行
DELETE FROM laptop WHERE lid=10; #删除满足条件的记录行

UPDATE laptop
SET price='3000',pic='img/50.jpg',isOnsale='否'; #更新所有的记录行
UPDATE laptop
SET price='3000',pic='img/50.jpg',isOnsale='否'
WHERE lid=31; #更新满足条件的行

MySQL中的列类型

(1)数值类型 -- 可用引号括起来也可以不用

整数数值类型:   student(  age TINYINT  )  TINYINT:微整数,占1字节,-128~127  SMALLINT:小整数,占2字节,-32768~32767  INT:整数,占4个字节, -2147483648~2147483647  BIGINT:大整数,占8个字节,.....小数数值类型:  product( price DECIMAL(7, 4) )  FLOAT(M,D):单精度浮点型,占4字节,3.4E38,计算时可能产生四舍五入  DOUBLE(M,D):双精度浮点型,占8字节 1.8E30,计算时可能产生四舍五入  DECIMAL(M,D):定点小数,不会产生精度舍入布尔数值类型:   product( isOnsale BOOL)  BOOL,布尔/真假类型只能取值为TRUE/FALSE。注意:MySQL数据库中没有真正意义上的布尔类型,TRUE等同于1,FALSE等同于0

(2)日期时间类型 -- 必须用引号括起来

DATE:日期类型,形如'2017-5-10'TIME:时间类型,形如'22:08:5'   DATETIME:日期/时间类型,形如'2017-10-25 22:8:5'

(3)字符串类型 -- 必须用引号括起来 emp(resume ...)

CHAR(M):定长字符串,比VARCHAR操作速度更快,M不能超过255VARCHAR(M):变长字符串,比CHAR更能节约空间,M不能超过65535TEXT(M):大型变长字符串,M不能超过2Gename CHAR(11)    ename VARCHAR(11)

a a000 a0
ab ab00 ab0
abc abc0 abc0
abcd abcd abcd
abcde abcd abcd
一二三四 一二三四 一二三四
一二三四五 一二三四 一二三四

true 真 ture x
false 假 flase x

MySQL中的列约束

Constraint:约束,数据库中某列上的数据往往必须符合某种规范,如编号不能重复、年龄必须在一定范围、密码有长度限制、员工所在部门必须真的存在......类似的限制/规范就称为"列约束"
(1)主键约束 -- PRIMARY KEY

 声明为主键的列上,不能出现重复值,也不能出现NULL值,所有的记录会自动按照主键列上值由小到大排序 -- 因此一个表中至多只能有一个主键列。

(2)非空约束 -- NOT NULL

声明为非空的列,不能出现NULL,但可以出现重复值。

(3)唯一约束 -- UNIQUE

声明为唯一约束的列,不能出现重复的值,但可以出现NULL,且允许多个NULL出现(两个NULL值是不等的)

(4)检查约束 -- CHECK

检查约束可以检查新插入的数据是否满足指定的条件,如:student( age INT CHECK(age>=18  AND  age<=60)  )MySQL不支持此约束!

(5)默认值约束 -- DEFAULT

student(sid INT, sex CHAR(1) DEFAULT '男' );  使用默认值的方式1)INSERT INTO student VALUES(10, DEFAULT); 2)INSERT INTO student(sid) VALUES(20);

(6)外键约束 -- FOREIGN KEY...REFERENCES

   外键列上可以出现NULL,也可以有重复值,但是必须保证"所有出现的值在另一个表的主键列上存在"--外键列上的值"参考了"另一个表上的主键值。

面试题:数据库中主键约束 和 唯一且非空组合 约束有何区别?
PRIMARY KEY:是表中记录的排序依据,故一个表至多有一个
UNIQUE NOT NULL:不会排序,故一个表可以有多个

程序中的NULL/空值的含义:表示应该有一个这样的数据,但是暂时还没有确定值是什么,如新员工的部门编号(尚未确定)、尚未确定的部门经理、尚未发到手的年终奖

项目中如何存储日期时间数据

大体有三种方式
(1)VARCHAR存储:不足:不便于比较大小,格式不灵活
(2)DATE/TIME/DATETIME存储:不足:不便于实现国际化,不同的编程语言支持程度不同
(3)BIGINT存储:表示距离计算机元年的毫秒值,任何编程语言都可以把大数字转换为日期时间

中国:2017-10-25
美国:10-25-2017
欧洲:25/10/2017
i18n:internationalization,国际化,实现了国际化的项目应该对中国人显示中国人的习惯格式,对美国人显示美国人的习惯格式.......
计算机中如何存储日期时间:一个很大的数字,表示目标日期距离"计算机元年(1970-1-1 0:0:0 GMT)"经过了多少毫秒:
数字 代表的时间
0 1970-1-1 0:0:0
1000 1970-1-1 0:0:1
-1000 1969-12-31 23:59:59
1000*60 1970-1-1 0:1:0
10006060 1970-1-1 1:0:0
10006060*24 1970-1-2 0:0:0
1000606024365 1971-1-1 0:0:0

MySQL中使用自增列

id INT PRIMARY KEY AUTO_INCREMENT
自增列:只能用于整数列,且必须是主键列。自增列无需手工赋值,会自动采用1/2/3....数列,在当前最大值基础上+1。
注意:SQL标准中没有此关键字,它是MySQL所专有的!

1.简单查询 -- 只查询特定的列
示例:查询出所有员工的姓名、工资、和编号

SELECT ename, salary, eid  FROM emp;

练习:查询出所有的员工姓名、性别、生日、姓名

SELECT ename, sex, birthday, ename FROM emp;

2.简单查询 -- 查询所有的列
示例:查询员工的所有信息
SELECT * FROM emp;

3.简单查询 -- 给列取别名
示例:查询出员工姓名,所在部门编号,要求列名用中文呈现

 SELECT  ename AS 姓名, deptId `部门 编号`  FROM emp;

注意:给列取别名用AS关键字,且可以省略;别名中若有空格,需要用括起来。

4.简单查询 -- 只显示不同的记录
示例:显示出哪些部门编号下有员工

SELECT  DISTINCT deptId FROM emp;

说明: distinct:不同的
练习:查询出公司中有哪些性别的员工

SELECT  DISTINCT  sex    FROM emp;

5.简单查询 -- 在查询时执行计算
示例:计算2/3的商

SELECT  2/3;

示例:查询出每个员工的姓名及其年薪

SELECT  ename, salary,  salary*12FROM emp;

6.简单查询 -- 查询结果集的排序
示例:查询出所有员工信息,按工资由小到大排列

SELECT  * FROM empORDER  BY  salary ;    #ASC,ascendant 升序

示例:查询出所有员工信息,按工资由大到小排列

SELECT  * FROM empORDER  BY  salary  DESC;     #descendant 降序

7.简单查询 -- 条件查询
示例:查询出编号为5的员工所有信息

SELECT  *  FROM empWHERE  eid=5 ;

8.简单查询 -- 模糊条件查询
示例:查询出姓名中包含字母E的员工所有信息

SELECT  *  FROM  empWHERE  ename  LIKE  '%E%';#WHERE  ename='%E%'; #错误写法!

SQL通配符: 下面两个通配符必须与LIKE组合应用
% 匹配任意多个任意字符
_ 匹配一个任意字符

9.简单查询 -- 分页查询
分页查询:若数据库中的满足条件的记录行数太多,一般会采取"一页一页"的方式逐步展示给用户。
不同的数据库实现分页查询语法各不相同,MySQL中的分页查询时最简单的!形如:

SELECT  ...FROM ...WHERE  ...ORDER BY ...LIMIT  start, count ;

start:从哪一行开始读取数据,数据库中的第一行记录称为第0行
count:一次最多可以读取的行数
假设:每一页最多呈现6条记录(称为"页面大小"pageSize)
第1页: SELECT .... LIMIT 0, 6 ;
第2页: SELECT .... LIMIT 6, 6 ;
第3页: SELECT .... LIMIT 12, 6 ;
第4页: SELECT .... LIMIT 18, 6 ;
....
第n页: SELECT .... LIMIT (n-1)*pageSize, pageSize ;

复杂查询 -- 聚合/分组查询

函数:一个可以接收若干数据,加以处理,输出特定数据的功能体 -- 饺子机
MySQL提供的函数: COUNT()、SUM()、AVG()、MAX()、MIN() -- 聚合函数
示例:查询出所有员工的总数量

SELECT  COUNT(eid) AS 编号数量  FROM emp;  #15SELECT  COUNT(deptId)  FROM emp;            #14SELECT  COUNT(*)  FROM emp;                #15

示例:查询出每个部门的编号以及该部门的员工数量(先分组再聚合计算)

SELECT  deptId, COUNT(*) FROM  empGROUP  BY  deptId;

注意:分组查询的结果集中只能包含两种列:
(1)分组条件列
(2)其他列的聚合函数
SELECT deptId, COUNT(ename), ename FROM emp
GROUP BY deptId; #错误写法

复杂查询 -- 子查询

子查询:在一条语句(增删改查)中又嵌入了一条SELECT语句
示例:查询出"研发部"所有员工的信息
步骤1:到部门表查询出研发部对应的部门编号,如10

SELECT  did  FROM  dept WHERE  dname='研发部';

步骤2:到员工表查询部门编号为10的员工信息

SELECT  *   FROM  empWHERE  deptId=10;

综合两条语句:

SELECT  *   FROM  empWHERE  deptId=(     SELECT  did  FROM  dept     WHERE  dname='研发部');   #父查询中需要的条件数据由子查询提供

复杂查询 -- 跨表/多表查询

示例:查询出每个员工的姓名及其所在部门的名称

SELECT  ename, dnameFROM  emp, dept;      #错误!得到了"笛卡尔积" SELECT  ename, dnameFROM  emp, deptWHERE  deptId=did;  #跨表查询必须防止"笛卡尔积"注意:上述语法是SQL-92标准中的跨表查询语法。缺陷:

若某个中的记录在对方表中无对应项,则总结果无法显示这样的记录。
如deptId为NULL的员工、没有员工的部门都无法显示。

SQL-99中的跨表查询语法分为四种:(1)内连接查询  INNER JOIN  查询结果与SQL-92标准一样!    SELECT  ename,  dname    FROM  emp   INNER JOIN  dept    ON  deptId=did;  #两个表的拼接条件用ON声明  (2)左外连接查询  LEFT [OUTER] JOIN    SELECT  ename,  dname    FROM  emp   LEFT  OUTER  JOIN  dept    ON  deptId=did;  #显示"左侧"表中的所有记录!  (3)右外连接查询  RIGHT OUTER JOIN    SELECT  ename,  dname    FROM  emp   RIGHT  OUTER  JOIN  dept    ON  deptId=did;  #显示"右侧"表中的所有记录!  (4)全连接查询 FULL JOIN    注意:MySQL不支持全连接!

MySQL中解决"不支持全连接"的方法 -- 结果集的合并:

(SELECT  ename  FROM  emp_cn)UNION(SELECT  ename  FROM  emp_us);  #合并相同的记录 ------------------------------------------------(SELECT  ename  FROM  emp_cn)UNION  ALL(SELECT  ename  FROM  emp_us);  #不合并相同的记录

SQL语句的分类:

DDL: Data Define Language,数据定义语言--定义列

 CREATE / DROP / ALTER / TRUNCATE

DML: Data Manipulate Language,数据操作语言--操作行

 INSERT / DELETE / UPDATE

DQL: Data Query Language,数据查询语言--不影响数据

 SELECT

DCL: Data Control Language,数据控制语言--控制权限

 GRANT / REVOKE

小知识:mysqli_query($conn, $sql)的返回值类型:
(1)DML: 增删改,执行失败返回false,成功返回true
(2)DQL: 查,执行失败返回false,成功返回查询结果集对象,可能有0/1/N行数据;
从其中获取一行数据可以使用:
$row=mysqli_fetch_row($result);抓取一个索引数组或null
$row=mysqli_fetch_assoc($result);抓取一个关联数组或null
从其中获取所有记录行可以使用:
$rowList=mysqli_fetch_all($result, MYSQLI_ASSOC);抓取一个二维数组,每一行呈现为一个关联数组

感谢各位的阅读!关于"MYSQL中基础知识点有哪些"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

查询 数据 数据库 员工 字符 服务器 服务 类型 示例 存储 部门 编码 语句 语言 条件 姓名 常用 信息 日期 时间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网公司算科技型企业 军人手机网络安全发言稿 爬一些高校的数据表数据库 中山网络安全监察大队 临沂服务器运维管理系统方案 服务器后台学习教程 数据库获取表所有数据 2019搭建桌面服务器 农村综合产权交易软件开发 零基础怎么学好软件开发 服务器管理启用性能计数器 北京灵通网络技术有限公司 网络安全信息化教育平台 重庆有多少家互联网科技公司 空间数据库和地理科学的关系 广西花花宇宙网络技术有限公司 网络技术开发软件 座位预约系统软件开发公司 ip地址代理服务器 移动AP软件开发怎么样 风电场气象服务器可以连接外网吗 爬一些高校的数据表数据库 数据库获取表所有数据 研究网络安全的议题 如何租用数据库系统 网络安全贵州省 数据库字符串匹配是什么意思 基于HJ212软件开发 当兵的有做软件开发的吗 数据库怎么连接到idea
0