데이터베이스: 대규모 저장소와 효율적인 액세스를 통해 데이터를 영구적으로 저장하는 데 사용되는 데이터베이스, 소프트웨어입니다.
데이터베이스 소프트웨어 유형:
<span style="font-size: 14px;">(1)网状数据库<br>(2)树形/层次型数据库<br>(3)关系型数据库(Relational DB)<br> (4)非关系型数据库(NoSQL)<br></span>
RDBMS(RDB 관리 시스템) 배포 구조:
(1) 서버 측: 데이터 저장/관리를 담당합니다. 데이터는 바이너리 형식으로 저장되며 사람이 직접 볼 수 없습니다. 은행 본점의 산업용 및 상업용 데이터베이스 서버로
(2) 클라이언트 : 서버에 연결하고 추가, 삭제, 수정 및 쿼리 명령을 서버(ATM 기계 등)에 보내는 역할
RDBMS의 논리적 구조 서버측 데이터:
Server=>Database=> ;Table=>Row=>Column
mysqld, httpd, ftpd, sshd, smbd....
Demon: elf, Guardian, daemon, elf 프로그램, 서버 프로그램
(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>
팁: 모든 관리 명령은 세미콜론으로 끝나야 합니다. 사용하고 종료하는 것을 제외하고!
(1) 종료; 서버 연결을 종료합니다.
(2) 현재 서버의 모든 데이터베이스를 표시합니다.
(3) 지정된 데이터베이스를 사용하여 입력/시작합니다. 현재 데이터베이스에 어떤 테이블이 있는지
(5)desc 테이블 이름; 지정된 테이블의 열 설명(테이블 헤더 설명)
SQL: Structured Query Language, Structured Query Language, 프로그래밍 언어이다. IBM에서 처음 제안한 후 ISO에서 관계형 데이터베이스 산업의 국제 표준으로 채택했으며, 현재 주요 데이터베이스 제조업체에서 지원하는 SQL87, SQL92, SQL99 등 여러 버전을 출시했습니다.
SQL 문의 실행 방법: (1) 대화형 모드: 한 줄을 입력하고 한 줄을 실행합니다... 데이터를 임시로 보는 데 적합합니다. mysql -uroot Enter
(2) 스크립트 모드: 실행할 여러 명령을 텍스트 파일에 작성하고 서버에 제출하여 한 번에 실행하는 데 적합합니다. Mysql -uroot < d:/xx.sql Enter
SQL 언어 구문: (1) 모든 SQL 문은 세미콜론으로 끝나야 합니다.
(2)SQL 문은 대소문자를 구분하지 않습니다. 관례적으로 시스템에서 미리 정의한 키워드는 모두 대문자이고, 키워드가 아닌 단어는 소문자입니다.
(3) SQL 문에서는 한 줄 주석(#...)과 여러 줄 주석(/
.../)을 사용할 수 있습니다.
DROP DATABASE IF EXISTS 라이브러리 이름;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></p> <p>문자 인코딩 체계/문자 세트: 렌더링해야 하는 각 문자에 고유한 숫자 인코딩을 할당합니다. 전 세계적으로 일반적으로 사용되는 문자 집합은 여러 가지가 있습니다. <span style="font-size: 14px;"> (1) ASCII 문자 집합: 모든 영어 문자만 인코딩됩니다. (128) <br> (2) GB2312/GBK: 일반적으로 사용되는 영어 문자 및 중국어 간체 문자가 인코딩됩니다. 40,000) <br> (3) BIG5: 흔히 사용되는 영어 문자와 번체 한자를 인코딩합니다. <br> (4) 유니코드 문자 집합: 일반적으로 사용되는 영어 문자, 간체자, 중국어 번체 문자, 일본어, 한국어 ..주류에서 흔히 사용되는 기호입니다. 언어는 모두 인코딩되며 특정 저장소는 세 가지 저장소 솔루션으로 나뉩니다: UTF-8/UTF-16/UTF-32<br></span></p> <p>깨진 문제를 해결하는 방법 - "세 곳의 통합"을 보장합니다. (1) .sql 파일의 저장 인코딩<span style="font-size: 14px;">(2) mysql.exe에서 mysqld.exe<br>에 연결하는 데 사용되는 인코딩(3) mysqld.exe<br><br>에 데이터를 저장하는 데 사용되는 인코딩<h2><span style="font-size: 14px;">MySQL服务器端数据的逻辑结构:</span></h2> <p><span style="font-size: 14px;">SERVER=>DATABASE=>TABLE=>ROW=>COLUMN<br>如何连接到数据库服务器:<br> 交互模式:mysql.exe -uroot -p<br> 脚本模式:mysql.exe -uroot -p < d:/2.sql</span></p><h2><span style="font-size: 14px;">常用的SQL语句:</span></h2><p><span style="font-size: 14px;">(1)增:INSERT INTO 表 VALUES(值, 值, ...);<br/> (2)删:DELETE FROM 表;<br/> (3)改:UPDATE 表 SET 列=值, ...,列=值 ;<br/> (4)查:SELECT * FROM 表;</span></p><p><span style="font-size: 14px;">DELETE FROM laptop; #删除所有的记录行<br/>DELETE FROM laptop WHERE lid=10; #删除满足条件的记录行</span></p><p><span style="font-size: 14px;">UPDATE laptop <br/>SET price='3000',pic='img/50.jpg',isOnsale='否'; #更新所有的记录行<br/>UPDATE laptop <br/>SET price='3000',pic='img/50.jpg',isOnsale='否'<br/>WHERE lid=31; #更新满足条件的行</span></p><h2><span style="font-size: 14px;">MySQL中的列类型</span></h2><p><span style="font-size: 14px;">(1)数值类型 —— 可用引号括起来也可以不用</span></p><pre class="brush:php;toolbar:false"><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>
(2)日期时间类型 —— 必须用引号括起来
<span style="font-size: 14px;">DATE:日期类型,形如'2017-5-10'<br/>TIME:时间类型,形如'22:08:5' <br/>DATETIME:日期/时间类型,形如'2017-10-25 22:8:5'<br/></span>
(3)字符串类型 —— 必须用引号括起来 emp(resume ...)
<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>
a a000 a0
ab ab00 ab0
abc abc0 abc0
abcd abcd abcd
abcde abcd abcd
一二三四 一二三四 一二三四
一二三四五 一二三四 一二三四
true 真 ture x
false 假 flase x
Constraint:约束,数据库中某列上的数据往往必须符合某种规范,如编号不能重复、年龄必须在一定范围、密码有长度限制、员工所在部门必须真的存在......类似的限制/规范就称为“列约束”
(1)主键约束 —— PRIMARY KEY
<span style="font-size: 14px;"> 声明为主键的列上,不能出现重复值,也不能出现NULL值,所有的记录会自动按照主键列上值由小到大排序 —— 因此一个表中至多只能有一个主键列。<br/></span>
(2)非空约束 —— NOT NULL
<span style="font-size: 14px;">声明为非空的列,不能出现NULL,但可以出现重复值。<br/></span>
(3)唯一约束 —— UNIQUE
<span style="font-size: 14px;">声明为唯一约束的列,不能出现重复的值,但可以出现NULL,且允许多个NULL出现(两个NULL值是不等的)<br/></span>
(4)检查约束 —— CHECK
<span style="font-size: 14px;">检查约束可以检查新插入的数据是否满足指定的条件,如:<br/>student( age INT CHECK(age>=18 AND age<=60) )<br>MySQL不支持此约束!<br></span></p> <p><span style="font-size: 14px;">(5)默认值约束 —— DEFAULT</span></p> <pre class="brush:php;toolbar:false"><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>
(6)外键约束 —— FOREIGN KEY...REFERENCES
<span style="font-size: 14px;"> 外键列上可以出现NULL,也可以有重复值,但是必须保证“<br>所有出现的值在另一个表的主键列上存在”——外键列上的值“参考了”另一个表上的主键值。<br></span>
面试题:数据库中主键约束 和 唯一且非空组合 约束有何区别?
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
id INT PRIMARY KEY AUTO_INCREMENT
自增列:只能用于整数列,且必须是主键列。自增列无需手工赋值,会自动采用1/2/3....数列,在当前最大值基础上+1。
注意:SQL标准中没有此关键字,它是MySQL所专有的!
1.简单查询 —— 只查询特定的列
示例:查询出所有员工的姓名、工资、和编号
<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>
2.简单查询 —— 查询所有的列
示例:查询员工的所有信息
SELECT * FROM emp;
3.简单查询 —— 给列取别名
示例:查询出员工姓名,所在部门编号,要求列名用中文呈现
<span style="font-size: 14px;"> SELECT ename AS 姓名, deptId `部门 编号` FROM emp;<br></span>
注意:给列取别名用AS关键字,且可以省略;别名中若有空格,需要用括起来。
4.简单查询 —— 只显示不同的记录
示例:显示出哪些部门编号下有员工
<span style="font-size: 14px;">SELECT DISTINCT deptId <br>FROM emp;<br></span>
说明: distinct:不同的
练习:查询出公司中有哪些性别的员工
<span style="font-size: 14px;">SELECT DISTINCT sex FROM emp;<br></span>
5.简单查询 —— 在查询时执行计算
示例:计算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>
6.简单查询 —— 查询结果集的排序
示例:查询出所有员工信息,按工资由小到大排列
<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>
7.简单查询 —— 条件查询
示例:查询出编号为5的员工所有信息
<span style="font-size: 14px;">SELECT * FROM emp<br>WHERE eid=5 ;<br></span>
8.简单查询 —— 模糊条件查询
示例:查询出姓名中包含字母E的员工所有信息
<span style="font-size: 14px;">SELECT * FROM emp<br>WHERE ename LIKE '%E%';<br>#WHERE ename='%E%'; #错误写法!<br></span>
SQL通配符: 下面两个通配符必须与LIKE组合应用
% 匹配任意多个任意字符
_ 匹配一个任意字符
9.简单查询 —— 分页查询
分页查询:若数据库中的满足条件的记录行数太多,一般会采取“一页一页”的方式逐步展示给用户。
不同的数据库实现分页查询语法各不相同,MySQL中的分页查询时最简单的!形如:
<span style="font-size: 14px;">SELECT ...<br>FROM ...<br>WHERE ...<br>ORDER BY ...<br>LIMIT start, count ;<br></span>
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() —— 聚合函数
示例:查询出所有员工的总数量
<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; #错误写法
子查询:在一条语句(增删改查)中又嵌入了一条SELECT语句
示例:查询出“研发部”所有员工的信息
步骤1:到部门表查询出研发部对应的部门编号,如10
<span style="font-size: 14px;">SELECT did FROM dept <br>WHERE dname='研发部';<br></span>
步骤2:到员工表查询部门编号为10的员工信息
<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>
<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>
DDL: Data Define Language,数据定义语言——定义列
<span style="font-size: 14px;"> CREATE / DROP / ALTER / TRUNCATE<br></span>
DML: Data Manipulate Language,数据操作语言——操作行
<span style="font-size: 14px;"> INSERT / DELETE / UPDATE<br></span>
DQL: Data Query Language,数据查询语言——不影响数据
<span style="font-size: 14px;"> SELECT<br></span>
DCL: Data Control Language,数据控制语言——控制权限
<span style="font-size: 14px;"> GRANT / REVOKE<br></span>
小知识: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 지식 포인트 요약 및 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!