SQL定义:
用于访问和处理数据库的标准计算机语言
- 结构化查询语言
- 访问和处理数据库
- 基于ANSI编码的计算机语言
RDBMS定义:关系型数据库管理系统,例MySQL
SQL DML 和 DDL
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。
查询和更新指令构成了 SQL 的 DML 部分:
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
SQL 中最重要的 DDL 语句:
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
一、基本登陆退出查看的操作知识点:
- 登陆MySQL:CMD——>"mysql -uroot -p"回车并输入密码
- 查看所有数据库:“show databases;”回车
- 连接/选择数据库:“use <数据库名称>”回车【可不加分号】
- 查看某个数据库中的所有表:“show tables;”回车【记得加分号,查看表之前需要切换到某个具体的数据库,否则会报错】
- 退出MySQL:“quit”/"exit"
二、增
涉及知识点:数据库、表、数据的新建/插入;基本数据类型
- 数据库创建:“create database <数据库名称>;”回车
- 表的创建:“create table <表名> (<列名1 数据类型(数据长度)> ,列名2,列名3...);”【最后一个列名后不需要加逗号】
- 数据的插入:“insert into <表名>(列名1,列名2,列名3...) values(值1,值2,值3);”【列名与值有按序列对照的关系】
三、删
- 删除数据库:dorp database <数据库名>;
- 删除表:drop table <表名>;【前提是切换到某个具体数据库下】
四、改
- 新版本没有数据库名字的修改指令,因为会造成一定安全问题
- 重命名表名有多种方式,以下3种语法效果一样的:rename table <原表名> to <新表名>;
alter table <原表名> rename <新表名>;
alter table <原表名> rename to <新表名>;
3. 对表结构的修改(非必要情况下,勿修改表结构)
1)增加一列基本语句:ALTER TABLE <表名字> ADD COLUMN <列名字 数据类型 约束>;
ALTER TABLE <表名字> ADD <列名字 数据类型 约束>;
增加制定位置列的方法:在以上基本语句末尾添加关键词"first"或:"after <列名>",表示添加到第一列或制定列的后面。
2)删除一列:ALTER TABLE <表名字> DROP COLUMN <列名字>;
ALTER TABLE <表名字> DROP <列名字>;
3)重命名列:alter table <表名字> change <原列名> <新列名 数据类型 约束>;
ps:新列名的数据类型不能缺;原列名与新列名可以一样,此时说明修改了数据类型和约束;当数据类型修改时可能会造成数据丢失的风险,故需谨慎使用。
4)修改列的数据类型:除了可以用change关键字,还可以用”alter table modify <列名 新数据类型>;“
ps:再次提醒,修改数据类型必须小心,因为这可能会导致数据丢失。在尝试修改数据类型之前,请慎重考虑。
4.对表内容的修改
1)修改表中的一个或多个值:UPDATE <表名字> SET 列1=值1,列2=值2 WHERE 条件;
where条件的使用可以达到精确修改的目的。
2)删除某一行或多行:delete from <表名> where <条件>;
五、查
所涉及的知识点:
- SELECT :使用最频繁最重要的查询语句,与各种限制条件关键词的搭配形成丰富的查询功能。
- 数学符号条件
- AND OR IN
- 通配符
- 排序
- SQL 内置函数和计算
- 子查询与连接查询
select基本语句:“select <一个或多个逗号分开的指定列名/*> from <指定表名>“;
select进阶使用方法:
A.可在基本语句末尾加”where <限制条件>”构成限制性筛选查询
其中限制条件种类如下:1)数学符号条件<、>、<=、>=、=,如 select age from department where age>25表示查询当age大于25的age字段。
2)逻辑运算符AND 、OR连接多个限制条件,形式为where 条件一 and/or 条件二。
3)in 和 not in :筛选“在”或“不在”某个范围值的数据,例where name in/not in ('Tom','Rose')。
4)like与通配符'_'、'%'配合使用:可实现模糊查询,其中'_'表示一个未指定字符,‘%’表示不定个未指定符,例where name like '_O%'。
B.可在基本语句末尾加"order by <所选排序字段> <无/asc/desc>"对查询结构进行按所选字段的升序或降序展示。
ps:默认情况下为升序,末尾加“asc”表示升序排序,末尾加“desc”表示降序排序。
C.sql内置函数和计算,有如下五种
例:select count(salary),sum(salary) from employee;
D.子查询:用于当需要处理多个表且查询来源于同一个表时才能查询到所需信息时。
例:
其中having与where的作用相似,说明要进行条件筛选查询,区别在于having用于分组后的条件筛选。
E.连接(join)查询:查询数据来源于两个或多个表时使用。基本思想是把多个表连接(join)成一个表使用。
以下两例效果等同:
(使用join on 语句)
六、约束
概念:约束是对表中行或列数据的一种限制,保证了数据的有效性和完整性。
一般有如下几种约束:
主键约束primary key
primary key 用于约束表中的一行,作为这一行的唯一标识符,不能有重复记录且不能为空(为了便于标识和定位某一行,所以十分重要)
设置方法:a.在创建表时,直接在所选列名的数据类型后+“primary key”
b.在创建表时,与字段定义同结构,添加语句:“constraint <自定义主键名> primary key (<所选字段>)”
c.复合主键:制定多列作为符合主键,同方法b添加语句:“constraint <自定义主键名> primary key (<字段1,字段2>)”
默认值约束 defaull
当有defaull约束的列插入数据为空时,使用默认值记录。
设置方法:在创建表时,在字段定义语句最后加上“defaull ’<默认值>‘”
唯一约束unique
unique规定所选列不能有重复值,该列数据有唯一性。
设置方法:在创建表时,添加语句“unique (<所选列名>);”
外键foreign key
foreign key 既可以保证数据完整性,也可以提现表之间的关系。
一个表可以有多个外键,每个外键必须 REFERENCES (参考) 另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。
设置方法:在创建表时,添加语句:“constraint <自定义外键名> foreign key(所选字段) reference <另一个表名> (<另一个表的字段>)”
非空约束not null
not null 顾名思义,在插入数据时限制必须非空。
设置方法:在创建表时,在字段定义语句后添加“not null”
七、其它
1.索引:
索引是一种与表有关的结构,它的作用相当于书的目录,可以根据目录中的页码快速找到所需的内容。
当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索:将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录。这样做会消耗大量数据库系统时间,并造成大量磁盘 I/O 操作。
而如果在表中已建立索引,在索引中找到符合查询条件的索引值,通过索引值就可以快速找到表中的数据,可以大大加快查询速度。
对一张表中的某个列建立索引,有以下两种语句格:alter table <表名> add index <索引名 (列名)>;
create index <索引名> on <表名 (列名)>;
在使用 SELECT 语句查询的时候,语句中 WHERE 里面的条件,会自动判断有没有可用的索引。
注意:一些字段不适合创建索引,比如性别,这个字段存在大量的重复记录无法享受索引带来的速度加成,甚至会拖累数据库,导致数据冗余和额外的 CPU 开销。
2.视图
视图是从一个或多个表中导出来的表,是一种虚拟存在的表。它就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样,用户可以不用看到整个数据库中的数据,而只关心对自己有用的数据。
注意理解视图是虚拟的表:
- 数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中;
- 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据;
- 视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变;
- 在使用视图的时候,可以把它当作一张表。
创建视图的语句格式为:REATE VIEW 视图名(列a,列b,列c) AS SELECT 列1,列2,列3 FROM 表名字;
注意:可见创建视图的语句,后半句是一个 SELECT 查询语句,所以视图也可以建立在多张表上,只需在 SELECT 语句中使用子查询或连接查询。
3.文件导入
1)sql文件导入:source <文件绝对路径>;
SQL 文件导入相当于执行该文件中包含的 SQL 语句,可以实现多种操作,包括删除,更新,新增,甚至对数据库的重建。
2)数据文件导入:数据文件导入方式只包含数据,导入规则由数据库系统完成。
由于导入导出大量数据都属于敏感操作,根据 mysql 的安全策略,导入导出的文件都必须在指定的路径下进行,在 mysql 终端中查看路径变量的语句:show variables like '%secure%'; 需要把数据文件移入安全路径下才能进行导入导出工作。
导入语句:load data infile '文件路径' into tabble 表名;
4.文件导出
导出与导入是相反的过程,是把数据库某个表中的数据保存到一个文件之中。
导出语句基本格式为:SELECT 列1,列2 INTO OUTFILE '文件路径和文件名' FROM 表名字;