• 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 |
    +----+------+
    
  • 相关阅读:
    140704
    140703
    140702
    堆排序
    并查集
    140701
    这年暑假集训-140630
    vim for python
    hihocode 第九十二周 数论一·Miller-Rabin质数测试
    hdu 3157 Crazy Circuits 有源汇和下界的最小费用流
  • 原文地址:https://www.cnblogs.com/SR-Program/p/13320748.html
Copyright © 2020-2023  润新知