欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux——数据库(结构化查询语句SQL、数据操纵语句DML、事务控制语言TCL、数据查询语言DQL)

程序员文章站 2022-03-09 09:12:24
...

Linux——数据库(结构化查询语句SQL、数据操纵语句DML、事务控制语言TCL、数据查询语言DQL)

结构化查询语句SQL

create(创建)、drop(删除)、alter(修改)、truncate(清空)

SQL语句 描述
show databases 查看数据库
show table 查看表
create database {库名} 创建数据库
drop database {库名} 删除数据库
create table{表名} ({列名} {数据类型}, {列名} {数据类型},) 创建数据表
desc {表名} 查看表的机构信息
select * from {表名} 查看表内容
insert into {表名} values(1,'user1‘) 表里添加列信息
insert into {表名} values(1,'user1‘) 表里添加行信息
alter table {表名} modify {列名} {数据类型} 更改表的列数据类型
alter table {表名} change {旧列名} {新列名} {数据类型} 更改列名字及数据类型
alter table {旧表名} rename {新表名} 修改表名
truncate table {表名} 清空表内容
drop table {表名} 删除数据表

例子

  1. 创建数据库并将数据库的字符集设为utf8 create database {库名} default character set utf8;
  2. 创建表
    step1. 进入数据库 use {库名}
    step2. 创建数据表包含id、name数据类型分别为int和varchar create table t1(id int(3), name varchar(20));
  3. 表里添加行信息(数据信息)insert into t1 values(1,'user1‘);
  4. 表里添加列信息(年龄类别信息)alter table t1 add(age int(3));
  5. 更改列的数据类型 alter table t1 modify age varchar(2);
  6. 更改列名字及数据类型 alter table t1 change age change_age int(3);
  7. 修个表名 alter table t1 rename new_t1;

数据操纵语句DML

insert(插入)、delete(删除)、update(更新)
or、and

DML格式 描述
insert into {表名}({列名1},{列名2}) values({数据1},{数据2}) 插入指定列的数据
delete from {表名} where {列名}={数据} 删除指定列名的指定数据
update {表名} set {列名}={数据} 更新指定列的整列数据
update {表名} set {列名}={数据},{列名}={数据} where {列名}={数据} 更新指定列的指定行数据

insert

  1. 顺序插入insert into test1 values(02,'mark',null,'USA');
  2. 指定顺序连续插入insert into test1(id,name,age) values(3,'alan',19),(4,'tom',18);

例子

delete

  1. 删除同时满足条件的 delete from test1 where id=2 and age=18;
  2. 删除两个条件的delete from test1 where id=2 or age=18;

update

  1. 整列更改 update test1 set address='China';
  2. 指定行更改 update test1 set name='小红',age=16 where id=4;

事务控制语言TCL

事务的必须符合四个条件

  1. 原子性(Atomicity):事务要么成功,要么撤回。不可切割性。
  2. 一致性(Consistency):事务开始前和结束后,要保证数据的一致性。转账前账号A和账号B的钱的总数为10000,转账后账号A和账号B的前的总数应该还是10000;
  3. 隔离性(solation):当涉及到多用户操作同一张表时,数据库会为每一个用户开启一个事务。那么当其中一个事务正在进行时,其他事务应该处于等待状态。+保证事务之间不会受影响。
  4. 持久性(Durability):当一个事务被提交后,我们要保证数据库里的数据是永久改变的。即使数据库崩溃了,我们也要保证事务的完整性。

数据查询语言DQL

基本查询

Linux——数据库(结构化查询语句SQL、数据操纵语句DML、事务控制语言TCL、数据查询语言DQL)

  1. 比较查询,筛选出同时比小红,alan,tom大的人 select * from test1 where age>all(select age from test1 where name in ('小红','tom','alan'));

    mysql> select * from test1 where age>all(select age from test1 where name in
    ('小红','tom','alan'));
    +------+------+------+---------+
    | id   | name | age  | address |
    +------+------+------+---------+
    |   33 | jack |   22 | china   |
    +------+------+------+---------+
    1 row in set (0.06 sec)
    
    
  2. 范围查询,筛选年龄在10到18岁的人 select * from test1 where age between 10 and 18;

    # 筛选年龄在10到18岁的人
    mysql> select * from test1 where age between 10 and 18;
    +------+--------+------+---------+
    | id   | name   | age  | address |
    +------+--------+------+---------+
    |    4 | 小红   |   16 | china   |
    |    4 | tom    |   18 | NULL    |
    +------+--------+------+---------+
    2 rows in set (0.00 sec)
    
    # 筛选年龄不在10到18岁的人
    mysql> select * from test1 where age not between 10 and 18;
    +------+------+------+---------+
    | id   | name | age  | address |
    +------+------+------+---------+
    |   33 | jack |   22 | china   |
    |    3 | alan |   19 | NULL    |
    +------+------+------+---------+
    2 rows in set (0.00 sec)
    
    
  3. 模糊查询,筛选%a%(a前后有任何字符的数据)或者%2(2前面有任何字符的数据)

    mysql> select name,age,address from test1 where name  like '%a%' or age like '%2';
    +------+------+---------+
    | name | age  | address |
    +------+------+---------+
    | jack |   22 | china   |
    | alan |   19 | NULL    |
    +------+------+---------+
    2 rows in set (0.00 sec)
    
    mysql> select name,age,address from test1 where name  like '%a%' and age lik
    e '%2';
    +------+------+---------+
    | name | age  | address |
    +------+------+---------+
    | jack |   22 | china   |
    +------+------+---------+
    1 row in set (0.00 sec)
    
    
  4. 排序查询,升序(ASC)、降序(DESC),默认升序;

    # 年龄升序查询
    mysql> select name,age,address,id from test1 order by age;
    +--------+------+---------+------+
    | name   | age  | address | id   |
    +--------+------+---------+------+
    | NULL   | NULL | NULL    |    2 |
    | 小红   |   16 | china   |    4 |
    | tom    |   18 | NULL    |    4 |
    | alan   |   19 | NULL    |    3 |
    | jack   |   22 | china   |   33 |
    +--------+------+---------+------+
    5 rows in set (0.00 sec)
    
    # 年龄降序排序
    mysql> select name,age,address,id from test1 order by age DESC;
    +--------+------+---------+------+
    | name   | age  | address | id   |
    +--------+------+---------+------+
    | jack   |   22 | china   |   33 |
    | alan   |   19 | NULL    |    3 |
    | tom    |   18 | NULL    |    4 |
    | 小红   |   16 | china   |    4 |
    | NULL   | NULL | NULL    |    2 |
    +--------+------+---------+------+
    5 rows in set (0.00 sec)
    
  5. 去重查询,select distinct {列名} from {表名};

  6. 组查询,select {组列名},{聚合函数(需聚合的列名)} as {别称} from {表名} group by {组列名};

    添加having条件子句 select {组列名},{聚合函数(被聚合的列名)} as {别称} from {表名} group by {组列名} having {聚合函数(被聚合的列名)}>{数值};

完整查询语句 select..from..[where..][group by..][having..][order by..]
执行顺序:from子句=>where子句=>group by子句=>having子句=>order by子句

高级关联查询