本文主要和大家分享MYSQL知識點總結,希望能幫助大家更好的掌握和使用mysql資料庫。
資料庫概述
Database:資料庫,用於永久的儲存資料的軟體,海量儲存、有效率存取。
資料庫軟體的種類:
<span style="font-size: 14px;">(1)网状数据库<br>(2)树形/层次型数据库<br>(3)关系型数据库(Relational DB)<br> (4)非关系型数据库(NoSQL)<br></span>
RDBMS(RDB Management System)部署結構:
(1)伺服器端:負責儲存/管理數據,其中的資料都是二進位格式存儲,人無法直接查看-如工商銀行總行中的資料庫伺服器
(2)客戶端:負責連接到伺服器,向伺服器發送增刪改查指令-如ATM機
#RDBMS伺服器端資料的邏輯架構:
Server=>Database=>Table=>Row=>Column
mysqld、httpd、 ftpd、sshd、smbd....
Demon:精靈、守護者、守護程式、精靈程式、伺服器程式
MySQL系統的使用
(1)伺服器端:下載並安裝MySQL伺服器軟體
<span style="font-size: 14px;">mysql.com<br>mariadb.org<br>xampp.org = Apache+MySQL+PHP<br></span>
#(2)伺服器端:啟動MySQL伺服器軟體
<span style="font-size: 14px;">c:/xampp/mysql/bin/mysqld.exe<br>保证3306端口被打开<br></span>
===========================
(3)客戶端:下載並安裝一款MySQL客戶端軟體
<span style="font-size: 14px;">c:/xampp/mysql/bin/mysql.exe<br>作用相当于银行的ATM终端客户机<br></span>
(4)用戶端:提供使用者名稱和密碼,登入資料庫伺服器上
<span style="font-size: 14px;">mysql.exe -uroot -p 不能加分号!<br>mysql -uroot 不能加分号!<br></span>
##MySQL伺服器常用的管理指令
提示:所有的管理指令都必須以;分號結尾!僅use和quit除外! (1)quit; 退出伺服器的連線
# (2)show databases; 顯示目前伺服器上所有的資料庫
(3)use 庫名; 4)show tables; 顯示目前資料庫中有哪些表格
(5)desc 表名; 描述指定表格的資料列(說明表頭)
SQL:Structured Query Language,結構化查詢語言,是一門程式語言。最早由IBM公司提出的,後來由ISO採納為關聯式資料庫產業國際標準,先後推出了多個版本,如SQL87、SQL92、SQL99;目前各大資料庫廠商所支援。
SQL語句的執行方式:
(1)互動模式:輸入一行執行一行,....,適合暫時的檢視資料。 mysql -uroot 回車 (2)腳本模式:將要執行的多個指令寫在一個文字檔案中,一次的提交給伺服器執行,適合於批次重複執行的多個語句。 mysql -uroot
(1)所有的語句必須以;分號語句結束。 (2)SQL語句不區分大小寫。習慣上,系統預先定義的關鍵字都大寫,非關鍵字都小寫。
(3)SQL語句中可以使用單行註解(#...) 和多行註解(/
...
/)
CREATE DATABASE 庫名CHARSET=UTF8;USE 庫名;
CREATE TABLE 表名(列名類型, 列名類型, ....);
INSERT INTO表名VALUES(值, 值, ....);
SELECT * FROM 表名;
#產生的原因:計算機把每個字元都分配唯一個數字。若儲存字元時與取字元時所使用的編碼方案不同,就會產生亂碼。
<span style="font-size: 14px;">a 97<br> b 98<br>....<br></span>
(1)ASCII字元集:只對所有的英文字元進行了編碼(128個) (2)GB2312/GBK:對常用的英文字元、中文簡體字元都進行了編碼(40000多個)
(3)BIG5:對常用的英文字元、中文繁體字元都進行了編碼
(4)Unicode字元集:對常用的英文字元、簡體漢字、繁體漢字、日文、韓文...主流語言的常用符號都進行了編碼,具體存儲時又分為UTF-8/UTF-16/UTF-32三種存儲方案
(1).sql檔案的儲存編碼(2)mysql.exe連接mysqld.exe所使用的編碼 SERVER=>DATABASE=>TABLE=>ROW=>COLUMN (1)增:INSERT INTO 表 VALUES(值, 值, ...); DELETE FROM laptop; #删除所有的记录行 UPDATE laptop (1)数值类型 —— 可用引号括起来也可以不用 (2)日期时间类型 —— 必须用引号括起来 (3)字符串类型 —— 必须用引号括起来 emp(resume ...) a a000 a0 true 真 ture x Constraint:约束,数据库中某列上的数据往往必须符合某种规范,如编号不能重复、年龄必须在一定范围、密码有长度限制、员工所在部门必须真的存在......类似的限制/规范就称为“列约束” (2)非空约束 —— NOT NULL (3)唯一约束 —— UNIQUE (4)检查约束 —— CHECK (5)默认值约束 —— DEFAULT (6)外键约束 —— FOREIGN KEY...REFERENCES 面试题:数据库中主键约束 和 唯一且非空组合 约束有何区别? 程序中的NULL/空值的含义:表示应该有一个这样的数据,但是暂时还没有确定值是什么,如新员工的部门编号(尚未确定)、尚未确定的部门经理、尚未发到手的年终奖 大体有三种方式 中国:2017-10-25 id INT PRIMARY KEY AUTO_INCREMENT 1.简单查询 —— 只查询特定的列 练习:查询出所有的员工姓名、性别、生日、姓名 2.简单查询 —— 查询所有的列 3.简单查询 —— 给列取别名 注意:给列取别名用AS关键字,且可以省略;别名中若有空格,需要用括起来。 4.简单查询 —— 只显示不同的记录 说明: distinct:不同的 5.简单查询 —— 在查询时执行计算 示例:查询出每个员工的姓名及其年薪 6.简单查询 —— 查询结果集的排序 示例:查询出所有员工信息,按工资由大到小排列 7.简单查询 —— 条件查询 8.简单查询 —— 模糊条件查询 SQL通配符: 下面两个通配符必须与LIKE组合应用 9.简单查询 —— 分页查询 start:从哪一行开始读取数据,数据库中的第一行记录称为第0行 函数:一个可以接收若干数据,加以处理,输出特定数据的功能体 —— 饺子机 示例:查询出每个部门的编号以及该部门的员工数量(先分组再聚合计算) 注意:分组查询的结果集中只能包含两种列: 子查询:在一条语句(增删改查)中又嵌入了一条SELECT语句 步骤2:到员工表查询部门编号为10的员工信息 综合两条语句: 示例:查询出每个员工的姓名及其所在部门的名称 若某个中的记录在对方表中无对应项,则总结果无法显示这样的记录。 DDL: Data Define Language,数据定义语言——定义列 DML: Data Manipulate Language,数据操作语言——操作行 DQL: Data Query Language,数据查询语言——不影响数据 DCL: Data Control Language,数据控制语言——控制权限 小知识:mysqli_query($conn, $sql)的返回值类型: 相关推荐:
(3 )mysqld.exe中儲存資料所用的編碼MySQL服务器端数据的逻辑结构:
如何连接到数据库服务器:
交互模式:mysql.exe -uroot -p
脚本模式:mysql.exe -uroot -p 常用的SQL语句:
(2)删:DELETE FROM 表;
(3)改:UPDATE 表 SET 列=值, ...,列=值 ;
(4)查:SELECT * FROM 表;
DELETE FROM laptop WHERE lid=10; #删除满足条件的记录行
SET price='3000',pic='img/50.jpg',isOnsale='否'; #更新所有的记录行
UPDATE laptop
SET price='3000',pic='img/50.jpg',isOnsale='否'
WHERE lid=31; #更新满足条件的行MySQL中的列类型
<span style="font-size: 14px;">整数数值类型: student( age TINYINT )<br> TINYINT:微整数,占1字节,-128~127<br> SMALLINT:小整数,占2字节,-32768~32767<br> INT:整数,占4个字节, -2147483648~2147483647<br> BIGINT:大整数,占8个字节,.....<br>小数数值类型: product( price DECIMAL(7, 4) )<br> FLOAT(M,D):单精度浮点型,占4字节,3.4E38,计算时可能产生四舍五入<br> DOUBLE(M,D):双精度浮点型,占8字节 1.8E30,计算时可能产生四舍五入<br> DECIMAL(M,D):定点小数,不会产生精度舍入<br>布尔数值类型: product( isOnsale BOOL)<br> BOOL,布尔/真假类型只能取值为TRUE/FALSE。注意:<br>MySQL数据库中没有真正意义上的布尔类型,TRUE等同于1,FALSE等同于0<br></span>
<span style="font-size: 14px;">DATE:日期类型,形如'2017-5-10'<br>TIME:时间类型,形如'22:08:5' <br>DATETIME:日期/时间类型,形如'2017-10-25 22:8:5'<br></span>
<span style="font-size: 14px;">CHAR(M):定长字符串,比VARCHAR操作速度更快,M不能超过255<br>VARCHAR(M):变长字符串,比CHAR更能节约空间,M不能超过65535<br>TEXT(M):大型变长字符串,M不能超过2G<br>ename CHAR(11) ename VARCHAR(11)<br></span>
ab ab00 ab0
abc abc0 abc0
abcd abcd abcd
abcde abcd abcd
一二三四 一二三四 一二三四
一二三四五 一二三四 一二三四
false 假 flase xMySQL中的列约束
(1)主键约束 —— PRIMARY KEY<span style="font-size: 14px;"> 声明为主键的列上,不能出现重复值,也不能出现NULL值,所有的记录会自动按照主键列上值由小到大排序 —— 因此一个表中至多只能有一个主键列。<br></span>
<span style="font-size: 14px;">声明为非空的列,不能出现NULL,但可以出现重复值。<br></span>
<span style="font-size: 14px;">声明为唯一约束的列,不能出现重复的值,但可以出现NULL,且允许多个NULL出现(两个NULL值是不等的)<br></span>
<span style="font-size: 14px;">检查约束可以检查新插入的数据是否满足指定的条件,如:<br>student( age INT CHECK(age>=18 AND ageMySQL不支持此约束!<br></span>
<span style="font-size: 14px;">student(sid INT, sex CHAR(1) DEFAULT '男' ); <br>使用默认值的方式<br>1)INSERT INTO student VALUES(10, DEFAULT);<br> 2)INSERT INTO student(sid) VALUES(20);<br></span>
<span style="font-size: 14px;"> 外键列上可以出现NULL,也可以有重复值,但是必须保证“<br>所有出现的值在另一个表的主键列上存在”——外键列上的值“参考了”另一个表上的主键值。<br></span>
PRIMARY KEY:是表中记录的排序依据,故一个表至多有一个
UNIQUE NOT NULL:不会排序,故一个表可以有多个项目中如何存储日期时间数据
(1)VARCHAR存储:不足:不便于比较大小,格式不灵活
(2)DATE/TIME/DATETIME存储:不足:不便于实现国际化,不同的编程语言支持程度不同
(3)BIGINT存储:表示距离计算机元年的毫秒值,任何编程语言都可以把大数字转换为日期时间
美国: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:0MySQL中使用自增列
自增列:只能用于整数列,且必须是主键列。自增列无需手工赋值,会自动采用1/2/3....数列,在当前最大值基础上+1。
注意:SQL标准中没有此关键字,它是MySQL所专有的!
示例:查询出所有员工的姓名、工资、和编号<span style="font-size: 14px;">SELECT ename, salary, eid FROM emp;<br></span>
<span style="font-size: 14px;">SELECT ename, sex, birthday, ename FROM emp;<br></span>
示例:查询员工的所有信息
SELECT * FROM emp;
示例:查询出员工姓名,所在部门编号,要求列名用中文呈现<span style="font-size: 14px;"> SELECT ename AS 姓名, deptId `部门 编号` FROM emp;<br></span>
示例:显示出哪些部门编号下有员工<span style="font-size: 14px;">SELECT DISTINCT deptId <br>FROM emp;<br></span>
练习:查询出公司中有哪些性别的员工<span style="font-size: 14px;">SELECT DISTINCT sex FROM emp;<br></span>
示例:计算2/3的商<span style="font-size: 14px;">SELECT 2/3;<br></span>
<span style="font-size: 14px;">SELECT ename, salary, salary*12<br>FROM emp;<br></span>
示例:查询出所有员工信息,按工资由小到大排列<span style="font-size: 14px;">SELECT * <br>FROM emp<br>ORDER BY salary ; #ASC,ascendant 升序<br></span>
<span style="font-size: 14px;">SELECT * <br>FROM emp<br>ORDER BY salary DESC; #descendant 降序<br></span>
示例:查询出编号为5的员工所有信息<span style="font-size: 14px;">SELECT * FROM emp<br>WHERE eid=5 ;<br></span>
示例:查询出姓名中包含字母E的员工所有信息<span style="font-size: 14px;">SELECT * FROM emp<br>WHERE ename LIKE '%E%';<br>#WHERE ename='%E%'; #错误写法!<br></span>
% 匹配任意多个任意字符
_ 匹配一个任意字符
分页查询:若数据库中的满足条件的记录行数太多,一般会采取“一页一页”的方式逐步展示给用户。
不同的数据库实现分页查询语法各不相同,MySQL中的分页查询时最简单的!形如:<span style="font-size: 14px;">SELECT ...<br>FROM ...<br>WHERE ...<br>ORDER BY ...<br>LIMIT start, count ;<br></span>
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() —— 聚合函数
示例:查询出所有员工的总数量<span style="font-size: 14px;">SELECT COUNT(eid) AS 编号数量 FROM emp; #15<br>SELECT COUNT(deptId) FROM emp; #14<br>SELECT COUNT(*) FROM emp; #15<br></span>
<span style="font-size: 14px;">SELECT deptId, COUNT(*) FROM emp<br>GROUP BY deptId;<br></span>
(1)分组条件列
(2)其他列的聚合函数
SELECT deptId, COUNT(ename), ename FROM emp
GROUP BY deptId; #错误写法复杂查询 —— 子查询
示例:查询出“研发部”所有员工的信息
步骤1:到部门表查询出研发部对应的部门编号,如10<span style="font-size: 14px;">SELECT did FROM dept <br>WHERE dname='研发部';<br></span>
<span style="font-size: 14px;">SELECT * FROM emp<br>WHERE deptId=10;<br></span>
<span style="font-size: 14px;">SELECT * FROM emp<br>WHERE deptId=( <br> SELECT did FROM dept <br> WHERE dname='研发部'<br>); #父查询中需要的条件数据由子查询提供<br></span>
复杂查询 —— 跨表/多表查询
<span style="font-size: 14px;">SELECT ename, dname<br>FROM emp, dept; #错误!得到了“笛卡尔积”<br> <br>SELECT ename, dname<br>FROM emp, dept<br>WHERE deptId=did; #跨表查询必须防止“笛卡尔积”<br>注意:上述语法是SQL-92标准中的跨表查询语法。缺陷:<br></span>
如deptId为NULL的员工、没有员工的部门都无法显示。<span style="font-size: 14px;">SQL-99中的跨表查询语法分为四种:<br>(1)内连接查询 INNER JOIN 查询结果与SQL-92标准一样!<br> SELECT ename, dname<br> FROM emp INNER JOIN dept<br> ON deptId=did; #两个表的拼接条件用ON声明<br> (2)左外连接查询 LEFT [OUTER] JOIN<br> SELECT ename, dname<br> FROM emp LEFT OUTER JOIN dept<br> ON deptId=did; #显示“左侧”表中的所有记录!<br> (3)右外连接查询 RIGHT OUTER JOIN<br> SELECT ename, dname<br> FROM emp RIGHT OUTER JOIN dept<br> ON deptId=did; #显示“右侧”表中的所有记录!<br> (4)全连接查询 FULL JOIN<br> 注意:MySQL不支持全连接!<br></span>
MySQL中解决“不支持全连接”的方法 —— 结果集的合并:
<span style="font-size: 14px;">(SELECT ename FROM emp_cn)<br>UNION<br>(SELECT ename FROM emp_us); #合并相同的记录<br> ------------------------------------------------<br>(SELECT ename FROM emp_cn)<br>UNION ALL<br>(SELECT ename FROM emp_us); #不合并相同的记录<br></span>
SQL语句的分类:
<span style="font-size: 14px;"> CREATE / DROP / ALTER / TRUNCATE<br></span>
<span style="font-size: 14px;"> INSERT / DELETE / UPDATE<br></span>
<span style="font-size: 14px;"> SELECT<br></span>
<span style="font-size: 14px;"> GRANT / REVOKE<br></span>
(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知識點總結分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

在數據庫優化中,應根據查詢需求選擇索引策略:1.當查詢涉及多個列且條件順序固定時,使用複合索引;2.當查詢涉及多個列但條件順序不固定時,使用多個單列索引。複合索引適用於優化多列查詢,單列索引則適合單列查詢。

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

MySQL異步主從復制通過binlog實現數據同步,提升讀性能和高可用性。 1)主服務器記錄變更到binlog;2)從服務器通過I/O線程讀取binlog;3)從服務器的SQL線程應用binlog同步數據。

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL的安裝和基本操作包括:1.下載並安裝MySQL,設置根用戶密碼;2.使用SQL命令創建數據庫和表,如CREATEDATABASE和CREATETABLE;3.執行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.創建索引和存儲過程以優化性能和實現複雜邏輯。通過這些步驟,你可以從零開始構建和管理MySQL數據庫。

InnoDBBufferPool通過將數據和索引頁加載到內存中來提升MySQL數據庫的性能。 1)數據頁加載到BufferPool中,減少磁盤I/O。 2)臟頁被標記並定期刷新到磁盤。 3)LRU算法管理數據頁淘汰。 4)預讀機制提前加載可能需要的數據頁。

MySQL適合初學者使用,因為它安裝簡單、功能強大且易於管理數據。 1.安裝和配置簡單,適用於多種操作系統。 2.支持基本操作如創建數據庫和表、插入、查詢、更新和刪除數據。 3.提供高級功能如JOIN操作和子查詢。 4.可以通過索引、查詢優化和分錶分區來提升性能。 5.支持備份、恢復和安全措施,確保數據的安全和一致性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3漢化版
中文版,非常好用