SQL通用语法
SQL语句分类
DDL data definition language : 用来创建数据库,创建表,创建表中的字段,创建索引。因此成为 数据定义语言
DML data manipulation language 有了数据库和表以及字段后,那么我们就需要给这个表中 添加数据,删除数据,改动数据,这些都是对数据有改动的行为,因此 叫做 数据操作语言 manipulation中文是 操作的意思
DQL data query language ,DML完成了对于表中数据的增删改,但是没有查询功能,这个DDL就是完成对 数据库中的表的数据进行查询功能的
DCL data control language,我们有了数据库,表,也有了增删改查,还有一个安全性问题,就是谁能来操作这个数据库中的表,因此对应的有了 数据控制语言,功能就是用来创建数据库用户,控制数据库的访问权限的,这里还有 一个问题 视频中没有讲---即一个数据库有多张表,DCL能做的精细化程度是什么样子的呢?能做到对于某一张表的控制?还是只能 做到对于 某一个数据库的控制?
简单理解版
- DDL:数据定义语句 【create 表,数据库…】
- DML:数据操作语句【增加insert,修改update,删除delete】
- DQL:数据查询语句【select】
- DCL:数据控制语句【管理数据库:用户权限grant revoke】
DDL data definition language : 创建数据库,使用数据库,删除数据库,查询所有数据库,查询当前数据库
创建数据库
CREATE DATABASE [IF NOT EXISTS] <数据库名>
[DEFAULT CHARSET <字符集名>]
[COLLATE <校对规则名>];
CREATE DATABASE [IF NOT EXISTS] <数据库名>
[DEFAULT CHARSET <字符集名>]
[COLLATE <校对规则名>];
注意的是:我们一般 设置 字符集名为 utf8mb4 ,而不是 utf8;这是因为utf8是3个字符组成的,为了兼容一些4字节的,因此使用 utf8mb4
[ ]中的内容是可选的。语法说明如下:
<数据库名>:创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头,尽量要有实际意义。注意在 MySQL 中不区分大小写。
IF NOT EXISTS:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操作。此选项可以用来避免数据库已经存在而重复创建的错误。
[DEFAULT CHARSET <字符集名>]:指定数据库的字符集。指定字符集的目的是为了避免在数据库中存储的数据出现乱码的情况。如果在创建数据库时不指定字符集,那么就使用系统的默认字符集utf8。
[COLLATE <排序规则>]:指定字符集的排序规则,常用的utf8_bin(区分大小写),默认是utf8_general_ci(不区分大小写)。在字符集是utf-8的时候,COLLATE才能设置 utf8_bin 或者 utf8_general_ci 后面的测试中,char set utf8mb4, 但是测试会报错。
MySQL 的字符集(CHARACTER)和校对规则(COLLATION)是两个不同的概念。字符集是用来定义 MySQL 存储字符串的方式,校对规则定义了比较字符串的方式。
例如:创建一个使用utf8字符集,校验规则为 utf8_bin 的 itcast 数据库
create database if not exists itcast2
default charset utf8
collate utf8_general_ci;
测试验证
mysql> create database if not exists itcast2
-> default charset utf8
-> collate utf8_general_ci;
Query OK, 1 row affected, 2 warnings (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| itcast |
| itcast2 |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
--------------------------------------------------
测试
create database if not exists itcast2
default charset utf8mb4
collate utf8_general_ci;
错误
mysql> create database if not exists itcast2
-> default charset utf8mb4
-> collate utf8_bin;
ERROR 1253 (42000): COLLATION 'utf8_bin' is not valid for CHARACTER SET 'utf8mb4'
mysql>
原因:当地charset 为 utf8时,collate才能设置为 utf8_general_ci或者utf8_bin
我们当前的charset 是 utf8mb4 因此 collate的设置值是有问题的。
--------------------------------------------------------
create database if not exists itcast2
default charset utf8mb4
collate utf8_bin;
错误
mysql> create database if not exists itcast2
-> default charset utf8mb4
-> collate utf8_general_ci;
ERROR 1253 (42000): COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4'
mysql>
-------------------------------------------------------------
create database if not exists itcast2
default charset utf8mb4;
成功
mysql> create database if not exists itcast2
-> default charset utf8mb4;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| itcast |
| itcast2 |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
使用数据库
USE 数据库名;
USE 数据库名;
例子
use itcast;
mysql> use itcast;
Database changed
删除数据库
drop database [IF EXISTS ] 数据库名;
drop database [IF EXISTS ] 数据库名;
测试:
drop database IF EXISTS itcast1;
mysql> drop database IF EXISTS itcast1;
Query OK, 0 rows affected (0.02 sec)
mysql>
查询所有数据库
show databases;
SHOW DATABASES [LIKE '数据库名'];
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| itcast |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
show databases LIKE 'mysql';
mysql> show databases LIKE 'mysql';
+------------------+
| Database (mysql) |
+------------------+
| mysql |
+------------------+
1 row in set (0.00 sec)
show databases LIKE 'my';
我们的本意是 查找 只要有字符串 my的数据库,但是查不到,说明 like 的用法不对
mysql> show databases LIKE 'my';
Empty set (0.00 sec)
改动,使用%通配符,%表示任意个字符
show databases LIKE '%my%';
mysql> show databases LIKE '%my%';
+-----------------+
| Database (%my%) |
+-----------------+
| mysql |
+-----------------+
1 row in set (0.00 sec)
show databases LIKE '%i%';
mysql> show databases LIKE '%i%';
+--------------------+
| Database (%i%) |
+--------------------+
| information_schema |
| itcast |
+--------------------+
2 rows in set (0.00 sec)
查询当前数据库
select database();
注意这里用的是函数;
mysql> select database();
+------------+
| database() |
+------------+
| itcast |
+------------+
1 row in set (0.00 sec)