本文主要和人人分享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.com
mariadb.org
xampp.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不能超过255
VARCHAR(M):变长字符串,比CHAR更能勤俭空间,M不能超过65535
TEXT(M):大型变长字符串,M不能超过2G
ename 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*12
FROM emp;
6.简朴查询 —— 查询效果集的排序
示例:查询出一切员工信息,按工资由小到大分列
SELECT *
FROM emp
ORDER BY salary ; #ASC,ascendant 升序
示例:查询出一切员工信息,按工资由大到小分列
SELECT *
FROM emp
ORDER BY salary DESC; #descendant 降序
7.简朴查询 —— 前提查询
示例:查询出编号为5的员工一切信息
SELECT * FROM emp
WHERE eid=5 ;
8.简朴查询 —— 隐约前提查询
示例:查询出姓名中包括字母E的员工一切信息
SELECT * FROM emp
WHERE 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; #15
SELECT COUNT(deptId) FROM emp; #14
SELECT COUNT(*) FROM emp; #15
示例:查询出每一个部门的编号以及该部门的员工数目(先分组再聚合盘算)
SELECT deptId, COUNT(*) FROM emp
GROUP 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 emp
WHERE deptId=10;
综合两条语句:
SELECT * FROM emp
WHERE deptId=(
SELECT did FROM dept
WHERE dname='研发部'
); #父查询中须要的前提数据由子查询供应
庞杂查询 —— 跨表/多表查询
示例:查询出每一个员工的姓名及其地点部门的称号
SELECT ename, dname
FROM emp, dept; #毛病!得到了“笛卡尔积”
SELECT ename, dname
FROM emp, dept
WHERE 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学问点总结_MySQL
mysql发起衔接及查询数据表PHP代码
mysql衔接数据库并测试实例分享
以上就是MYSQL学问点总结分享的细致内容,更多请关注ki4网别的相干文章!