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

        数据库

    1. 使用管理员用户:
    启动数据库服务器的命令:net start mysql
    关闭数据库服务器的命令:net stop mysql

    登录mysql数据库的命令:mysql -u用户名 -p密码 mysql -uroot -proot

    创建数据库:使用关键字 create(新建,创建) database(数据库)
    格式:
    create database 数据库名称; 建议使用 使用的编码默认为utf8
    create database 数据库名称 character set 字符集; 创建指定字符编码的数据库 不建议

    2. 删除指定的数据库:使用关键字drop(删除)
    格式:
    drop database 数据名称;

    3. 查看正在使用的数据库
    格式:
    select database();
    4. 使用(切换)数据某个数据库
    格式:
    use 数据库名称;
    5. 创建数据表:使用关键字 create(创建) table(表格)
    格式:
    create table 表名(
    字段1 数据类型[长度] [约束],
    字段2 数据类型[长度] [约束],
    ..
    字段n 数据类型[长度] [约束](注意,此处不能写逗号)
    );
    字段:数据表中的列
    []:[]中的内容是可以省略
    约束:
    主键约束:primary key 约束主键列不能为空,不能重复
    非空约束:not null 约束列中的数据不能为空
    唯一约束:unique 约束列中的数据不能重复

    6. 查看数据库中的所有表
    格式:
    show tables;

    7. 查看表结构
    格式:
    desc 表名;
    8. 删除表:
    格式:
    drop table 表名;
    9. 修改表结构:使用关键字alter(改变)
    增加列:使用关键字add
    格式:
    alter table 表名 add 列名(字段名) 数据类型[长度] 约束;
    修改表结构:
    修改列的数据类型,和列的长度,列的约束:使用关键字modify(修改)
    格式:
    alter table 表名 modify 列名(字段名) 数据类型[长度] 约束;
    注意:
    类型varchar-->int,double,可能会报错 "abc"-->int
    修改表结构:
    修改列名,列的数据类型,和列的长度,列的约束:使用关键字change(改变)
    格式:
    alter table 表名 change 旧列名 新列名 数据类型[长度] 约束;

    修改表结构:
    删除列:使用关键字drop
    格式:
    alter table 表名 drop 列名;
    注意:
    被删除的列中如果有数据,也会被一起删除(有风险)
    修改表名:
    rename table 旧表名 to 新表名;

    修改表的字符集:了解,不建议,表中如果有数据,可能会产生乱码
    格式:
    alter table 表名 character set 字符集;

    10. 表中添加数据:使用关键字 insert(插入) into values(值)
    格式一:往表中添加一行数据
    insert into 表名(字段1,字段2,...字段n) values(值1,值2,...值n);
    注意:
    字段和值一定要一一对应(个数,数据类型)
    值的书写:除了数值类型(整数,小数),其它的值在使用的使用必须使用引号包裹取来
    可以使用单引号,也可以使用双引号;建议使用单引号
    字段可以选择性书写(写几个都可以,但是主键和非空字段必须写出来)
    格式二:往表中添加一行数据,主键如果是自增,可以省略主键字段
    insert into 表名(非主键字段) values(对应的值);
    格式三:可以省略所有的字段,但是值必须全部给出(主键不能省略)
    insert into 表名 values(全部字段的值,包含主键);
    格式四:批量插入数据
    选择对应的字段书写:
    insert into 表名(任意的字段) values(对应的值),(对应的值),...(对应的值);
    省略全部的字段书写:
    insert into 表名 values(全部字段的值),(全部字段的值),..(全部字段的值);

    11. 修改表中的数据:使用关键字update
    格式一:修改某几列的所有数据
    update 表名 set 字段1=字段值,字段2=字段值...;
    格式二:修改某几列中符合条件的数据
    update 表名 set 字段1=字段值,字段2=字段值... where 条件限定;

    12. 删除表中的数据:使用关键字delete(删除) from(来自于那张表)
    格式一:删除符合条件的数据
    delete from 表名 where 条件限定;
    格式二:删除表中的所有数据,逐一删除表中的多行数据,不会重写设置主键自增,
    如果要在添加数据,那么会继续之前的主键
    delete from 表名;
    格式三:删除表中的所有数据,会清空表中的所有数据,也会设置设置主键自增,
    如果要在添加数据,那么主键默认从1开始
    truncate table 表名;

    13. 约束:限制某一列的数据(不能为null,不能重复)
    和java中的集合的泛型一样
    ArrayList<String>:集合中只能存储字符串

    1> 主键约束:
    设置某一列的数据为主键:限制该列的数据不能为null,不能重复
    使用关键字:primary key

    注意:
    每一个表中都应该有一个主键,且只能有一个主键
    主键字段不建议使用业务相关字段

    <1> 添加主键格式一:创建表的同时,给某个字段,添加主键修饰
    <2> 添加主键约束方式二:创建表时,在constraint约束区域,声明指定字段为主键
    格式:字段的最后添加一个constraint约束区域
    [constraint 主键名] primary key(主键字段)
    <3> 添加主键约束格式三:在创建表之后使用,使用修改表结构,添加主键约束
    格式:
    alter table 表名 add [constraint 主键名] primary key(主键字段);
    删除主键约束:使用修改表结构
    格式:
    alter table 表名 drop primary key;

    2> 非空约束:限制某一列的数据不能为null
    使用关键字:not null

    格式一:在创建表的同时,给指定的字段添加非空约束
    格式二:在创建表之后,使用修改表结构,给某个字段添加非空约束
    alter table 表名 modify 字段 数据类型 not null;
    删除非空约束:使用修改表结构,删除某个字段的非空约束
    alter table 表名 modify 字段 数据类型;

    3> 唯一约束:约束某一列的数据不能重复
    使用关键字:unique
    注意:
    如果数据的值是null,那么唯一约束是不起作用的

    格式一:在创建表的同时,给指定的字段添加唯一约束
    格式二:在创建表所有字段之后,使用constraint区域添加唯一约束
    [constraint 唯一约束名字] unique(添加唯一约束的字段)
    格式三:在创建表之后,使用修改表结构,添加唯一约束
    alter table 表名 add [constraint 唯一约束名字] unique(添加唯一约束的字段);
    alter table 表名 modify 字段 数据类型 unique;
    删除唯一约束:
    ALTER TABLE 表名 DROP INDEX 字段/唯一约束名字;

    4> 默认约束:给某列的数据添加一个默认值
    使用关键字:default(默认)
    添加数据的时候,如果不给默认字段添加值,那么该字段的值就是默认值
    添加数据的时候,如果给默认字段添加值,就那么就使用新添加的值

    格式一:在创建表的同时,给指定的字段,添加一个默认值
    格式二:在创建表之后,使用修改表结构,添加默认约束
    alter table 表名 modify 字段 数据类型 default '默认值';
    删除默认约束:使用修改表结构,删除默认约束
    alter table 表名 modify 字段 数据类型;

    14. 简单查询语句:使用关键字 select(查询) from(来自于)
    格式一:查询指定的字段
    select 字段名1,字段名2... from 表名;
    格式二:查询所有的字段
    select * from 表名;
    select 列出所有字段 from 表名;
    格式三:过滤重复的数据
    select distinct 字段 from 表名;
    注意:
    distinct后边只能过滤一个字段
    格式四:可以使用as关键字给表或者字段起别名
    给表起别名:多表查询时使用
    select 字段|* from 表名 [as] 别名;
    给查询之后的字段起别名
    select 字段 [as] 别名,.... from 表名;
    注意:
    1> 起别名只是对查询的结果临时给字段或者表起名字,不会把表原有的名字改变
    2> 起的别名,如果中间包含了空格或者特殊符号,必须使用引号包裹起来

    15. 条件查询语句:使用关键字where(在哪)
    格式:
    select 字段|* from 表名 where 条件限定
    常用的运算符:
    比较运算符:>,<,>=,<=,=,<>(!=)
    逻辑运算符:
    与: and &&
    或: or ||
    非: not !
    表示区间的:
    between...and 相当于 >= && <=
    表示查询多个数据:
    in(数据1,数据2,数据3...); 相当于 or
    查询空值: is null
    模糊查询:使用关键字like
    %:多个任意字符
    _:一个任意字符

    使用between...and改造
    好处:
    between...and:可以对时间的区间进行查询
    数据值小的一定要写在前边

    16. 排序查询语句:使用关键字 order by [asc] [desc],要放在select语句的最后
    格式:
    select 字段|* from 表名 [where 条件] order by 被排序的字段 [asc] [desc];
    asc:升序(不写默认是升序)
    desc:降序

    17. 聚合函数查询:对某一列数据进行查询,结果返回一个单一的值,会忽略null值
    包含:
    count:统计指定列不为NULL的记录行数;
    sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
    max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
    min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
    avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
    使用格式:聚合函数要写在select后边from的前边
    select count(字段|*),sum(字段),max(字段),min(字段),avg(字段) from 表名;

    18. 分组查询语句:使用关键字 group by[having 条件过滤]
    格式:
    select 被分组的字段,... from 表名 group by 被分组的字段 [having 条件过滤];

    注意:
    被分组的字段,一般都写在select后边,方便查看结果

    执行流程:
    先条件过滤 where
    先分组 group by
    在查询 select 字段
    having 再次对查询的结果进行条件过滤

    where:分组之前对条件进行过滤
    having:分组之后,再次对条件进行过滤
    可以使用聚合函数

    19. 分页查询:使用关键字 limit
    格式:
    limit m n
    m:可以变化的,每页数据的开始行数
    n:固定不变的,每页显示行的个数
    数据库中:
    行的开始索引是0,第0行,第1行....
    列的开始索引的1,第1列....

    20. 1对多的关系:从表使用主表的主键作为外键字段
    添加主表分类表和从表商品表之间的主外键关系:
    使用修改表结构(创建从表的时候直接添加)
    alter table 从表名 add [constraint 外键名称] foreign key(从表中的外键字段) references 主表(主键);
    foreign key:外键
    references:引用
    外键的作用:保证数据的准确性和完整性
    1> 主表中有的数据,从表可以有,可以没有
    2> 主表中没有的数据,从表也不能出现
    3> 删除主表的数据,必须保证从表没有使用

    --语句删除外键
    alter table 从表 drop foreign key 外键名称;

    21. 多表查询:一次查询2张以上的表
    1> 交叉连接查询:很少使用有错误数据
    格式:
    select 字段|* from 表A,表B;
    2> 内连接查询:使用外键约束作为查询条件
    a.隐式内连接查询:不使用关键字[inner] join on
    格式:
    select 字段|* from 表A,表B where 表A.主键=表B.外键;
    b.显示内连接查询:使用关键字[inner] join on
    格式:
    select 字段|* from 表A [inner] join 表B on 表A.主键=表B.外键;
    3> 外连接查询:使用外键约束作为查询条件
    a.左外连接查询:使用关键字 left [outer] join on;以左边的表为主,左边有的数据,右边没有使用null代替
    格式:
    select 字段|* from 表A left [outer] join 表B on 表A.主键=表B.外键;
    b.右外连接查询:使用关键字 right [outer] join on;以右边的表为主,右边没有的数据,左边也不能出现
    格式:
    select 字段|* from 表A right [outer] join 表B on 表A.主键=表B.外键;
    4> 子查询:sql语句的嵌套
    a.一条sql语句使用另外一条sql语句的查询结果作为查询的条件
    格式:
    select * from 表B where 字段 = (select 字段 from 表A [where 条件]);
    b.一条sql语句使用另外一条sql语句的查询结果,作为一张表使用(多表查询,内连接查询)
    select * from 表B,(select * from 表A [where 条件])表A where 表A.主键=表B.外键;

    22. 省份和城市的1对多关系
    主表:省份provice
    从表:城市city
    主外键关系:city中的外键字段,使用provice的主键作为外键约束
    好处:保证数据的准确性和完整性
    主表有的数据,从表可以有,可以没有
    主表没有的数据,从表也不能有
    删除主表的数据,必须保证从表没有使用

    23. 自关联1对多的关系:本表外键使用本表的主键作为外键

    24. 用户和角色的多对多关系
    建表元素:创建一张中间表,使用两个主表的主键作为外键
    主表:用户表user,角色表role
    中间表:user_role
    角色和权限的多对多关系
    主表:角色表role,权限表:privilege
    中间表:role_privilege

    25. 多表查询:一次查询2张以上的表
    1> 交叉连接查询:很少使用有错误数据
    格式:
    select 字段|* from 表A,表B;
    2> 内连接查询:使用外键约束作为查询条件
    a.隐式内连接查询:不使用关键字[inner] join on
    格式:
    select 字段|* from 表A,表B where 表A.主键=表B.外键;
    b.显示内连接查询:使用关键字[inner] join on
    格式:
    select 字段|* from 表A [inner] join 表B on 表A.主键=表B.外键;
    3> 外连接查询:使用外键约束作为查询条件
    a.左外连接查询:使用关键字 left [outer] join on;以左边的表为主,左边有的数据,右边没有使用null代替
    格式:
    select 字段|* from 表A left [outer] join 表B on 表A.主键=表B.外键;
    b.右外连接查询:使用关键字 right [outer] join on;以右边的表为主,右边没有的数据,左边也不能出现
    格式:
    select 字段|* from 表A right [outer] join 表B on 表A.主键=表B.外键;
    4> 子查询:sql语句的嵌套
    a.一条sql语句使用另外一条sql语句的查询结果作为查询的条件
    格式:
    select * from 表B where 字段 = (select 字段 from 表A [where 条件]);
    b.一条sql语句使用另外一条sql语句的查询结果,作为一张表使用(多表查询,内连接查询)
    select * from 表B,(select * from 表A [where 条件])表A where 表A.主键=表B.外键;



  • 相关阅读:
    PrintWriter write与println方法的区别
    java线程之一 单线程
    Android系列之ListView实现分页和类似异步加载效果(转载)
    Failed to fetch URL http://dlssl.google.com/android/repository/addons_list
    java rpc 综述(上)
    横竖屏切换时候Activity的生命周期
    【转载】C# 大数相乘
    ASP.NET 2.0 中使用PreviousPage的强类型属性
    人生一世
    SQL 中的indexof函数CHARINDEX
  • 原文地址:https://www.cnblogs.com/youyouxiaosheng-lh/p/8343362.html
Copyright © 2011-2022 走看看