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语句书写

查看数据库

mysql> show databases;      # 查看当前存在的数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+


mysql> show databasesG
*************************** 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新增的数据库 主要包含数据库的元信息等
  • 数据库元信息包含数据库名或表名 数据类型 权限等

创建数据库

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 + 数据库名称

# 使用某个数据库
mysql> use test;      # 切换到test这个数据库
Database changed

select database()

# 查看当前所属的位置
mysql> select database();
+------------+
| database() |
+------------+
| test       |
+------------+

# 如果没有选择数据库则显示null
mysql> select database();
+------------+
| database() |
+------------+
| NULL       |
+------------+

select user()

# 查看当前登录的用户
mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+

select now();

# 查看当前系统时间
mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2020-07-16 10:31:22 |
+---------------------+

删除数据库

# 删库无任何提示 做好跑路的准备
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;      # 存在删除

创建数据表

mysql> create tables student(id int(11) ,name varchar(254),age int(11));

查看表执行命令

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 |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+

修改表信息

修改存储引擎与编码

# 上述可以看到存储引擎默认为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 |
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

修改表名

mysql> alter table student rename students;

mysql> show tables;
+----------------+
| Tables_in_user |
+----------------+
| students       |
+----------------+

修改表中字段

# 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    |       |
+-------+--------------+------+-----+---------+-------+

修改字段与数据类型

#  change不但能改变字段名称同时能修改字段类型
mysql> alter table students change age ages int(10);

表添加操作

添加字段

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    |       |
+--------+--------------+------+-----+---------+-------+

表删除操作

删除字段

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    |       |
+-------+--------------+------+-----+---------+-------+

删除表格

mysql> drop table test;

记录操作

插入数据

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');      # 指定字段插入值

表记录查询

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   |
+------+------+

删除记录

mysql> delete from user.students where id=1;      # user.students 当不在students所在的库中 就使用.语法

mysql> delete from students where ages is null;      # 删除年纪为null的学生

修改记录

mysql> update students set ages=16 where id=2;      # 更改id为2的年龄
mysql> update students set addr="china";      # addr字段都被更改为china

条件查询

distinct:去重

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逻辑条件查询

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

mysql> select name from students where id in(3,4,5,6);      # 查询id在括号内的
+------+
| name |
+------+
| jk   |
| lo   |
| io   |
| jk   |
+------+

between and

mysql> select name from students where id between 2 and 5;      # 查询2-5之间的
+------+
| name |
+------+
| lis  |
| jk   |
| lo   |
| io   |
+------+

order by

asc

mysql> select id from students order by id asc;      # 升序查询
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
|    7 |
+------+

desc

mysql> select id from students order by id desc;      # 降序查询
+------+
| id   |
+------+
|    7 |
|    6 |
|    5 |
|    4 |
|    3 |
|    2 |
|    1 |
+------+

binary

# 区分大小写
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开始
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 |
+----+------+
原文地址:https://www.cnblogs.com/SR-Program/p/13320748.html