SQL分类
- DDL
- DML
- DQL
- DCL
DDL
操作数据库
显示全部数据库show databases;显示建表语句,可以看字符集show create databases mysql(database name);创建一个数据库create database db1;创建判断create database if not exists db1;创建gbk数据库create database db3 character set gbk;修改字符集alter database db3 character set utf8;删除数据库drop database db3;查询正在使用的数据库select database();使用数据库use db1;
操作表
显示表show tables;显示表结构desc 表名;创建表create table table1(列名1 数据类型1,列名2 数据类型2,列名3 数据类型3)比如 name varchar(10)复制表create table 表名 like 被复制的名字;删除表drop table 表名;
数据库类型
整型
小数类型
float double decimal
double(5,2)一共五位,小数点后面保留两位,最大值999.99
日期类型
date
datetime带时分秒
timestamp和上面类似,只不过默认自动添加系统时间
举例
ISO 8601是带时区的
new Date(Date.parse(ISO 8601))
字符串
varchar可变长,不能超过设定长度
name varchar(10)名字最大为10
修改表
alter修改表结构
update更新表内数据
改名alter table 表名 rename to 新的表名;改表类型alter table 表名 character set utf8;添加表列alter table 表名 add 列明 数据类型;修改表名和类型alter table 表名 change 列明 新的列名 新的类型;alter table 表名 modify 列明 新的类型;删除列alter table 表名 drop 列名;修改数据update user set age=20 where name='jixiaolan';
serial自增类型可做id
也有别的自增方法,例如使用关键字auto_increment:
在使用自增类型之后,测试时往往会遇到一些问题。编写测试类插入数据时,数据就会自增,等到项目上线时,数据库的自增已经进行了一部分了
create table t_user(id int(10) primary key auto_increment,name varchar(32) not null);
DML
添加
insert into 表名(r1,r2,r3...) values(v1,v2,v3...)如果插入没输入值为(null)不加列名默认全部加属性,注意要一一对应,不然出错insert into 表名 values(v1,v2,v3...)除了数字类型,全部加引号插入一个表多个值insert into 表名 values(v1,v2,v3...),(v1,v2,v3...),(v1,v2,v3...)
删除
delete from 列名 where id - 1;--会逐列删除不加条件where删除表truncate table 表名;--会删除表创建空表
修改
update stu set age = 117,score = 10 where id = 3;
DQL
select字段列表from表名列表where条件列表group by分组字段having分组之后的条件order by排序limit分页限制
基础查询
查询全部字段的列表select * from student查询学生表中的name和age列字段select name,age from student查询去重select distinct address from student查询和,一般四则运算select math + english from student如果null则为0,as起别名select math + ifnull(english,0) as 总分 from student
条件查询
查询年龄大于20select * from student where age > 20;并且and &&或者or ||in集合select * from student where age = 20 or age = 21;等于select * from student where age in (20,21);查询是不是nullselect * from student where age is null;select * from student where age is not null;like模糊查询占位符%多长无所谓_占一个位置查姓马的select * from student where name like "马%";查名字第二个为化的select * from student where name like "_化%";
排序查询
升序select * from student order by math asc;默认的降序select * from student order by math desc;先排math,再排englishselect * from student order by math asc,english desc;
聚合函数
计算name总数有多少,不包括nullselect count(name) from studentselect count(ifnull(name,0)) from studentmaxminsumavg
分组查询
1
分页查询
2
表连接
- inner join 只显示交叉内容
- left join 左边的表显示全
- right join 右边的表显示全
- full outer join 两个表全部显示
举例
create table user1(id serial,name text);create table stuff1(id serial,name text);create table order1(id serial,user_id int unsigned,stuff_id int unsigned,amount int unsigned);
as别名select user1.name,order1.amount from user1 inner join oder1on user1.id = order1.user_id;
select user1.name as uname,order1.amount as oamount from user1 inner join oder1on user1.id = order1.user_id;
索引
用于提高搜索效率创建索引
create unique index index123这是名字 on user1(name(10));
显示索引
show index in user1;
