linux篇:
一、 启动和关闭mysql服务
方法1、通过命令行方式启动和关闭
启动:/usr/bin/mysqld_safe &
[1] 30986
关闭:mysqladmin -uroot shutdown
STOPPING server from pid file /var/lib/mysql/localhost.localdomain.pid
070820 04:36:30 mysqld ended
[1]+ Done ./mysqld_safe
方法2、通过服务的方式启动和关闭(适用于RPM包安装方式)
启动:service mysql start
Starting MySQL[ OK ]
重启:service mysql restart
Shutting down MySQL..[ OK ]
Starting MySQL[ O K ]
关闭:service mysql stop
Shutting down MySQL..STOPPING server from pid file /var/lib/mysql/360-GAME.pid
141028 17:04:21 mysqld ended [ 确定 ]
[1]+ Done /usr/bin/mysqld_safe
二、SQL(Structured Query Language 结构化查询语言,它是一种对关系数据库中的数据进行定义和操作的语言方法)分类
SQL 语句可以划分为以下6个类别。
DQL(Data Query Language 数据查询语言):用以从表中获得数据,确定数据怎样在应用程序给出。常用保留字有SELECT、WHERE、ORDER BY、GROUP BY、HAVING;
select user,host,password from mysql.user order by user asc;
DDL(Data Definition Languages)语言:数据定义语言,这些语句定义了不同的数据段、
数据库、表、列、索引等数据库对象的定义。常用的语句保留字主要包括create、drop、alter
等。
DML(Data Manipulation Language)语言:数据操作语言,用于添加、删除、更新和查
询数据库记录,并检查数据完整性,常用的语句保留字主要包括insert、delete、udpate 和
select 等。
TPL(事物处理语言):它的语句能确保被DML语句影响的表的所有行及时得以更新。关键字主要包括BEGIN、TRANSACTION、COMMIT、ROLLBACK。
DCL(Data Control Language)语言:数据控制语言,用于控制不同数据段直接的许可和
访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的
语句关键字包括grant、revoke 等。
CCL(指针控制语言):常用保留字DECLARE CURSOR、FETCH INTO、UPDATE WHERE CURRENT用于对一个或多个表单独行操作。
SQL语句最常见的三类:
1、DDL语句
创建数据库:create database dbname; #默认latin1字符集;
create database dbname1 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; #创建gbk字符集的数据库;
create database dbname2 CHARACTER SET utf8 COLLATE utf8_general_ci; #创建utp8字符集的数据库;
show create database dbname\G; #查看建库语句;
查看数据库:show databases;
选择数据库:use dbname;
查看表:show tables;
删除数据库:drop database dbname;
创建表:create table tabname(column_name_1 column_type_1 constraints,......column_name_n column_type_n constraints);
例:create table emp(ename varchar(10),hiredate date,sal decimal(10,2),deptno int(2));
查看表定义:desc tabname;
查看更全面的表定义信息:show create table tabname \G;
删除表:drop table tabname;
修改表:alter table tablename modify [column] column_definition [first | after col_name];
例:alter table emp modify ename varchar(20);
添加表字段:alter table tablename add [column] column_definition [first | after col_name];
例:alter table emp add column age int(3);或 alter table emp add age int(3);
删除表字段:alter table tabname drop [column] col_name;
例:alter table emp drop column age;或alter table emp drop age;
字段改名:alter table tabname change [column] old_col_name column_definition [first|after col_name];
例:alter table emp change age age1 int(4);
添加新字段并排序:alter table emp add birth date after ename; #将字段birth排在字段ename后面;
修改字段的顺序:alter table emp modify age int(3) first; #将字段age排在字段首位;
修改表名:alter table tabname rename[to]new_tabname;
例:alter table emp rename emp1;
2、DML语句
2.1、插入记录:insert into tablename (field1,......fieldn) values(values1,......valuesn);
例:insert into emp (ename,hiredate,sal,deptno) values('zzx1','2000-01-01','2000',1);
或 insert into emp values('lisa','2003-02-01','3000',2); #也可以不用指定字段名称,但是values 后面的顺序应该和字段的排列顺序一致;
查看记录:select * from tabname;
插入多个记录:insert into tabname (field1,......fieldn) values(record1_value1,......record1_valuesn),(recordn_valuen,......recordn_valuesn);
例:insert into dept values(5,'dept5'),(6,'dept6');
2.2、更新记录:update tabname set field1=value1,......fieldn=valuen[where condition];
例:update emp set sal=4000 where ename='lisa';
更新多个表中数据:update t1,......tn set t1.field1=expr1,tn.fieldn=exprn [where condition];
例:update emp a,dept b set a.sal=a.sal*b.deptno,b.deptname=a.ename where a.deptno=b.deptno; #表a字段sal等于字段a数据乘以表b字段deptno,表b字段deptname 等于表a字段name,如果表a字段deptno等于表b字段deptno的话;
2.3、删除记录:delete from tabname [where condition];
例:delete from emp where ename='dony';
删除多个记录:delete t1,......tn from t1,......tn [where condition];
例:delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=3; #删除表emp和dept中字段deptno相同并且deptno=3的记录;
2.4、查询记录:select * from tabname [where condition];
例:select * from tabname;
select ename,hiredate,sal,deptno from emp; #查询指定字段的记录;
2.4.1、查询不重复的记录:select distinct 字段 from emp;
例:select distinct deptno from emp; #显示去掉重复记录;
例:select distinct age from pro_file; #显示去掉重复记录的字段age;
例:select distinct deptno from pro_file where age='29'; #显示匹配字段age等于29条件的deptno字段去重;
2.4.2、条件查询:(where 后面的条件是一个字段‘=’比较,除了‘=’之外,还可以使用>,<,>=,<=,!=)
例:select * from emp where deptno=1; #显示匹配字段deptno等于1的条件的所有记录;
select * from emp where deptno=1 and sal<3000; #显示匹配字段deptno等于1并且字段sal小于3000的所有记录;
2.4.3、排序和限制:select * from tabname [where condition] [order by field1 [desc|asc],......fieldn[desc|asc]];
#desc和asc是排序顺序关键字,desc表示按照字段进行降序排序,asc表示升序(默认),order by后面可跟多个排序字 段,并且每个字段可以有不同的排序顺序;
例:select * from emp order by sal; #显示字段sal升序排序;
select * from emp order by deptno,sal desc; #字段deptno升序排序,如果deptno相等字段sal降序排序;
select * from emp order by sal [limit offset_start,row_count];
例:select * from emp order by sal limit 3; #显示表emp中按照sal排序后的前3条记录;
select * from emp order by sal limit 1,3; #显示表emp中按照sal排序后从第二条记录开始,显示3条记录;
2.4.4、聚合:select [field1,......fieldn] fun_name from tabname [where where_contition] [group by field1,......fieldn [with rollup]] [having where_contition];
#fun_name 表示要做的聚合操作(聚合函数),常用的sum(求和)、count(*)(记录数)、max(最大值)、min(最小值);
#group by 关键字表示要进行分类聚合的字段,如按照部门分类统计员工数量;
#with rollup 可选语法,表名是否对分类聚合后的结果进行再汇总;
#having 关键字表示对分类后的结果再进行条件的过滤。
例:select count(1) from emp; #统计公司的总人数;
select deptno,count(1) from emp group by deptno; #统计各个部门的人数;
select deptno,count(1) from emp group by deptno with rollup; #统计各部门人数,又要统计总人数;
select deptno,count(1) from emp group by deptno having count(1)>1; #统计部门人数大于1人的;
select sum(sal),max(sal),min(sal) from emp; #统计公司所有员工薪水总额、最高和最低;
2.4.5、表连接(分为内链接和外连接):当需要同时显示多个表中的字段时,就可以用表连接来实现这样的功能。
#左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录
#右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录
例:select ename,deptname from emp,dept where emp.deptno=dept.deptno;# 查看表emp和dept中deptno相等的ename字段和 deptname字段内容(仅包含合法记录);
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; #包含不合法记录;
2.4.6、子查询:关键字包括in、not in、=、!=、exists、not exists 等;
例:select * from emp where deptno in(select deptno from dept); #先查询表dept中的deptno字段,如果与表emp中的deptno字段相同则显示;
select * from emp where deptno = (select deptno from dept limit 1); 或
select * from emp where deptno in(select deptno from dept);#如果子查询记录数唯一,还可以用=代替in
select emp.* from emp ,dept where emp.deptno=dept.deptno;#子查询可以转化为表连接
2.4.7、记录联合:union和union all区别是union all把结果集直接合并在一起,union是将union all后的结果进行一次distinct,去除重复记录后的结果;
例:select deptno from emp union all select deptno from dept; #将emp和dept表中的部门编号的集合显示出来;
select age,deptno from pro_file union all select age,deptno from xianmin;
select deptno from emp union select deptno from dept; #将emp和dept表中部门编号去重复记录后显示;
3、DCL语句:DCL 语句主要是DBA 用来管理系统中的对象权限时所使用(grant、revoke);
例1:创建一个数据库用户dbuser,具有对minmin数据库中所有表的select/insert权限;
grant select,insert on minmin.* to 'dbuser'@'localhost' identified by '123456';#设置用户dbuser在数据库minmin下所有表都具有select,insert权限,并且登录密码为123456;
新用户登录:mysql -usxm -p123456;
alter table pro_file drop cc; #删除表pro_file中cc字段贴士没有alter权限;
ERROR 1142 (42000): ALTER command denied to user 'sxm'@'localhost' for table 'pro_file';
insert into xianmin values('Jack','29','1995-10-10','7','7700'); #向表xianmin中插入记录;
例2:收回数据库用户sxm的insert权限,只能对数据进行select操作;
mysql -uroot #用root登录;
revoke insert on minmin.* from 'sxm'@'localhost'; #收回用户sxm对数据库minmin下所有表的insert权限;
重新登录:mysql -usxm -p123456;
insert into xianmin values('Wolf','39','1976-9-9','8','9900');
ERROR 1142 (42000): INSERT command denied to user 'sxm'@'localhost' for table 'xianmin' #提示没有insert权限;
4、帮助的使用:
4.1、按照层次看帮助:?或help ,”? contents“命令来显示所有可供查询的分类;
”? data types“查看mysql中都支持哪些数据类型;
"? int" 查看int类型的具体介绍;
4.2、快速查阅帮助:快速查阅某项语法时,可使用关键字进行快速查询;
例:? show; #知道show命令都能看些什么东西;
? create table; #参看create table的语法;
4.3、常用网络资源
mysql官网:http://dev.mysql.com/downloads/ #可下载各个版本的mysql以及相关客户端开发工具等;
mysql数据库及工具的在线手册:http://dev.mysql.com/doc/
mysql已发布bug列表,或者向mysql提交bug:
mysql发布的最新消息:。
阅读(1106) | 评论(0) | 转发(0) |