SQL通用语法
SQL语句可以单行或多行书写,以分号结尾。
SQL语句可以使用空格/缩进来增强语句的可读性。(空格与缩进个数没有限制)
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
注释:
单行注释:-- 注释内容 或 #
注释内容多行注释:/* 注释内容 */
SQL分类
分类 | 全称 | 说明 |
DDL |
Data Definition Language |
数据定义语言,用来定义数据库对象(数据库,表, 字段) |
DML |
Data Manipulation Language |
数据操作语言,用来对数据库表中的数据进行增删改 |
DQL |
Data Query Language |
数据查询语言,用来查询数据库中表的记录 |
DCL |
Data Control Language |
数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
DDL
DCL:创建用户,以及控制用户的权限,这个创建出来的用户能够操作哪些数据库里的哪些表,能够增删改查当中的哪些操作
DDL-数据库操作
1.查询
查询所有数据库:一次查询当前数据库服务器中所有数据库
show databases ;
show与databases之间有空格,这里面的空格可以有一个,也可以有多个
(安装完mysql数据库中自带的数据库)
查询当前数据库:
select database() ;
括号不能漏掉
2.创建
创建数据库
注意!我们可以去增加【if not exists】(如果数据库名称不存在,我则创建,如果存在,则不执行任何操作)
【default charset】去指定当前数据库所使用的字符集,比如UTF8这样的字符集,当然这个也是可以省略的,因为数据库有默认的字符集
【collate】去指定排序规则
所框选的部分都是可选的
案例:创建一个pythondog数据库, 使用数据库默认的字符集
create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序规则 ] ;
出现Query OK,说明当前数据库创建成功,创建成功后,我们可以再次输入指令,show databases;查看创建的数据库 pythondog
此时我再去执行一下 create database pythondog; 它会不会再创建数据库呢?不会,当我再去执行时会报错,返回这么一句话,不能再创建名为pythondog的数据库了,原因是数据库已经存在
由此得出:在同一个数据库服务器中,不能创建两个名称相同的数据库,否则将会报错。
假如不想让这个错误报出,我们的思路是如果数据库已经存在就不要创建,如果不存在就创建,这时我们可以加一个可选项 if not exists,此时不会报错
由此得出:可以通过if not exists 参数来解决这个问题,数据库不存在, 则创建该数据库,如果存在,则不创建。
再次执行查询,我们可以按键盘上的上下键,来查询我们之前用到的SQL语句,之后观察数据库,没有任何变化,如下图:
再次使用SQL语句去创建一个test数据库(运用可选项)此时能不能再创建?可以,因为这个数据库不存在
设置字符集案例:创建一个itczh数据库,并且指定字符集utf8mb4
在mysql中如果设置字符集不建议设置为utf8,因为utf8字符集它的存储的长度是3个字节,比如说一个汉字就3个字节,那在数据库中有些特殊字符是4个字节的,所以这个时候我们推荐使用utf8mb4,它是支持4个字节
此时这个数据库itczh,指定了默认字符集为utf8mb4
3.删除
drop database [ if exists ] 数据库名 ;
假设此时数据库itczh已经不存在了,我们去进行一个删除 ,不去增加可选项,发现会报错,于是增加可选项去处理
结论不再复述,此可选项与上诉创建数据库可选项的功能性类似,由此可以推出:如果删除一个不存在的数据库,将会报错。此时,可以加上参数 if exists ,如果数据库存在,再执行删除,否则不执行删除。
案例:删除数据库itczh
此时发现itczh数据库已经不存在了
4.使用:切换数据库
我们要操作某一个数据库下的表时,就需要通过该指令,切换到对应的数据库下,否则是不能操作的。
use 数据库名 ;
比如,切换到pythondog数据,执行如下SQL:
use pythondog ;
此时代表,我已经切换到pythondog这个数据库了
查询自己在哪个数据库:那假设我已经执行了很多SQL语句了,我怎么知道我当前处在哪个数据库呢?
此时可以使用
select database ;
直接这么执行是错误的,记得在database后面加括号
select database() ;
执行如下: