SQL概述#
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言
其主要用来进行数据库查询和程序设计
SQL可以用来存取数据 查询数据 更新和管理数据库系统
SQL语句结构#
数据查询语言(DQL)#
其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。
保留字SELECT 是 DQL(也是所有 SQL)用得最多的动词,其他 DQL 常用的保留字有 WHERE, ORDER BY, GROUP BY 和 HAVING。这些 DQL 保留字常与其他类型的 SQL 语句一起使用。
数据操作语言(DML)#
其语句包括动词 INSERT, UPDATE 和 DELETE。 它们分别用于添加,修改和删除表中的行。也称为动作查询语言
事务处理语言(TPL)#
它的语句能确保被 DML 语句影响的表的所有行及时得以更新。
TPL 语句包括 BEGINTRANSACTION, COMMIT 和 ROLLBACK。
数据控制语言(DCL)#
它的语句通过 GRANT 或 REVOKE 获得许可,确定单个用户和用户组对数据库对象的访问
某些RDBMS 可用 GRANT 或 REVOKE 控制对表单个列的访问
数据定义语言(DDL)#
其语句包括动词 CREATE 和 DROP。 在数据库中创建新表或删除表( CREAT TABLE 或 DROP TABLE)
其可为表加入索引 同时也是动作查询的一部分
指针控制语言(CCL)#
它的语句,像 DECLARE CURSOR, FETCH INTO 和 UPDATE WHERE CURRENT 用于对一个或多个表单独行的操作。
SQL语句书写#
查看数据库#
Copy
mysql> show databases; # 查看当前存在的数据库
+
| Database |
+
| information_schema |
| mysql |
| performance_schema |
| sys |
+
mysql> show databases\G
* * * * * * * * * * * * * * * * * * * * * * * * * * * 1. row * * * * * * * * * * * * * * * * * * * * * * * * * * *
Database: information_schema
* * * * * * * * * * * * * * * * * * * * * * * * * * * 2. row * * * * * * * * * * * * * * * * * * * * * * * * * * *
Database: mysql
* * * * * * * * * * * * * * * * * * * * * * * * * * * 3. row * * * * * * * * * * * * * * * * * * * * * * * * * * *
Database: performance_schema
* * * * * * * * * * * * * * * * * * * * * * * * * * * 4. row * * * * * * * * * * * * * * * * * * * * * * * * * * *
Database: sys
[root@SR ~ ]# mysql - e "show databases" - uroot - proot123 # - e可以不再mysql的视图下执行sql 语句
+
| Database |
+
| information_schema |
| mysql |
| performance_schema |
| sys |
+
information_schema#
包括数据库名称 数据库表 表栏数据类型等
mysql#
其MySQL的系统库
里面保存账户的权限信息 账户信息等
performance_schema#
其是MySQL的系统库
其包含了MySQL用户信息 权限信息等
sys#
MySQL5.7新增的数据库 主要包含数据库的元信息等
数据库元信息包含数据库名或表名 数据类型 权限等
创建数据库#
Copy
mysql> create database test; # 数据库创建
mysql> show create database test; # 查看数据库的创建过程
+
| Database | Create Database |
+
| test | CREATE DATABASE `test` |
+
# 这样带有连字符或者关键字的名称 需要使用反引号
mysql> create database `test-1 `;
mysql> create database `create `
数据库操作方法#
use + 数据库名称#
Copy
# 使用某个数据库
mysql> use test; # 切换到test这个数据库
Database changed
select database()#
Copy
# 查看当前所属的位置
mysql> select database();
+
| database() |
+
| test |
+
# 如果没有选择数据库则显示null
mysql> select database();
+
| database() |
+
| NULL |
+
select user()#
Copy
# 查看当前登录的用户
mysql> select user ();
+
| user () |
+
| root@localhost |
+
select now();#
Copy
# 查看当前系统时间
mysql> select now();
+
| now() |
+
| 2020 -07 -16 10 :31 :22 |
+
删除数据库#
Copy
# 删库无任何提示 做好跑路的准备
mysql> drop database `test-1 `;
# 数据库本质还是存放在磁盘中 对于linux中一切都是文件 直接删除文件
[root@SR ~ ]# cd / var/ lib/ mysql
[root@SR mysql]# rm - fr test/
# 条件判断删除
mysql> create database test if not exists ; # 如果不存在创建
mysql> drop database if exists test; # 存在删除
创建数据表#
Copy
mysql> create table s student(id int (11 ) ,name varchar (254 ),age int (11 ));
查看表执行命令#
Copy
mysql> show create table student;
+
| Table | Create Table |
+
| student | CREATE TABLE `student` (
`id` int (11 ) DEFAULT NULL ,
`name` varchar (254 ) DEFAULT NULL ,
`age` int (11 ) DEFAULT NULL
) ENGINE= InnoDB DEFAULT CHARSET= latin1 |
+
修改表信息#
修改存储引擎与编码#
Copy
# 上述可以看到存储引擎默认为InnoDB 编码为latin1
mysql> alter table student ENGINE= MYISAM CHARSET= utf8; # 修改默认的存储因为与编码
mysql> show create table student;
+
| Table | Create Table |
+
| student | CREATE TABLE `student` (
`id` int (11 ) DEFAULT NULL ,
`name` varchar (254 ) CHARACTER SET latin1 DEFAULT NULL ,
`age` int (11 ) DEFAULT NULL
) ENGINE= MyISAM DEFAULT CHARSET= utf8 |
+
修改表名#
Copy
mysql> alter table student rename students;
mysql> show tables;
+
| Tables_in_user |
+
| students |
+
修改表中字段#
Copy
# modify只能修改表中数据类型
mysql> alter table students modify id int (10 );
mysql> desc students;
+
| Field | Type | Null | Key | Default | Extra |
+
| id | int (10 ) | YES | | NULL | |
| name | varchar (254 ) | YES | | NULL | |
| age | int (11 ) | YES | | NULL | |
+
修改字段与数据类型#
Copy
# change不但能改变字段名称同时能修改字段类型
mysql> alter table students change age ages int (10 );
表添加操作#
添加字段#
Copy
mysql> alter table students add addr varchar (254 );
mysql> desc students;
+
| Field | Type | Null | Key | Default | Extra |
+
| id | int (10 ) | YES | | NULL | |
| name | varchar (254 ) | YES | | NULL | |
| ages | int (10 ) | YES | | NULL | |
| addr | varchar (254 ) | YES | | NULL | |
+
mysql> alter table students add uuid varchar (254 ) first ; # 首行添加一个字段
mysql> desc students;
+
| Field | Type | Null | Key | Default | Extra |
+
| uuid | varchar (254 ) | YES | | NULL | |
| id | int (10 ) | YES | | NULL | |
| name | varchar (254 ) | YES | | NULL | |
| ages | int (10 ) | YES | | NULL | |
| addr | varchar (254 ) | YES | | NULL | |
+
mysql> alter table students add school varchar (40 ) after ages; # 在ages后面添加一个school字段
mysql> desc students;
+
| Field | Type | Null | Key | Default | Extra |
+
| uuid | varchar (254 ) | YES | | NULL | |
| id | int (10 ) | YES | | NULL | |
| name | varchar (254 ) | YES | | NULL | |
| ages | int (10 ) | YES | | NULL | |
| school | varchar (40 ) | YES | | NULL | |
| addr | varchar (254 ) | YES | | NULL | |
+
表删除操作#
删除字段#
Copy
mysql> create table test( id int (10 ),name varchar (254 ));
mysql> alter table tests drop column id;
mysql> desc tests;
+
| Field | Type | Null | Key | Default | Extra |
+
| name | varchar (254 ) | YES | | NULL | |
+
删除表格#
Copy
mysql> drop table test;
记录操作#
插入数据#
Copy
mysql> insert into students values (1 ,'SR' ,18 ,'China' ); # 插入一行
mysql> insert into students values (2 ,'MZ' ,18 ,'Chinae' ),(3 ,'HM' ,20 ,'China' ); # 插入多行
mysql> insert into students(id,name) values (3 ,'HH' ); # 指定字段插入值
表记录查询#
Copy
mysql> select * from students; # 查询所有
+
| id | name | ages | addr |
+
| 1 | SR | 18 | China |
| 2 | MZ | 18 | Chinae |
| 3 | HM | 20 | China |
| 3 | HH | NULL | NULL |
+
mysql> select id,name from students; # 查询指定字段
+
| id | name |
+
| 1 | SR |
| 2 | MZ |
| 3 | HM |
| 3 | HH |
+
删除记录#
Copy
mysql> delete from user.students where id= 1 ; # user.students 当不在students所在的库中 就使用.语法
mysql> delete from students where ages is null ; # 删除年纪为null 的学生
修改记录#
Copy
mysql> update students set ages= 16 where id= 2 ; # 更改id为2 的年龄
mysql> update students set addr= "china"; # addr字段都被更改为china
条件查询#
distinct:去重#
Copy
mysql> insert into students values (1 ,'zhangs' ,21 ),(2 ,'lis' ,24 ),(3 ,'jk' ,24 ),(4 ,'lo' ,25 ),(5 ,'io' ,25 ),(6 ,'jk' ,22 ),(7 ,'lo' ,25 );
mysql> select distinct name,age from students; # 去掉重复的数据
+
| name | age |
+
| zhangs | 21 |
| lis | 24 |
| jk | 24 |
| lo | 25 |
| io | 25 |
| jk | 22 |
+
and or逻辑条件查询#
Copy
mysql> select name from students where id > 3 and id < 6 ; # 查询 3 < id> 6 的用户名称
+
| name |
+
| lo |
| io |
+
mysql> select name from students where id > 3 or id < 6 ; # 只要满足一个条件即可
+
| name |
+
| zhangs |
| lis |
| jk |
| lo |
| io |
| jk |
| lo |
+
mysql> select name from students where name= 'lo' and (age= 25 or age= 24 );
+
| name |
+
| lo |
| lo |
+
2 rows in set (0.00 sec)
Copy
mysql> select name from students where id in (3 ,4 ,5 ,6 ); # 查询id在括号内的
+
| name |
+
| jk |
| lo |
| io |
| jk |
+
between and#
Copy
mysql> select name from students where id between 2 and 5 ; # 查询2 -5 之间的
+
| name |
+
| lis |
| jk |
| lo |
| io |
+
order by#
asc#
Copy
mysql> select id from students order by id asc ; # 升序查询
+
| id |
+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
+
desc#
Copy
mysql> select id from students order by id desc ; # 降序查询
+
| id |
+
| 7 |
| 6 |
| 5 |
| 4 |
| 3 |
| 2 |
| 1 |
+
binary#
Copy
# 区分大小写
mysql> select * from students where binary name= 'JK' ; # 没有大写名称为JK的用户
Empty set (0.00 sec)
mysql> select * from students where binary name= 'jk' ; # 区分大小写
+
| id | name | age |
+
| 3 | jk | 24 |
| 6 | jk | 22 |
+
truncat#
清除表中的数据
将auto_increment字段中的数据清零 再次插入数据从1开始
Copy
mysql> delete from test3; # 清空上述test3表
mysql> select * from test3;
Empty set (0.00 sec)
mysql> insert into test3(test)values (12 ); # 插入数据
# 使用delete 发现此时id字段接着保留上次最大值 在自增1
mysql> select * from test3;
+
| id | test |
+
| 11 | 12 |
+
mysql> truncate test3; # 清空表
mysql> select * from test3;
Empty set (0.01 sec)
mysql> insert into test3(test)values (12 );
mysql> select * from test3; # 此时id字段初始值为1
+
| id | test |
+
| 1 | 12 |
+
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2019-07-16 模块以及包