1.博客1
2.博客2
(1)DDL:数据库定义语言,用于定义表,列,索引等数据库对象. create,drop,alter等
(2)DML:数据库操纵语言,增删改查数据库的记录insert,delete,update,select等
(3)DCL:数据库控制语言,定义了数据库的表,字段,用户的访问权限和安全级别 grant,revoke等
1.DDL语句
(1)创建数据库:create database test1;
(2)删除数据库:drop database test1;
(3)创建表:create table user (name varchar(10), age int(2));
(4)删除表:drop table user;
(5)修改表:
alter table user modify name varchar(20); 修改字段定义
alter table user add column sex varchar(10); 加一列
alter table user drop column age; 删一列
Alter table user change age age1 int(4); 将 age 改名为 age1,同时修改字段类型为 int(4)
Alter table user rename user1; 表改名
2.DML语句
(1)插入记录:insert into user(name,age) values(‘zhangsan’,18);
(2)删除记录:delete from user where name=’张三’
(3)更新记录:update user set age=1 where name=’ 张三’
(4)查询记录:select * from user;
(5)查询不重复的记录:select distinct name from user;
(6)排序查询:select * from user order by age desc;
(7)限制排序:select * from user order by age limit 1,30;
(8)聚合:select name,age from user group by age;
(9)聚合后条件:select name,age from user group by age having age > 18;
(having和where的区别:having 是对聚合后的结果进行条件的过滤,而 where 是在聚合前就对记录进行过滤)
(10)表连接:
从大类上分,表连接分为内连接和外连接,它们之间的最主要区别是內连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。我们最常用的是内连接。
①内连接: Select ename, deptname from emp, dept where emp.deptno = dept.deptno;
②外连接:
左连接:(查询 emp 中所有用户名和所在部门名称:)
select ename,deptname from emp left join dept on emp.deptno=dept.deptno;
右连接:
select ename,deptname from emp left join dept on emp.deptno=dept.deptno;
左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录
右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录
(11)子查询:需要的条件是另一个select的结果
(子查询的关键字主要包括in, not in,=,!=,exists,not exists )
(如果查询结果数唯一,可用=代替in)
select * from emp where deptno in (select deptno from dept);
select * from emp where deptno = (select deptno from dept limit 1);
(12)记录联合:
select * from t1 union select * from t2
select * from t1 union all select * from t2
UNION 和 UNION ALL 的主要区别是:
UNION ALL 是把结果集直接合并在一起,而 UNION 是将 UNION ALL 后的结果进行一次 DISTINCT,去除重复记录后的结果。
4.DCL语句
(1)授权(grant):创建一个数据库用户 z1,具有对 sakila 数据库中所有表的 SELECT/INSERT 权限:
grant select,insert on sakila.* to 'z1'@'localhost' identified by '123';
(2)收回权限(revoke):由于权限变更,需要将 z1 的权限变更,收回 INSERT,只能对数据进行 SELECT 操作:
revoke insert on sakila.* from 'z1'@'localhost';
帮助命令:就是?+要查询的语句
char 和 varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此。
2.char(n) 固定长度,char(4) 不管是存入几个字符,都将占用 4 个字节,varchar 是存入的实际字符数 +1 个字节(n<=255)或2个字节(n>255),所以 varchar(4),存入 3 个字符将占用 4 个字节。
3.char 类型的字符串检索速度要比 varchar 类型的快。在检索的时候,CHAR 列删除了尾部的空格,而 VARCHAR 则保留这些空格。
varchar 和 text:
1.varchar 可指定 n,text 不能指定,内部存储 varchar 是存入的实际字符数 +1 个字节(n<=255)或 2 个字(n>255),text 是实际字符数 +2 个字节。
2.text 类型不能有默认值。
3.varchar 可直接创建索引,text 创建索引要指定前多少个字符。varchar 查询速度快于 text, 在都创建索引的情况下,text 的索引似乎不起作用。
1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
2._BLOB存储的数据只能整体读出。
3._TEXT可以指定字符集,_BLO不用指定字符集。
若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。
MySQL 提供了多种内建函数帮助开发人员编写简单快捷的 SQL 语句,其中常用的函数有:
字符串函数、数值函数和日期函数。
注:MySQL 有很多内建函数,这些内建函数实现了很多应用需要的功能并且拥有很好的性能,如果用户在工作中需要实现某种功能,最好先查一下 MySQL 官方文档或者帮助,看是否已经有相应的函数实现了我们需要的功能,可以大大提高工作效率。
6.1 MySQL Administrator
6.2 MySQL Query Brower
两者关系:Query Brower 主要用于管理数据库中保存的数据,而 Administrator 主要用于管理数据库的对象。