SQL语句初识

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#

  • 其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` /*!40100 DEFAULT CHARACTER SET latin1 */ | +----------+-----------------------------------------------------------------+ # 这样带有连字符或者关键字的名称 需要使用反引号 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 tables 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)

in#

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 | +----+------+
posted @   SR丶  阅读(269)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2019-07-16 模块以及包
点击右上角即可分享
微信分享提示
CONTENTS