SQL分类

  1. DDL
  2. DML
  3. DQL
  4. DCL

分号表示语句结束
mysql不区分大小写

DDL

操作数据库

  1. 显示全部数据库
  2. show databases;
  3. 显示建表语句,可以看字符集
  4. show create databases mysql(database name);
  5. 创建一个数据库
  6. create database db1;
  7. 创建判断
  8. create database if not exists db1;
  9. 创建gbk数据库
  10. create database db3 character set gbk;
  11. 修改字符集
  12. alter database db3 character set utf8;
  13. 删除数据库
  14. drop database db3;
  15. 查询正在使用的数据库
  16. select database();
  17. 使用数据库
  18. use db1;

操作表

  1. 显示表
  2. show tables;
  3. 显示表结构
  4. desc 表名;
  5. 创建表
  6. create table table1(
  7. 列名1 数据类型1
  8. 列名2 数据类型2
  9. 列名3 数据类型3
  10. )
  11. 比如 name varchar(10)
  12. 复制表
  13. create table 表名 like 被复制的名字;
  14. 删除表
  15. drop table 表名;

数据库类型

整型

int mediumint

小数类型

float double decimal
double(5,2)一共五位,小数点后面保留两位,最大值999.99

日期类型

date
datetime带时分秒
timestamp和上面类似,只不过默认自动添加系统时间
举例
ISO 8601是带时区的
new Date(Date.parse(ISO 8601))

字符串

varchar可变长,不能超过设定长度
name varchar(10)名字最大为10

char定长,不足会补充长度
text随意长度,不区分大小写

修改表

alter修改表结构
update更新表内数据

  1. 改名
  2. alter table 表名 rename to 新的表名;
  3. 改表类型
  4. alter table 表名 character set utf8;
  5. 添加表列
  6. alter table 表名 add 列明 数据类型;
  7. 修改表名和类型
  8. alter table 表名 change 列明 新的列名 新的类型;
  9. alter table 表名 modify 列明 新的类型;
  10. 删除列
  11. alter table 表名 drop 列名;
  12. 修改数据
  13. update user set age=20 where name='jixiaolan';

serial自增类型可做id
也有别的自增方法,例如使用关键字auto_increment:
在使用自增类型之后,测试时往往会遇到一些问题。编写测试类插入数据时,数据就会自增,等到项目上线时,数据库的自增已经进行了一部分了

  1. create table t_user(
  2. id int(10) primary key auto_increment,
  3. name varchar(32) not null
  4. );

DML

添加

  1. insert into 表名(r1,r2,r3...) values(v1,v2,v3...)
  2. 如果插入没输入值为(null
  3. 不加列名默认全部加属性,注意要一一对应,不然出错
  4. insert into 表名 values(v1,v2,v3...)
  5. 除了数字类型,全部加引号
  6. 插入一个表多个值
  7. insert into 表名 values(v1,v2,v3...),(v1,v2,v3...),(v1,v2,v3...)

删除

  1. delete from 列名 where id - 1;--会逐列删除
  2. 不加条件where删除表
  3. truncate table 表名;--会删除表创建空表

修改

  1. update stu set age = 117,score = 10 where id = 3;

DQL

  1. select
  2. 字段列表
  3. from
  4. 表名列表
  5. where
  6. 条件列表
  7. group by
  8. 分组字段
  9. having
  10. 分组之后的条件
  11. order by
  12. 排序
  13. limit
  14. 分页限制

基础查询

  1. 查询全部字段的列表
  2. select * from student
  3. 查询学生表中的nameage列字段
  4. select name,age from student
  5. 查询去重
  6. select distinct address from student
  7. 查询和,一般四则运算
  8. select math + english from student
  9. 如果null则为0,as起别名
  10. select math + ifnull(english,0) as 总分 from student

条件查询

  1. 查询年龄大于20
  2. select * from student where age > 20;
  3. 并且and &&
  4. 或者or ||
  5. in集合
  6. select * from student where age = 20 or age = 21;
  7. 等于
  8. select * from student where age in (20,21);
  9. 查询是不是null
  10. select * from student where age is null;
  11. select * from student where age is not null;
  12. like模糊查询
  13. 占位符%多长无所谓
  14. _占一个位置
  15. 查姓马的
  16. select * from student where name like "马%";
  17. 查名字第二个为化的
  18. select * from student where name like "_化%";

排序查询

  1. 升序
  2. select * from student order by math asc;默认的
  3. 降序
  4. select * from student order by math desc;
  5. 先排math,再排english
  6. select * from student order by math asc,english desc;

聚合函数

  1. 计算name总数有多少,不包括null
  2. select count(name) from student
  3. select count(ifnull(name,0)) from student
  4. max
  5. min
  6. sum
  7. avg

分组查询

  1. 1

分页查询

  1. 2

表连接

  1. inner join 只显示交叉内容
  2. left join 左边的表显示全
  3. right join 右边的表显示全
  4. full outer join 两个表全部显示
    举例
    1. create table user1(id serial,name text);
    2. create table stuff1(id serial,name text);
    3. create table order1(id serial,user_id int unsigned,stuff_id int unsigned,amount int unsigned);
    1. select user1.name,order1.amount from user1 inner join oder1
    2. on user1.id = order1.user_id;
    as别名
    1. select user1.name as uname,order1.amount as oamount from user1 inner join oder1
    2. on user1.id = order1.user_id;

    索引

    用于提高搜索效率

    创建索引

    1. create unique index index123这是名字 on user1(name(10));

    显示索引

    1. show index in user1;