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

    SQL语言包含四个部分:

      DDL(数据库定义语言):用于定义和管理数据对象,包括数据库、数据表等

              如:create、drop、alter

      DML(数据库操作语言):用于操作数据库对象中所包含的数据

              如:insert、update、delete

      DQL(数据库查询语言):用于查询数据库对象中所包含的数据

              如:select

      DCL(数据库控制语言):管理数据库的语言,包括管理权限及数据更改

              如:grant、revoke、commit、rollback         

     【对数据库的操作】

    创建数据库:create database/schema [if not exists] db_name default character set '字符集';

    删除数据库:drop database if exists db_name;

    查看已有的数据库:show databases/schemas;

    打开指定数据库:use db_name;

    查看当前打开的数据库:select database();

    查看已创建的指定数据库的编码方式:show create database db_name;

    修改已有数据库的编码方式:alter database db_name default character set '字符集';

    临时转换客户端的编码方式:set names gbk;(临时的用来输入中文,退出后就失效)

    将已有的数据库备份到外部文件中:

      mysqldump -u用户名 -p密码 db_name >> 文件路径/text.sql

    将外部文件中的数据导入到已有数据库中:

      方法一:mysql -u用户名 -p密码 db_name < 文件路径/text.sql

      方法二:

        use db_name; 

        source 文件路径/text.sql

    为数据库创建新用户授权:

      GRANT 权限 ON 数据库.数据表 TO 用户名@'登录的主机名' IDENTIFIED BY '密码' WITH GRANT OPTION;

      FLUSH PRIVILEGES;(立即生效)

      例:

        grant all/select,insert,update,delete on *.* to root@'%' identified by '密码' with grant option;

        flush privileges;

        (*.*表示所有数据库的所有数据表;'%'表示通过任意主机进行授权,可为'localhost'或已有用户的'主机IP')

    【对数据表的操作】

    创建数据表:

      create table [if not exists] `table_name`(

        `字段名称` 字段类型 [字段属性],

        ... ...

      )[engine=myisam default charset=utf8];

      例:

        create table [if not exists] `users`(

          `id` int unsigned auto_increment primary key,  #添加索引的三种方式之一

          `username` varchar(30) not null unique comment "字段加注释",

          `password` char(32) not null,

          `age` tinyint unsigned,

          `sex` enum("男","女","保密") default "男",

          `addr` varchar(255),

          `face` varchar(40) not null default "01.jpg",

          `email` varchar(50) not null default "819508293@qq.com",

          `vip` tinyint(1) not null default 0 comment "会员,0代表不是会员,其余值为会员",

          `startTime` int unsigned comment "会员起始时间",

          `endTime` int unsigned comment "会员到期时间",

          `ip` int not null,  #可利用 ip2long(str) 将IPv4转为int数值写入数据库,long2ip() 可将该int数值转为标准点格式的字符串输出;

          key users_email(`email`),  #添加索引的三种方式之二

          key users_ip(`ip`)

        )engine=myisam default charset=utf8 [collate utf8_general_ci];

        给字段添加注释:在字段最后加 comment "注释内容"

    删除数据表:

      drop table table_name1,table_name2...;

    修改数据表结构项:

      增加:alter table table_name add `字段名称` 字段类型;

        例:alter table table_name add `email` varchar(50);

      删除:alter table table_name drop `字段名称`;

        例:alter table table_name drop `email`;

      修改:

        alter table table_name modify `字段名称` 字段类型 字段属性;

          注:只能修改对应字段名称的字段类型和属性

          例:alter table table_name modify `name` varchar(30) not null;

        alter table table_name change `字段名称` `新字段名称` 字段类型 字段属性;

          注:不仅能修改字段类型和属性,也能修改字段名称

          例:alter table table_name change `name` `username` varchar(30) not null;

    用修改表结构方法添加索引:

      alter table table_name add primary key(id);

      alter table table_name add unique table_name_字段名(字段名);

      alter table table_name add index table_name_字段名_index(字段名);

    用修改表结构方法删除索引:

      alter table table_name drop primary key;

      alter table table_name drop index table_name_字段名;

      1.删除主键索引前,必须先将自增长修改掉;

      2.删除唯一索引 unique,也同样使用 drop index 而不是drop unique;

    查看数据表中所有字段的索引:

      show indexes from table_name G

    查看当前数据库已有数据表:show tables;

    查看已创建的指定数据表:show create table table_name;

    查看数据表的结构:

      desc table_name;

      describe table_name;

      show columns from table_name;

    【对数据表中数据的操作】

    向数据表中添加数据:

      insert [into] table_name(字段名称1,字段名称2...) values("值1","值2"...);

        例:

          ①指定字段名称和字段值一一对应,是字符串类型的须使用引号(" "/ ' ')包含,不是字符串类型的可加可不加:

            insert table_name(id,username,password) values(1,"admin1",'password1');

          ②可为空的自增列在插入字段值时可使用NULL,会自动转为自增的值:

            insert table_name(id,username,password) values(null,"admin1",'password1');

          ③自增列、非空且有默认值的字段可无需插入,仍会自动添加自增值或默认值:

            insert table_name(username,password) values("admin1",'password1');

          ④字段名称的顺序可自由排列,但后面字段值的顺序也应对应排列:

            insert table_name(password,username) values('password1',"admin1");

          ⑤可以省略字段名称,但在插入字段值的时候必须按照数据表中的字段顺序插入:

            insert table_name values(null,"admin1",'password1');

      insert [into] table_name(字段名称1,字段名称2...) values("值1","值2"...),("值1","值2"...),...;

        例:insert table_name(username,password) values("admin1","pass1"),("admin2","pass2"),("admin3","pass3");

    删除数据表中的数据:

      delete from table_name [条件语句];

      例:

        delete from table_name where 条件;

        delete from table_name order by 字段名称 asc limit 3;

    清空数据表中的数据:truncate [table] table_name;

      注:delete后再添加数据时,auto_increment(自增长)的值不会重置而是向后递加;truncate后auto_increment的值重置为1,重新开始递增;

    修改数据表中的数据:update table_name set 字段名称="值",字段名称="值",...;

    有条件的定向修改部分数据:

      update table_name set 字段名称="值" 条件语句;

      例:

        update table_name set 字段名称=字段名称+1 where 条件;

        uodate table_name set 字段名称="值" order by 字段名称 desc limit 3;

    select查询语句:

      select [all/distinct] */字段名称 from table_name [where 条件] [group by 分组] [having 条件过滤(二次过滤)] [order by 排序] [limit 显示条数];

      查询表中的所有记录:select * from table_name;

      整齐的格式化显示数据:select * from table_name G  (注意此时结尾是不加分号“;”的

      查询表中的总记录数:select count(*) from table_name;

      为总记录数起别名,方便之后直接通过别名取得该值:select count(*) as 别名 from table_name;

      给字段添加别名:select 字段 [as] 别名,字段 别名 from table_name;

      有条件的定向查询:select */字段名称 from table_name 条件语句;

      查询不重复的字段内容:select distinct 字段名称 from table_name;(distinct为去重复项)

      根据某字段排序:一般应用于数值型字段,order by 字段 asc(升序)/desc(降序)

        select * from table_name [where 条件] order by 字段 asc/desc;

        select * from table_name order by 字段1 asc/desc,字段2 asc/desc;

      查询限制显示条数的记录:

        select * from table_name limit 数值;(默认从头开始)

        select * from table_name limit 0,2;(0-偏移量,跳过前多少条;2-显示多少条)

        可用来做分页

    例:

      1.查询各个年龄段的人数总数

        select age,count(*) from table_name group by age;

      2.查询出年龄大于20的各个年龄的人数总数

        select age,count(*) from table_name where age>20 group by age;

      3.查询出年龄大于20的各个年龄的人数总数多于1个人的

        select age,count(*) as c from table_name where age>20 group by age having c>1;

      4.以年龄进行升序排序,如果年龄相同的,按id降序排列

        select * from table_name order by age asc,id desc;

      5.随机排序

        select * from table_name order by rand();

    多表关联查询:

      1.普通关联查询:

        select [table1.]字段1,[table1.]字段2,[table1.]字段3,[table2.]字段1,[table2.]字段2  from table1,table2 where table1.id=table2.uid;

        table1.id=table2.uid为关联项,table1中的数据值在table2中无关联项,则该数据不显示;

        select [别名1.]字段1,[别名1.]字段2,[别名1.]字段3,[别名2.]字段1,[别名2.]字段2  from table1 as 别名1,table2 as 别名2 where 别名1.id=别名2.uid;

        可以给数据表名称添加别名,方便简写;

      2.连接关联查询:

        左连接:以左表(table1)为主,先输出左表中的查询数据,右表中无关联项的则显示NULL

          select table1.字段1,table1.字段2,table1.字段3,table2.字段1,table2.字段2 from table1 left join table2 on table1.id=table2.uid;

          select [别名1.]字段1,[别名1.]字段2,[别名1.]字段3,[别名2.]字段1,[别名2.]字段2  from table1 as 别名1 left join table2 as 别名2 on 别名1.id=别名2.uid;

        右连接:以右表(table2)为主,先输出右表中的查询数据,左表中无关联项的则显示NULL

          select table1.字段1,table1.字段2,table1.字段3,table2.字段1,table2.字段2 from table1 right join table2 on table1.id=table2.uid;

          select [别名1.]字段1,[别名1.]字段2,[别名1.]字段3,[别名2.]字段1,[别名2.]字段2  from table1 as 别名1 right join table2 as 别名2 on 别名1.id=别名2.uid;

        内连接:不以任何表为主,直接查询on后面的关联条件项,无对应数据的均不显示

          select table1.字段1,table1.字段2,table1.字段3,table2.字段1,table2.字段2 from table1 inner join table2 on table1.id=table2.uid;

          select [别名1.]字段1,[别名1.]字段2,[别名1.]字段3,[别名2.]字段1,[别名2.]字段2  from table1 as 别名1 inner join table2 as 别名2 on 别名1.id=别名2.uid;

      3.嵌套关联查询(不推荐使用,效率极低)

        select * from table1 where id in(select uid from table2);

    当使用条件语句时可用条件:

      和:&& / and  或:|| / or  非:!=

      值为null/不为null:is null / is not null

      在什么范围之内:between...and...

      不在什么范围之内:not between...and...

      包含在其内:in(1,2,3,4...)

      不包含在其内的:not in(1,2,3,4...)  除了括号中的匹配外其他都显示

      模糊查询:like / not like

      通配符:%(代表任意多个字符)  _(代表任意一个字符)

    聚合函数:

      count(*):统计总数

      select sum(字段名) from table_name;  统计所有该字段的和

      select avg(字段名) from table_name;  统计该字段的平均值

      select max(字段名) from table_name;  统计该字段中的最大值

      select min(字段名) from table_name;  统计该字段中的最小值

  • 相关阅读:
    c traps and pitfalls reading note(1)
    比较好的进程篇总结(转)
    shell学习日志
    IPC--消息队列
    c进程学习日志
    c--socket通信TCP篇
    c语言文件操作总结
    c的面向对象思想记录
    c指针学习小结(参考别人总结的经验)
    vi 学习记录
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/9084732.html
Copyright © 2011-2022 走看看