一、SQL概述

SQL是什么?

Structured Query Language:结构化查询语言

SQL分为四类

DQL(数据查询语言)
用来查询数据库中的数据,包括select等
DML(数据操作语言)
插入、删除和修改数据库中的数据,包括insert,update,delete等
DDL(数据定义语言)
用来建立数据库、数据库对象和定义表的列,包括create,drop,alter等
DCL(数据控制语言)
用来控制存取许可、存取权限等,包括grant,revoke,commit,rollback等

这里采用的分类方法采用的是ANSI SQL的标准。 DML : Data Manipulation Language DCL : Data Control Language DQL : Data Query Language DDL : Data Definition Language

运算符

运算符:一种符号,它是用来进行列间或者变量之间的比较和数学运算的
运算符包括算术运算符、赋值运算符、比较运算符、逻辑运算符
image-20201216211755803.png
image-20201216211817566.png
image-20201216211842580.png

注释

  1. -- 这个注释直到该行结束(注意--后有空格)
  2. #这个注释直到该行结束
  3. /*这是行中间的注释*/
  4. /*这是多行的注释
  5. 这是多行的注释*/

二、DML

单行插入

语法
insert into 表名 [(列名,…)] values(值,…)
示例:

  1. insert into students (student_no,student_name,password,sex,phone,address,birthday,email,grade_id)
  2. values('1001','张青裁',default,'M',null,'上海松江','1988-02-26','ZQC@Sohu.com',0) ;

注意事项

  1. SQL语句不区分大小写
  2. 如果不写列名,代表给所有列(包括自增列)赋值
  3. 如果写列名,列和值的数量、类型一致
  4. 表名,列名直接写,不能加引号
  5. 文本类型和日期类型需要用单引号括住,数值类型直接写
  6. 不能违反任何约束
  7. 所以符号都是英文的
  8. 如果要插入默认值,可以写 default,也可以不写列名

    多行插入

    方式一

    通过INSERT SELECT语句将现有表中的数据添加到已存在的表中
    语法
    1. insert into 表名(列名,...)
    2. select 列名,...
    3. from 源表名

    mysql和Oracle都可以使用

示例:

  1. -- students表中student_name,address,email的数据放入address_list表的姓名,地址,电子邮件中
  2. insert into address_list (姓名,地址,电子邮件)
  3. select student_name,address,email
  4. from students

方式二

通过UNION关键字合并数据进行插入
语法

  1. insert into 表名[(列名,...)]
  2. select 值,.. union
  3. ...
  4. select 值,...

只有mysql可以用 注意:值中不能有default

示例:

  1. insert students (student_name,grade_id,sex)
  2. select '张可',7,1 union
  3. select '李扬',4,0 union
  4. select '杨晓',2,0 union
  5. select '汤美',3,0 union
  6. select '苏三东',7,1 union
  7. select '王立岩',3,1 union
  8. select '张伟',7,1 union
  9. select '陈刚',4,1 union
  10. select '王娟娟',7,0

方式三

使用多个(),一个()代表一行数据
语法

  1. insert into 表名 [(列名,…)]
  2. values (值,…), (值,…)...

只有mysql可以用

示例:

  1. insert into students(name,grade_id)
  2. values('张三',1),
  3. ('李四',1),
  4. ('王五',1)

修改

语法

  1. update 表名 set 列=值,...
  2. [where 列名 运算符 值]

注意:多个条件使用逻辑运算符间隔

判空

判空条件的写法:where 列名 is null
假空值:where 列名= ''

— 此为表里是空的值而非null

非空条件的写法:where 列名 is not null
示例:

  1. -- 把所有学生的性别改为0
  2. update students set sex = 0;
  3. -- 把地址是石家庄的学生地址改为北京
  4. update students
  5. set address ='北京'
  6. where address = '石家庄';
  7. -- 所有95分以下的学生成绩每人加5
  8. update result
  9. set student_result = student_result + 5
  10. where student_result <= 95
  11. -- 把所有邮箱是空的学生邮箱改为未知
  12. update students
  13. set email ='未知'
  14. where email is null;

删除

delete

语法
delete from 表名 [where 列名 运算符 值]
示例:

  1. -- 删除学生表中的所有学生
  2. delete from 学生表;
  3. -- 删除学号是0010012的学生
  4. delete from 学生表 where 学号 ='0010012';

truncate

语法
truncate table 表名;

区别

delete 可以删除所有数据,也可以删除一部分数据,删除后自增列不受影响,数据正被使用中不能删除
truncate 只能删除所有数据,删除后自增列重新编号,不能删除有外键关系的主表数据

三、导入导出数据

SQL文件导入导出

右键数据库
文件导入:运行SQL文件
文件导出:转储SQL文件
clip_image001.png

导入Excle数据

clip_image003.jpg
clip_image004.png
clip_image005.pngclip_image006.pngclip_image007.pngclip_image008.png
clip_image009.png
clip_image010.png

导出Excle

clip_image012.jpgclip_image013.pngclip_image014.pngclip_image015.pngclip_image016.png
clip_image017.png

四、命令备份和还原

cmd中输入命令

备份成SQL文件

语法

  1. -- 导出一个数据库
  2. mysqldump -u用户名 -p密码 数据库名 [表名]>sql文件路径
  3. -- 导出几个数据库
  4. mysqldump -u用户名 -p密码 ---database 数据库1 [数据库2 数据库3...]>sql文件路径
  5. -- 导出所有数据库
  6. mysqldump -u用户名 -p密码 --all--database>sql文件路径

示例:

  1. mysqldump -uroot -p1234 test>d:\test.sql #导出一个数据库
  2. mysqldump -uroot -p1234 test users>d:\users.sql #导出一个表
  3. mysqldump -uroot -p1234 ---database test1 test2>d:\te.sql #导出几个数据库
  4. mysqldump -uroot -p1234 --all--database>d:\all.sql #导出所有数据库

用SQL文件还原

mysql -u用户名 -p密码 数据库名<sql文件
示例:
mysql -uroot -p1234 test < d:\bak\0101.sql

五、MySQL批量导入导出Excel、txt数据

1、Excel文件

导出数据到EXCEL文件

  1. select *
  2. into outfile "C:\\Users\\Administrator\\Desktop\\data_out.xls" from bi_admin;

注意存储路径包含的的“\”需要转译

从EXCEL文件导入数据

第一种方法
excel数据做处理,另起一列用公式,对之前列所需数据拼写在sql语句,此处只有两列数据
公式为:=CONCATENATE(“insert into bi_admin(name,psd) values(‘“,A1,”‘,’”,B1,”‘);”)
16190113-f1ea3b42242a4e029b104e1b8dbade70.jpg
然后鼠标点住C1单元格的右下角一直拖拽下去,为所有要执行sql语句的行插入公式
将所有sql语句放到mysql中执行即可
第二种方法
将excel文件转为txt格式,然后再导入mysql中
首先将excel文档另存成CSV(逗号分隔)文档
16192348-c3cdb6cd49a04d609b417e5174272a94.jpg
用记事本的打开方式打开刚刚保存的.csv文件,我们发现,列与列之间用逗号(,)隔开
16192441-1fdfd60aeb7c4b86adddd66abaf27ded.jpg
将其另存为.txt文件,并且编码要选择UTF-8
16192611-d832604aa4cb4d1281d7a421433d15cd.jpg
最后执行下面sql语句即可

  1. load data local infile "C:\\Users\\Administrator\\Desktop\\data_in.txt"
  2. into table bi_admin(name,psd)
  3. fields terminated by ','
  4. lines terminated by '\n'

2、txt文件

导出数据到txt文件

  1. select *
  2. into outfile "C:\\Users\\Administrator\\Desktop\\data_out.txt"
  3. FIELDS TERMINATED BY "\t"
  4. lines terminated by "\r\n"
  5. from bi_admin;

字段之间的分隔和记录(行)之间的分隔默认是\t(即Tab)和\n。但可以改变,如: FIELDS TERMINATED BY ‘,’ —字段用,进行分隔 LINES TERMINATED BY ‘;’ —记录用; 进行分隔

从txt文件导入数据

  1. load data local infile "C:\\Users\\Administrator\\Desktop\\data_in.txt"
  2. into table bi_admin(name,psd);

txt数据格式符合要求,每一项之间用Tab键进行分隔,如果该字段为NULL,则用\N表示

16191425-41448e5e087f428a999170f926fe9d07.jpg

总结

1.请写出单行插入的语法【重要】

  • insert into 表名 [(列1,列2,…)] values(值1,值2,…)
  • 插入的注意事项:【了解】

    • SQL语句不区分大小写
    • 如果不写列名,代表给所有列(包括自增列)赋值
    • 如果写列名,列和值的数量、类型一致
    • 表名,列名直接写,不能加单引号,
    • 文本类型和日期类型需要用引号括住,数值类型直接写
    • 不能违反任何约束
    • 所以符号都是英文的
    • 如果要插入默认值,可以写 default(不能加引号),也可以不出列名

      2.请写出多行插入的语法

      union
      INSERT INTO 表名(列名)
      SELECT 列值 UNION
      SELECT 列值 UNION
      SELECT 列值
      insert-select
      INSERT INTO 表名(列名,…)
      SELECT 列名,…
      FROM 源表名
      多个()
      Insert into 表名 [(列1,列2,…)]
      values (值1,值2,…),… (值1,值2,…)

      3.请写出修改的语法【重要】

  • update 表名 set 列1=值1,列2=值2 [where 更新条件]

    4.请写出删除的语法【重要】

  • delete from 表名 [where 删除条件]

    5.mysql的运算符有哪些?

  • 算术运算符: + - *(乘法) /(除法) %(取余)

  • 赋值运算符:=
  • 比较运算符:等于=、大于>、小于<、不等于<>、大于等于>=、小于等于<=
  • 逻辑运算符: AND(且) OR(或者) NOT(非)

    6.SQL语句分类及各类中包含的命令【重要】

  • DQL 数据查询语言,包含select

  • DML 数据操作语言, 包含insert ,update , delete
  • DDL 数据定义语言,包含create table 建表,drop table 删表等
  • DCL 数据控制语言,包含 grant,revoke等

    7.mysql注释

    — 这个注释直到该行结束(注意—后有空格)
    #这个注释直到该行结束
    /这是行中间的注释/
    /这是多行的注释
    这是多行的注释
    /