前言:
1.一些mysql的存储引擎
2.mysql的数据类型
数据库创建成功后使用 SELECT VERSION();查询数据库版本,select user();查询当前的用户
一.DDL语句:
定义:数据库定义语言,库表的创建、删除及字段的增删改查
创建数据库:
create database 数据库名称
删除数据库:
drop database 数据库名称
创建表:
create table 表名(字段名 字段类型)
CREATE TABLE
contacts1
(
id
int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name
varchar(20) ,
sex
tinyint(4) NULL DEFAULT 1,
phone
varchar(20)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
添加表字段:
alter table contacts1 add address VARCHAR(255);
修改表字段:
alter table contacts1 modify address int;
删除表字段:
alter table contacts1 drop column address;
删除表:
drop table contacts1 ;
二.DML语句
定义:数据库操作语言,对于数据的增删改
插入语句:
INSERT INTO contacts(name,sex,phone) VALUES (‘老王’, 1, ‘18700000000’);
插入单条语句方式一:INSERT INTO contacts(name,sex,phone) VALUES (1, ‘老王’, 1, ‘18700000000’);
插入单条语句方式二:INSERT INTO contact VALUES (1,‘老王’, 1, ‘18700000000’);
插入多条语句:INSERT INTO contacts1(name,sex,phone) VALUES (‘老王’, 1, ‘18700000000’),(‘老王2’, 1, ‘18700000001’);
修改语句:
update contacts1 set name=“jack”,sex=0 where id=1;
删除语句:
delete from contacts1 where id=4;
清空表:delete from contacts1;
注意清空表之后,再次插入数据的话, 对于主键自增的id来说,会从上一次最后的id值之后进行录入,使用TRUNCATE TABLE contacts1;会使计数归零,但是对于在事务中,不能回滚,谨慎使用
三.DQL语句:
定义:数据库查询语言,主要关键字:Select
1.一般查询:
查询当前表中的所有字段:
select * from contacts1 ;
查询指定的字段:
select id,name from contacts1 ;
2.条件查询:
where子句(单条件查询):
select * from contacts1 where id =1;
select * from contacts1 where id !=1; 或者: select * from contacts1 where id <> 1;
select * from contacts1 where id > 1;
注意:between…and…的使用是闭区间,如下: [1,4]
select * from contacts1 where id between 1 and 4;
where子句(多条件查询):
or 的使用:
select * from contacts1 where id =1 or id =5;
and的使用:
select * from contacts1 where id =1 and name =“老王”;
or和and结合使用:
select * from contacts1 where (id=1 and name=“老王”) or id=5;
四.内置函数
1.case when的使用:
case when的使用: SELECT id,name , CASE sex WHEN 1 THEN “男” WHEN 0 THEN “女” ELSE “不男不女” END as 性别 from contacts;
五.排序与分页
1.limit的使用,主要用于分页
limit的后面的第一个代表偏移量,也就是页码(从零开始的),第二个代表每页显示的数量
select sex ,name from contacts limit 0, 5; #查询第一页,显示1,5行
select sex ,name from contacts limit 5; #查询第一页,显示1,5行
select sex ,name from contacts limit 1, 10; #查询第二页,显示11,20行
2.分组的使用,group by常于聚合函数一起使用
select sex, count(*) from contacts group by sex;
3.having的使用:主要是where后面不能跟聚合函数,但是having可以
select sex ,count(*) from contacts group by sex having count(*)>=2;
4.group_concat的使用:将分组后的字段值进行拼接
select sex, count(*),GROUP_CONCAT(name order by name asc SEPARATOR “;”) from contacts group by sex;
5.distinct的使用:用来过滤整行的重复数据
select distinct name,sex from contacts1;
6.自连接,用于当前表中有层次结构的,例如省和省份都在一张表中
示例如下:
对于如下表:
select p1.name
省份,p2.name 城市名称 from province p1,province p2 where p1.id=p2.label_id
六.子查询in和exists
1.IN的使用:用于前表数据量大,而次表数据量小的情况
select p1.name
from province p1 where p1.id in (select p2.label_id from province p2);
还有not in则表示的与之相反
2.exists的使用:用于前表数据量小,而次表数据量大的情况
select p1.name
from province p1 where exists(select p2.label_id from province p2 where p2.label_id=p1.id);
还有not exists则表示的与之相反