相信学过数据库这门课的人对SQL
都不会陌生,SQL
是结构化查询语言,是一种用来操作RDBMS
的数据库语言,当前的主流关系型数据库都支持使用SQL
语言进行操作, 也就是说可以通过SQL
操作Oracle
, SQL Server
, MySQL
, SQLite
等所有主流的关系型的数据库。
MySQL
是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,后来被Sun公司收购,Sun公司后来又被Oracle公司收购,目前属于Oracle旗下产品。MySQL
数据库开源、免费、不要钱、使用范围广, 跨平台支持性好, 提供了多种语言调用的API
是学习数据库开发的首选。
SQL简介
上面也说了SQL
是一门结构化查询语言,可以用来操作MySQL
等主流关系型数据库。那么SQL
语句可以分为哪几类呢?让我们一起来看看。
SQL语句主要分为:
- DQL:数据查询语言,用于对数据进行查询,如select
- DML:数据操作语言,对数据进行增加、修改、删除,如insert、udpate、delete
- TPL:事务处理语言,对事务进行处理,包括begin transaction、commit、rollback
- DCL:数据控制语言,进行授权与权限回收,如grant、revoke
- DDL:数据定义语言,进行数据库、表的管理等,如create、drop
- CCL:指针控制语言,通过控制指针完成表的操作,如declare cursor
对于Web开发的程序员来讲,重点是数据的CURD(增删改查),必须熟练编写DQL、DML,能够编写DDL完成数据库、表的操作, 其它类型语句如TPL、DCL、CCL了解即可。
SQL
是一门特殊的语言,专门用来操作关系数据库- 不区分大小写
命令行连接
这里以Linux
的发行版Ubuntu 16.04
操作系统为例演示命令行脚本,其他操作系统(如Windows)类似,都是大同小异的操作。
- 打开终端,运行命令:
1 | mysql -uroot -p |
Note:Windows
系统安装完MySQL
数据库后,直接在开始菜单里面找到MySQL 8.0 Command Line Client - Unicode
程序, 点击打开,直接输入密码即可登录,无需再输入mysql -uroot -p
命令
- 连接成功后如下图:
- 退出登录:
1 | quit 和 exit |
- 登陆成功后,输入以下命令查看效果:
1 | 查看版本:select version(); |
数据库操作
- 查看所有数据库
1 | show databases; |
- 使用数据库
1 | use 数据库名; |
- 查看当前使用的数据库
1 | select database(); |
- 创建数据库
1 | create database 数据库名 charset=utf8; |
- 查看数据库的创建语句
1 | show create database 数据库名; |
- 删除数据库
1 | drop database 数据库名; |
数据表操作
- 查看当前数据库中所有表
1 | show tables; |
- 查看表结构
1 | desc 表名; |
- 创建表
auto_increment
表示自动增长
1 | CREATE TABLE table_name( |
例:创建班级表
1 | create table classes( |
创建学生表
1 | create table students( |
- 修改表-添加字段
1 | alter table 表名 add 列名 类型; |
- 修改表-修改字段:重命名版
1 | alter table 表名 change 原名 新名 类型及约束; |
- 修改表-修改字段:不重命名版
1 | alter table 表名 modify 列名 类型及约束; |
- 修改表-删除字段
1 | alter table 表名 drop 列名; |
- 删除表
1 | drop table 表名; |
- 查看表的创建语句
1 | show create table 表名; |
数据的增删改查(CURD)
- CURD的解释: 代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)
查询
- 查询所有列
1 | select * from 表名; |
- 查询指定列
- 可以使用
as
为列或表指定别名
- 可以使用
1 | select 列1,列2,... from 表名; |
增加
格式:INSERT [INTO] tb_name [(col_name,…)] {VALUES | VALUE} ({expr | DEFAULT},…),(…),…
- 说明:主键列是自动增长,但是在全列插入时需要占位,通常使用
0
或者default
或者null
来占位, 插入成功后以实际数据为准 - 全列插入:值的顺序与表中字段的顺序对应
1 | insert into 表名 values(...) |
- 部分列插入:值的顺序与给出的列顺序对应
1 | insert into 表名(列1,...) values(值1,...) |
- 上面的语句一次可以向表中插入一行数据,还可以一次性插入多行数据,这样可以减少与数据库的通信
- 全列多行插入:值的顺序与给出的列顺序对应
1 | insert into 表名 values(...),(...)...; |
- 部分列多行插入:值的顺序与给出的列顺序对应
1 | insert into 表名(列1,...) values(值1,...),(值1,...)...; |
修改
格式: UPDATE tbname SET col1={expr1|DEFAULT} [,col2={expr2|default}]…[where 条件判断]
1 | update 表名 set 列1=值1,列2=值2... where 条件 |
删除
DELETE FROM tbname [where 条件判断]
1 | delete from 表名 where 条件 |
- 逻辑删除,本质就是修改操作
1 | update students set isdelete=1 where id=1; |
备份
- 运行
mysqldump
命令
1 | mysqldump –uroot –p 数据库名 > python.sql; |
恢复
- 连接
mysql
, 创建新的数据库, - 退出连接,执行如下命令:
1 | mysql -uroot –p 新数据库名 < python.sql |