SQL操作所有关系型数据库的规则
SQL通用语法:
- 1.SQL语句可以单行或者多行书写,以分号结尾
- 2.可使用空格和锁进来增加语句的可读性
- 3.SQL 语句不区分大小写,关键字建议使用大写
- 4.三种注释
- 单行注释 — (两个横岗,一个空格)或者 #
- 多行注释 /* */
SQL分类
数据定义语言(DDL)
常用的有CREATE和DROP,用于在数据库中创建新表或删除表,以及为表加入索引等
数据查询语言(DQL: Data Query Language)
数据检索语句,用于从表中获取数据。通常最常用的为保留字SELECT,并且常与FROM子句、WHERE子句组成查询SQL查询语句。
数据操纵语言(DML:Data Manipulation Language)
主要用来对数据库的数据进行一些操作,常用的就是INSERT、UPDATE、DELETE。
数据控制语言(DCL)
通过GRANT和REVOKE,确定单个用户或用户组对数据库对象的访问权限。授权的;
DDL:操作数据库
1.操作数据库:CRUD
(1)C(create):创建
create datebase;
(2)R(Retrietrieve):查询
实例1:查看所有数据库
四个项目分别对应了安装路径中的文件:其中information_schema不是一个文件夹,而是一个视图,所以只有三个文件
mysql里边放了很多的核心数据
performance_schema 性能提升有关的数据库,里边有很多的数据库
前三个尽量不要去修改
test:空的数据库,使用也不会使用到
实例1.1 查看字符集:show create database;
实例2:创建并查看数据库
先创建一个名为 test_db 的数据库:
mysql> CREATE DATABASE test_db;
Query OK, 1 row affected (0.12 sec)
创建之前判断是否存在:
create database if not exists test_db1;
创建默认的字符集是UTF8,设定其他字符集:create database db3 character set gbk;
实例3:创建db4数据库,判断是否存在,并制定字符集为gbk
show database if not exists db4 character set dbk;
实例3:使用 LIKE 从句
先创建三个数据库,名字分别为 test_db、db_test、db_test_db。
1) 使用 LIKE 从句,查看与 test_db 完全匹配的数据库:
mysql> SHOW DATABASES LIKE 'test_db';
+--------------------+
| Database (test_db) |
+--------------------+
| test_db |
+--------------------+
1 row in set (0.03 sec)
2) 使用 LIKE 从句,查看名字中包含 test 的数据库:
mysql> SHOW DATABASES LIKE '%test%';
+--------------------+
| Database (%test%) |
+--------------------+
| db_test |
+--------------------+
| db_test_db |
+--------------------+
| test_db |
+--------------------+
3 row in set (0.03 sec)
3) 使用 LIKE 从句,查看名字以 db 开头的数据库:
mysql> SHOW DATABASES LIKE 'db%';
+----------------+
| Database (db%) |
+----------------+
| db_test |
+----------------+
| db_test_db |
+----------------+
2 row in set (0.03 sec)
4) 使用 LIKE 从句,查看名字以 db 结尾的数据库:
mysql> SHOW DATABASES LIKE '%db';
+----------------+
| Database (%db) |
+----------------+
| db_test_db |
+----------------+
| test_db |
+----------------+
2 row in set (0.03 sec)
(3)U(Update):修改
ALTER DATABASE 来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为:
- ALTER DATABASE [数据库名] {
- [ DEFAULT ] CHARACTER SET <字符集名> |
- [ DEFAULT ] COLLATE <校对规则名>}
语法说明如下:
- ALTER DATABASE 用于更改数据库的全局特性。
- 使用 ALTER DATABASE 需要获得数据库 ALTER 权限。
- 数据库名称可以忽略,此时语句对应于默认数据库。
- CHARACTER SET 子句用于更改默认的数据库字符集。
实例:alter database db3 character set utf8;
(4)D(delete):删除
drop database db4;
(5)使用数据库
查询当前正在使用的数据库名称
select database();查看当前正在使用的数据库名称
USE test_db;使用函数据库
DDL :操作表
(1)增
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
…….
列名n 数据类型n
);
* 注意:最后一列,不需要加逗号(,)
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday data,
iinsert_time timestamp
);
(2)删
drop table 表明
drop table if exists 表名
实例:
create table 表明 like 别复制的表名;
(3)改(update)
1.修改表名
alter table 表明 rename to 新的表名
2.修改表的字符集
alter table stu character set utf8;
3.添加一列
alter table 表名 add 列明 数据类型
4.修改列名称,类型
alter table 表名 changel 列名 新列别 新数据类型;
alter table 表名 modify 列名 新数据类型;
5.删除列
alter table 表名 drop 列名
(4)查(retrieve)
查询所有数据库中的表名称:show tables;
查询表结构:desc 表名;
SQL数据类型:
1.整数类型
INT、TINYINT、SMALLINT、MEDIUMINT、BIGINT
2.小数类型
FLOAT、DOUBLE、DECIMAL
FLOAT 类型的取值范围如下:
- 有符号的取值范围:-3.402823466E+38~-1.175494351E-38。
- 无符号的取值范围:0 和 -1.175494351E-38~-3.402823466E+38。
DOUBLE 类型的取值范围如下:
- 有符号的取值范围:-1.7976931348623157E+308~-2.2250738585072014E-308。
- 无符号的取值范围:0 和 -2.2250738585072014E-308~-1.7976931348623157E+308。
注意:在 MySQL 中,定点数以字符串形式存储,在对精度要求比较高的时候(如货币、科学数据),使用 DECIMAL 的类型比较好,另外两个浮点数进行减法和比较运算时也容易出问题,所以在使用浮点数时需要注意,并尽量避免做浮点数比较。
3.日期类型
YEAR、TIME、DATE、DTAETIME、TIMESTAMP
4.字符串类型
5.二进制类型
BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB
数据操纵语言:DML
1.添加数据
insert into 表名(列名1,列名2,列名3,….列名n) values(值1,值2,……值n)
1.列名和值要一一对应
2.如果表名后,不定义列名,则默认给所有列添加值
3.除了数字类型,其他类型需要使用引号因起来
2.删除数据
语法:delete from 表名 [where 条件]
注意:
如果不加条件,则删除表中所有记录 delete from stu;
truncate table stu;删除表,再创建一个一模一样的空表
3.修改数据
update 表名 set 列名1=值1,列名2 = 值2,….【where 条件】
例如:update stu set age = 117 where id=3;
update set age = 117,score=100 where id=2;
如果不加任何条件,则将表中的数据全部修改
DQL:查询语句
1.排序查询
order by 子句
*order by 排序字段1 排序方式1,排序方式1 排序方式2…….
例子: select * from student order by math –;
ASC 升序 默认
DESC 降序
例子:
数学成绩升序排列: select * from stu order by math ASC;
数序成绩升序排列,如果数序成绩一样,那么按照英语成绩排名:select * from stu order bu math ASC,english ASC; 第二排序条件只有当第一排序条件一样的时候才会去使用
如果有多个排序条件,当前一个一样的时候,才会去判断第二条件
2.聚合函数
3.分组查询
4.分页查询