zoukankan      html  css  js  c++  java
  • SQL语句

    概述

    结构化:即有一定格式(format)关系型db处理不了非结构化;

    数据库字符集和表的字符集可以不一样,但应该一样;

    SQL语句

    show databases/tables; 查看所有数据库/某数据库中所有表
    DDL: database定义语句,如建库、建表  
    create/drop database 数据库名; 创建/删除数据库
    DROP DATABASE if exists 数据库名; 删数据库A若数据库A存在
    use 数据库名; 切换到该数据库
    数据字典:记录管理信息,是元数据  
    desc 表名; 查询表信息
    show full fields from 表名; 查询表详细信息
    create table 表名

    (
    列名 列类型 对该列的修饰或约束 对该列的修饰或约束,
    列名 列类型 对该列的修饰或约束,
    列名 列类型,
    INDEX(列名),

    KEY friend_fk_userid (字段名),

    CONSTRAINT friend_fk_userid FOREIGN KEY (字段名) REFERENCES 父表名(父表主键字段名)

    ) ENGINE=INNODB 或 engine=myisam default charset=utf8;

    建表方式1,存储引擎可不写

    create table 表名
    (
    列名 列类型,
    列名 列类型,
    列名 列类型,
    constraint 表名_主键列名_pk primary key(列名1,列名2),
    unique key(列名1,列名2),//这是表级别,表示列名1和列名2组合不能重复
    [constraint 外键名(表名_外键列名_fk)] foreign key(列名) references 表名(主键列名),//这是表级别
    comment '注释内容'
    ) comment '对表的注释内容';

    建表方式2,单个主键或联合主键,唯一键
    create table 新表名 like 旧表名; 根据旧表创建新表
    create table 新表名 select * from 旧表名; 创建新表,复制旧表结构及数据都弄过去,但约束都没了
    drop table 表名; 删除表
    ALTER TABLE 旧表名 RENAME TO 新表名; 重命名表
    sp_renamedb '旧数据库名','新数据库名'; 重命名数据库
    DML:database操纵语句,如增删改查  
    也支持一次insert两行;  
    当insert新元组到表中但没有给该列明确赋值时,如果定义了列的默认值,将自动得到默认值;如果没有,则为null  
    insert into 表名 (字段名1,字段名2) values(A,'哈哈'); 字段1值为A,字段2值为哈哈
    insert into users values('bolt','230107198608211213',default); 新增一行,name为bolt,ID为230107198608211213,其它字段默认
    insert into users values('bolt','230107198608211213'); 新增一行,name为bolt,ID为230107198608211213,其它字段默认
    delete from 表名; 删除表中所有数据
    delete from student where a=b; 删除表中符合筛选条件的数据
    update 表名 set grade=2015 where name='小明'; 更新数据
    update 表名 set 字段名=default; 更新数据
    select default(字段名) from 表名;  
    DQL:数据库查询语句  
    select 字段名 字段名别名 from 表名; 为字段起别名以显示
    select * from 表名 where a [not] in ('值1','值2','值4','值6'); in的用法
    select * from 表名 where time between time1 and time2; between以限制查询数据范围时包括了边界值;not between不包括
    select * from 日程安排 where datediff('minute',f开始时间,getdate())>5; 日程安排提前五分钟提醒
    select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b; 显示文章、提交人和最后回复时间
    select * from 表名 limit 该表行索引,要查的记录数; 查询指定元组,常用于分页查询
    select * from 表名 where 字段1>数值 or 字段2='varchar类型用''' or 字段2='varchar类型用''';  
    select table_name from information_schema.tables where table_name='scusers';  
    alter table 表名 add column 新字段名 新字段类型 default null auto_increment primary key first; 在第一列添加字段
    alter table 表名 add column 新字段名 新字段类型 not null after 字段名(添加在该字段之后); 添加字段(一列)
    alter table 表名 drop column 字段名,drop column 字段名; 删除字段(一列)
    alter table 表名 MODIFY 字段名 字段新类型 对该字段的新增修饰或约束; 修改一个字段的类型或长度,新增约束或修饰
    alter table 表名 change 旧字段名 新字段名 新字段类型; 修改一个字段的名称和类型,(修改一个字段的名称时一定要重新指定该字段的类型)
    alter table 表名 alter column 字段名 set default 默认值; 修改一个字段的默认值(若该字段本身存在默认值,先删除之)
    alter table 表名 alter column 字段名 drop default; 删除一个字段的默认值
    alter table 表名 add constraint 表名_主键列名_pk primary key(列名1,列名2); 建表之后对已有字段添加主键
    alter table 表名 drop primary key/constraint 表名_主键列名_pk; 取消(删除)主键,如果该主键有auto_increment,先删除之
    Alter table 子表名 add foreign key(外键字段名) references 父表名(主键字段名); 对已有字段添加外键约束(如报错子表清空即可)
    alter table 表名 drop foreign key 外键名; 解除外键约束(要知道外键名)
    alter table 表名 change 字段名 字段名 int; 删除该字段的auto_increment约束 / 删除该字段的zerofill约束 / 删除该字段的默认约束 / 删除该字段的无符号约束
    alter table 表名 change 字段名 字段名 字段类型; 删除该字段的not null约束
    alter table 表名 drop INDEX 字段名; 删除该字段的唯一键约束
      一般自增必为主键且数字类型,若非主键加自增,要同时加唯一键或外键约束
    alter table users MODIFY cardID int(16) zerofill;  
    alter table 表名 auto_increment=1; 重置auto_increment的值
    alter table users auto_increment=1000000000000000;  
    高级查询  
    select a,b,c from 表名1 where a in(select d from 表名2); 子查询

    CREATE VIEW v_empdept
    as
    SELECT empno,ename,job,loc,dname from emp join dept on emp.deptno=dept.deptno;

    创建视图,修改原表数据,则视图也变,视图是虚的,修改视图则原表也变,在视图上最好只select,为了不让用户看见某一列,对select结果创建视图,为了简化查询

    create view v_empsal(dname,minsal,maxsal,avgsal)
    as
    select d.dname,min(sal),max(sal),avg(sal)
    from emp e join dept d
    on e.deptno=d.deptno
    group by d.dname;

     

    drop view 视图名;

    删除视图

    select * from (select a,b,c from 表名) T where t.a>1;

    在线视图查询

    from、join作用一样;on、where作用一样;on是连接条件,where是筛选条件

     
    left join 左连接,结果集既包括连接表的匹配行,也包括左连接表的所有行
    right join 右连接,结果集既包括连接表的匹配连接行,也包括右连接表的所有行
    full/cross [outer] join 全外连接,不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录
    select a.a,a.b,a.c,b.c,b.d,b.f from a left out join b on a.a=b.c; 外连接查询
    DCL:数据库控制语句,如授权  
    create user 新用户id identified by 新用户密码; 新建用户
    drop user 用户id; 删除用户
    grant 权限名 to 用户id; 授权
    revoke 权限名 from 用户id; 撤销权限
    其它  
    source D:/insert.sql; 导入数据到数据库
    show variables like 'character%'; 查看MySQL默认编码格式
    show variables like '%max_connections%'; 查看MySQL允许的最大连接数
    net start mysql 启动MySQL服务
    net stop mysql 关闭MySQL服务
    set names 'gbk'; 从不使用,嘿嘿
    show engines; 查询所有支持的存储引擎

    字段的修饰

    null:表示字段可以为空;not null:表示字段不能为空;default null:字段默认为空;default 默认值:字段默认值

    unsigned:该字段无符号位,一般作用于int类型的字段

    auto_increment:字段值自动增长

    字段的约束

    primary key主键约束,元组唯一性,有序性,该字段不能空并且不能重复,每个表最多只允许一个主键,可定义联合主键

    联合主键:这些列的组合不能重复并且这些列都不能为空

    unique key唯一键约束,不可重复独立性,则该字段的值不能出现重复值,而且唯一键的列,允许有空值,主键不允许出现空值,允许出现多个唯一键;写法:unique

    foreign key外键约束

      外键中的级联关系有以下几种情况:

        ON DELETE  CASCADE    删除主表中的数据时,从表中的数据随之删除:同步删除

        ON UPDATE  CASCADE    更新主表中的数据时,从表中的数据随之更新:同步更新

        ON DELETE  SET NULL   删除主表中的数据时,从表中的数据置为空:删除置空

        默认删除主表中的数据前需先删除从表中的数据,否则主表数据不会被删除:删除前检测从表

        具有外键约束的列的值不能随便给,必须满足外键所引用的主键的取值

        一张表中可以定义多个外键

      说明:

        外键列默认可以给null值;按照定义,外键必须引用一个主键或者唯一键,引用的主键一般在另外一张表中,也可以是本表的主键(自引用);外键所在的表叫做子表、从表;外键所引用的主键所在的表叫做父表、主表;

        父子表是相对而言的,表A可为表B的子表,但同时也可以是表C的父表;

    Comment '注释内容':字段注释,字段的描述说明

    ZEROFILL:零填充,会将有效位以外的位用0来显示,比如某字段数据类型为INT(5),插入值为2,将显示00002

    字段的修饰和约束的几点注意

    1.not null约束只能在字段级别定义,作用在多个字段上的约束只能定义在表级别,例如复合主键约束;

    2.字段级别上不能定义外键约束,并且不能给约束起名字,由MySQL自动命名(not null除外);

    3.表级别上定义的约束可以给约束起名字(CHECK约束除外)

    关键字+运算符

    Group by

    1.一张表,一旦分组完成后,查询后只能得到组相关的信息;

    2.组相关的信息:如统计信息,count,avg,sum,max,min等这些都可作为分组的标准;

    3.在SQLServer中分组时,不能以text,ntext,image类型的字段作为分组依据;

    4.在select统计函数中的字段,不能和普通的字段放在一起;

    WHERE条件查询

    1.比较:= > < >= <=

    2.确定范围:between...and... / not between...and...

    3.确定集合:IN/NOT IN

    4.字符匹配:LIKE/NOT LIKE

    5.空值:IS NULL/IS NOT NULL

    6.多重条件:AND/OR

    LIKE匹配

    _下划线:匹配任意一个字符

    %百分号:匹配0个或多个字符

    []:匹配[]中的任意一个字符。如[acgd]表示匹配a c g d中的任何一个,对于连续的,可写成[a-d]

    [^]:不匹配[]中的任何一个字符。写成[^acgd]

    高级查询运算词(使用运算词的几个查询结果行必须是一致的)

    UNION运算符:

    通过组合其它两个结果表(例如 table1 和 table2)并消去表中任何重复行而派生出一个结果表,当 ALL 随 UNION 一起使用时(即UNION ALL),不消除重复行,两种情况下,派生表的每一行不是来自table1就是来自table2。

    EXCEPT运算符:

    通过包括所有在 table1 中但不在 table2 中的行并消除所有重复行而派生出一个结果表,当 ALL 随 EXCEPT 一起使用时(EXCEPT ALL),不消除重复行。

    INTERSECT运算符:

    通过只包括 table1 和 table2 中都有的行并消除所有重复行而派生出一个结果表,当 ALL 随 INTERSECT 一起使用时(INTERSECT ALL),不消除重复行。

    事务

    几条SQL语句组成一个事务,事务有原子性,这几条SQL语句要么全部成功,要么全部失败;自动提交事务时,可以用begin开启一个新事务;

    事务在service层定义,一个service层的方法通常是执行了几个dao层函数,即执行了几条sql;

    事务:2件事要么全成功,要么全失败;

    并发控制,乐观锁,悲观锁

    索引的设计原则(对索引的理解)

  • 相关阅读:
    一个接口,多个实现
    jmeter压力测试
    程序卡住了还是怎么了?
    Spring集成Jedis(不依赖spring-data-redis)(单机/集群模式)(待实践)
    Spring集成Redis方案(spring-data-redis)(基于Jedis的单机模式)(待实践)
    Redis基于Java的客户端SDK收集
    Ubuntu清理内存命令(效果不明显)
    Memcached与Spring集成的方式(待实践)
    Memcached的几种Java客户端(待实践)
    Redis集群方案收集
  • 原文地址:https://www.cnblogs.com/yyjh/p/10659751.html
Copyright © 2011-2022 走看看