这几天身体不适,更新较慢,此片名为开发篇,旨在开发中会用到的一些SQL语句做介绍。可以查看SQL深入浅出这本书,感觉讲的还可以,我做了十几页笔记,下面基本是我做的一些笔记,可能时间仓促,如有不足请指正:
1.MySQL数据类型
整数,tinyint 1,smallint 2, mediumint 3,int 4, integer 4, bigint 8。数字表字节数
浮点数 float 4,double 8
定点数 decimal (M,D) M为精度,D标度,小数点后面的位数 默认为(10,0)(5,2)表示范围是 999.99,整数部分加起来不大于M-D;
日期 year , date , time , datetime , timestamp ;后两个是日期和时间
字符串 char varchar ; tinytext text mediumtext longtext ; enum (多) set(单) 散列值;
二进制 binary varbinary ; bit(M) m<= 64 ; tinyblob blob mediumblob longblob (图片) ;
2.建库
create database xxx;
show databases;
drop database xxx;
3.建表
之前先指明所用的数据库,use 数据库名;
create table 表名 (属性名 数据类型【约束条件】,
……
属性名 数据类型【约束条件】);
drop table 表名;
约束条件:primary key,foreign key ,nnot null, unique , auto_increment,default
多主键:primary key(xxx,yyy);
外键语法:constraint 外键名 foreign key (属性名1) references 表名(属性名1);
desc 表名; 查看表结构,也可验证是否存在表。
4.修改
alter table [old_name] rename [new_name];
增加字段 alter table 表名 add 属性名 属性类型 [first|after 属性名];
删除字段 alter table 表名 drop 属性名;
修改字段类型 alter table 表名 modify 属性名 属性值;
修改字段名字与类型 alter table 表名 change 旧属性名 新属性名 新数据类型;
修改字段顺序 alter table 表名 modify 属性名1 数据类型 first|after 属性名2;
5.插入
insert into 表名 [可插入的属性名] values (属性值1,属性值2...);
6.更新
update 表名 set field1=value1,field2=value2....
7.删除记录
delete from 表名 [where ....]
8.查询
不重复记录 distinct
select distinct 属性名 from 表名;
条件查询
where 后加 = > < >= <= !=
排序,限制
order by desc 下降 asc 上升 [limit offset_start(默认为0),row_count]
聚合
sum , count , max , min
group by 需要聚合的属性名
with rollup 是否对分类的聚合结果再汇总
having 分类后的结果进行再过滤
select deptno,count(1) from emp group by deptno; 只统计部分的人数
select deptno,count(1) from emp group by deptno with rollup; 统计部分还有总人数
表连接语句
内连接:两张表中相互匹配的记录
外连接:两张表中不匹配的记录 这里又分 左连接 与 右连接
左连接:包含左边表中的所有记录,即使右边没有匹配的
右连接:与左连接相反,一般只固定一种
内连:select ename,deptname from emp,dept where emp.deptno = dept.deptno
左连:select ename,deptname from emp left join dept on emp.deptno = dept.deptno 下面的右连与此句效果相同
右连:select ename,deptname from dept right join emp on dept.deptno = emp.deptno
子查询
子查询关键字( in , not in , = , != , exist ,not exist 等)
select * from emp where deptno in (select deptno from dept);
如果子查询记录数唯一,用 = 代替 in
select * from emp where deptno =(select deptno from dept limit 1);
记录联合 union , union all
select deptno from emp union select deptno from dept;
union是将 union all 结果去除重复,相当于进行了一次distinct。
创建数据库用户z1,并具有对myself数据库所有表的select /insert 权限 (下面语句是有问题的,还没来得及找到相关解答,我在root用户下执行这个命令的时候 默认赋予了全部权限)
grant select,insert on myself.* to 'z1'@'localhost' identify by '123'
收回权限 revoke insert on myself.* from 'z1'@'localhost';
查看用户权限 show grants for 'z1'@'locahost';
一般创建的用户记录会存在mysql.user的表里,可以去查到相关记录,但是密码没法明文看到,这涉及到mysql自带的password函数加密。
? contents 寻求帮助
下面还有一些索引,视图,存储过程与函数,光标,触发器,事务控制与锁定语句等相关数据库对象,后期更新。