zoukankan      html  css  js  c++  java
  • 数据库语句

    数据库语句

    创建数据库:create database 库名 character set 字符编码;
    查看数据库:show database;
    进入数据库:use 数据库名;
    删除数据库:drop database 库名;
    设置编码格式,把客户端编码告诉服务器:set names 字符编码格式;但是会出现乱行
    

    表语句

    修改表名称:rename table 原名 to 新名;
    
    创建表:Create table 表名(字段名 数据类型(长度) 约束);
    
    查看表:Show tables;
    
    修改表的属性 改引擎和字符集:alter table 表名 engine = 引擎名 charset =字符编码格式;
    举例:alter table user charset =utf8;
    
    查看表结构:desc 表名;
    删除表:Drop table 表名;
    
    重建表名:
        1.Rename table 旧表名 to 新表名;
        2.Alter tabale 旧表名 rename to 新表名
    

    修改表

    增加字段(默认在最后):Alter table 表名 add字段名 类型;
    
    在所有字段最前面添加字段:alter table 表名 add  字段名 类型 first;
    
    在某个字段后面添加字段:alter table 表名 add 字段名 类型 after 字段名;
    
    修改字段:Alter table 表名 change 旧字段名 新字段名 新属性;
    
    修改字段类型和位置:
        1.所有:alter table 表名 modify  字段名 新类型 first;
        2.指定:alter table 表名 modify 字段名 新类型 after 字段名;
    
    删除字段:Alter table 表名 drop 字段名;
    
    添加约束:Alter table 表名add constraint 约束名 约束描述;
    
    删除约束:Alter tabale 表名 drop 约束描述;
    

    复制表的结构及数据

    复制表的结构及数据:Create table 被复制表 as select*from 新表名;
    
    只复制表结构:Create table 被复制表 as select*from 新表名 where 1=2;
    

    Insert:插入数据

    全表插入:Insert  into 表名 values(值1,值2,值3);
    指定字段插入:Insert  into 表名(字段1,字段2)values(值1,值2);
    举例:1.Insert  into 表名 values(6,'张三','男','1996-8-4');
        2.Insert  into 表名(id, name) values(7, '李四');
        3.Insert  into 表名(id, name) values(8,'王五'), (9,'赵六'), (10,'钱七');
    

    Update:更新、修改数据

    update 表名 set 字段名=’填入的数据’,字段名=’填入的数据’ where 字段名=’具体位置’
    举例:1.把7,李四的性别和生日-- 修改成'女', '1998-8-4'
        2.update 表名 set gender='女',birthday='1998-8-4' where id=7;
    

    Delete:删除操作

    删除数据
    delete from 表名where 条件;
    删除表
    delete from 表名;
    删除数据库
    Drop database 库名;
    

    select查询

    查询所有数据,*代表所有字段内容
    select * from 表名;
    查询指定字段内容
    select  字段名,字段名from 表名;
    

    wher条件

    1 2 3 4
    = 等值过滤 is null、is not null 是null、不是null
    < > 不等过滤 like 字符串模糊匹配、% 通配多个字符、_ 通配单个字符、转译符、%、_、
    > >= < <= 不等过滤 like 相反判断、not between and、not、in(...)、is not null、not like
    between 小 and 大 >= 小 并且 <= 大 and 并且
    in(7,2,9,4) 在指定的一组值中取值 or 或者
    判断输出字段名=匹配条件的内容
    select 字段名,字段名,字段名from 表名where 字段名=匹配条件(字符类型加’  ’);
    
    and和;连接判断条件
    select字段名,字段名,字段名from 表名where 字段名>=匹配条件 add 字段名>=匹配条件;
    
    or与;连接判断条件
    select字段名,字段名,字段名from 表名where 字段名>=匹配条件or字段名>=匹配条件or字段名>=匹配条件;
    
    某字段值为null
    select 字段名,字段名,字段名from 表名where 字段名>=匹配条件 is null;
    
    某字段值不为null
    Select 字段名,字段名,字段名from 表名where 字段名>=匹配条件 is not null;
    
    某字段数据中包含 &&
    Select 字段名,字段名,字段名from 表名where 字段名 like '%&&%';
    
    某字段数据中 第3、4个字符是&&
    Select 字段名,字段名,字段名from 表名where 字段名 like '_ _en%';( _ 空位符)
    

    Distinct:去除重复值

    去除a字段重复值
    select distinct a from ...
    Select select字段名from 表名where 字段名 is null;
    
    去除a,b字段组合的重复值
    select distinct a,b from ...
    Select select字段名,字段名from 表名where 字段名 is null;
    

    order by 子句:排序

    order by a
    按a字段升序排列
    select 字段名,字段名from 表名where 字段名=匹配条件 order by 字段名 asc/desc;
    order by a,b
    按a字段升序排列,a相同,再按b字段升序排列
    asc 升序(默认)
    desc 降序
    举例:order by a desc;
        order by a desc, b asc;
        order by a desc, b desc;
    

    group by  子句

    分组求多行函数
    按指定字段中相同的值进行分组
    分组后分别求多行函数
    分组字段,可以查询
    按a字段相同值分组:group by a
    按a,b组合的相同值分组:group by a,b
    

    having 字句:用来对多行函数结果进行过滤

    Having和where作用相同,都是条件过滤
    Where 过滤普通条件,最早执行
    having 过滤多行函数结果,分组,求完多行函数后,才执行
    having 跟在 group by 后面
    

    查询执行顺序

    (1)select 字段
    (2)from
    (3)where
    (4)order by
    (5)where 过滤
    (6)选取字段
    (7)order by 排序
    

    函数

    (1)字符串函数
    ①char_length(字符串) 字符数
    ②length(字符串) 字节数
    ③left(字符串, length) 获得左侧字符
    ④substring(字符串, start个数, length长度) 截取字符串
    ⑤instr(字符串, 子串) 查找子串位置
    ⑥concat(s1,s2,s3...) 字符串连接
    ⑦lpad(字符串,8,'补充的符号') 左侧填充
    

    数字函数

    ceil(数字) 向上取整到个位
    floor(数字) 向下取整到个位
    round(数字,2)四舍五入到小数点2位,如果是负数,向整数位取值
    truncate(数字, 2) 直接舍弃到小数点2位
    rand() 随机数[0, 1)
    

    日期函数

    now() 当前日期时间
    curdate() 当前日期
    curtime() 当前时间
    extract(字段 from 日期) 抽取指定字段的值
    date_add(日期, interval 字段 值) 在指定字段上加一个值
    datediff(日期1,日期2) 两个日期之间相差的天数
    

    null值函数

    ifnull(a, b)
    1.a不是null返回a
    2.a是null返回b
    

    多行函数、聚合函数

    sum() 和
    avg() 平均
    max() 最大
    min() 最小
    count() 行数
    count(*) 记行数
    count(distinct a) 去除重复再计数
    多行函数不能和其他普通字段一起查询
    多个多行函数可以一起查询
    多行函数会忽略null值
    

    查询嵌套

    条件子查询:一个查询的结果,作为另一个查询的过滤条件
    
    单值子查询:= > >= < <=
    
    多值子查询
    1.In
    2.> all 比最大值大
    3.> any 比最小值大
    
    多列子查询
    1.where (a,b) in (select ...)
    2.where (a,b) = (select ...)
    
    From子查询,行内视图
    1.从查询的查询结果,再查询
    2.select ... from (select ...) t
    

    约束

    限制字段中的取值
    

    主键

    数据表中,一行数据的唯一标识
    不重复
    不能是null值
    自动生成索引
    一般使用“非业务数据”来作为主键
    自动增加
    随机生成
    自增主键:整数类型主键,可以设置自动生成自增的值
    外键:限制一个字段,只能取指定主键中存在的值
    自动生成索引
    非空:not null
    唯一:unique
    
    检查:
    1.设置检查条件,约束字段的取值
    2.mysql不支持
    3.mariadb 支持检查约束
    

    多表连接查询

    两张表,按指定条件,连接成一张表
    从连接的结果表中查询
    

    外连接

    内连接:只查询满足连接条件的数据
    外连接:不满足连接条件的数据也要查询
    左外连接:查询左侧表条件外数据
    右外连接:查询右侧表条件外数据
    全外连接:双侧表条件外数据,但是MySQL不支持
    外连接,非标准SQL连接语句,每种数据库外连接语法都不一样
    1.sql server:where a.id(+) = b.xid
    2.Oracle:where a.id *= b.xid
    3.MySql:没有外连接的非标准语法
    
    标准的表连接语法:
    1.select ...from a join b on(a.id=b.xid) join c on(...);
    2.select ...from a left join b on(a.id=b.xid);
    3.select ...from a right join bon(a.id=b.xid);
    

    事务

    事务由一组sql语句组成,事务的sql语句整体成功,整体失败
    数据操作最小单元是事务,而不是sql语句
    1.例如:A --> B 
    2.update 账户 set money=money-100 where id='A';
    3.update 账户 set money=money+100 where id='B';
    
    启动事务:
    1.Begin
    2.start transaction
    3.事务启动后,执行的数据增删改操作,会暂时记录在一个日志文件中
    
    提交事务:
    1.Commit
    2.事务日志中记录的数据操作,在数据表中生效
    3.清空日志文件
    
    回滚事务:
    1.Rollback
    2.清空日志
    
    事务特性ACID:
    1.A - Atomic:		原子性,数据操作的最小单元是事务,而不是sql语句
    2.C - Consistency:	一致性,事务完成前后,数据要保持逻辑的一致性
    3.I - Isolation:		隔离性,一个事务操作数据时,其他事务要等待
    4.D - Durancy:		持久性,事务成功,数据被永久的保存
    

    数据访问冲突的问题:

    三种问题:脏数据,不可重复读,幻觉读
    1.脏数据:一个事务未提交的数据,被另一个事务查询到
    2.不可重复读:针对数据修改 update 操作; 查询过的数据,再次查询时,与之前的查询结果不一致
    3.幻觉读:针对数据的插入和删除;新插入的数据,查询不到;删除的数据,能查询到
    

    隔离级别

    为了避免数据访问冲突的问题,避免数据的混乱,数据库会让事务进行隔离
    为了兼顾数据安全,和性能,数据库提供了四种隔离级别
    级别越高,越安全,性能越差
    级别越低,越不安全,性能越高
    
    mysql设置隔离级别:
    1.set tx_isolation='read-uncommitted'
    2.脏读、不可重复读、幻觉读
    3.set tx_isolation='read-committed'
    4.不可重复读、幻觉读
    5.set tx_isolation='repeatable-read' 默认级别
    6.幻觉读
    7.set tx_isolation='serialiable'
    
  • 相关阅读:
    C#的多态性
    冒泡法,改进冒泡法排序和反序算法
    [收藏]D3D渲染流程简介
    [收藏]字符串表达式求值
    Windows下使用VC++编译GNU科学计算库 GNU Scientific Library(GSL)
    VC++ 高精度定时timeSetEvent和回调成员方法
    [收藏]C/C++数组名与指针区别深层探索
    线性表操作
    线性表综合运用
    两个线性表融合的算法
  • 原文地址:https://www.cnblogs.com/xianyao/p/10847037.html
Copyright © 2011-2022 走看看