自己总结的Mysql一些简单操作

连接数据库命令

Mysql u root p //然后再输入密码进入数据库命令行界面

DDL语句     数据库定义语言

创建一个数据库的语句是:

Create database database_name;

选择数据库命令是

Use database_name;

删除数据库的操作:

Drop database database_name;

创建表操作

Create table emp(

ename varchar(20),

hiredate date,

sal decimal(10,2),

deptno int(2)

);

表创建完成以后,查看一下表的定义,可以用如下命令:

Desc table_name; //desc student;

有时候需要查看详细的表定义,这时需要的语句为:

Show create table table_name;

For example: show create table emp \G;

 

迅速清空表中的数据:

Truncate newstu//delete区别就是truncate相当于删除表之后再重建一张同样结构的表,操作后得到一张全新表。而delete是从删除所有的层面来操作的。 如果决定全部清空的情况下,truncate 的速度更快一些。

删除表的操作为:

Drop table table_name;

修改表

(类型修改)

Alter table  tablename modify column_definition [FIRST|AFTER col_name]

For example:

修改表empename字段的定义,将varchar10)改为varchar(20)

Alter table emp modify ename varchar(20);//并不修改字段的位置

Alter table tangseng modify id tinyint unsigned not null auto_crement primary key;

(增加表字段)

Alter table tablenale add [column] column_definition [FIRST|AFTER col_name]

For example:在表emp中增加新的字段age,类型为int3);

Alter table emp add column age int(3);//如果没有指定位置,则显示在最后

Alter tabla  tablename add primary key(index_col_name);添加主键名称

Alter table tablename drop primary key;删除唯一索引

Alter table tablename drop index index_name删除索引名称;

(删除表字段)

Alter table tablename drop  [column] column_name;

For example:删除字段age

Alter table emp drop column age;//其中关键字column可有可无

(字段改名)

Alter table tablename CHANGE [column] old_name column_definition [FIRST]

Alter table tablename rename to new_tablename;

Rename table old_name to new_name;

如果在重新命名一个数据表时在它的前面加上数据库名的前缀,就可以把它从一个数据库移动到另一个数据库中。比如说:

Alter table sampdb.t rename to test.t;

Rename table  sampdb.t to test.t;

For example:将字段age改名为age2,同时修改字段类型为int4

Alter table emp change age age2 int(4);

Notes: change modify都可以修改表的定义,不同的是change后面需要写两次列名,不方便,但是change的优点是可以修改列的名称,modify则不可以。

 

DML语句   数据库操纵语言

1、 插入记录

Insert into tablename(field1,field2……) values(value1,value2……);

For example:插入一条记录

Insert into emp (ename,hiredate,sal,deptno) values (zzz,2001-09-09,200,1);

也可以不指定字段名称,但是要保持排列一致

Insert into emp values (zzz, 2001-2-3,233,4);

Note: 含可空字段,非空但是含有默认值的字段,自增字段,可以不用在insert后的字段列表里面出现,values后面只写对应字段名称的value。这些没写的字段可以自动设置为NULL,默认值,自增的下一个数字。

插入多个记录的语句为:

Insert into tablename (field1,field2,……)values

(record1_value1,record1_value2,……),

(record2_value2,record2_value2 , ……);

更新记录

Update tablename set field1 = value1, field2 = value2, ……[where condition];

For example:

Update emp set sal = 4000 where ename = lisa;

同时更新多个表的操作,例如更新表emp中的字段和表dept中的字段;

Update emp a, dept b set a.sal = a.sal*b.deptno, b.deptname=a.ename where a.deptno = b.deptno;

删除记录

Delete from tablename [where condition];

For example: emp中将enamedony的记录删除

Delete from emp where ename = dony;

删除多个记录的值为:

Delete t1,t2,…… from t1,t2,…… [where condition];

在下列删除表empdept中的deptno3的记录:

Delete a,b from emp a,dept b where a.deptno = b.deptno and a.deptno = 3;//如果from后面的表明用别名,则delete后面的也要用相应的别名,否则会提示语法错误。无论是单表还是多表,不加where条件,会删除整个记录,所以操作一定要小心。

查询记录

Select * from tablename [where condition]

a.查询不重复的信息

有时候需要查询表中的不重复信息,可以用distinct关键字来表示

Select ename, hiredate, sal, deptno from emp;

Select distinct deptno from emp;

b.条件查询

select * from emp where deptno = 1;

c.排序和限制

select * from tablename [where condition] [order by field1 (desc|asc), field2 (desc|asc),……];

//其中desc代表的是降序排列,asc代表的是升序排列,默认升序排列。

//例如查询emp表中的记录按照工资高低来显示

Select * from emp order by sal;

如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序。如果只有一个排序字段,则这些字段相同的记录将会按照无序排列。

对于排序后的记录,如果希望只显示一部分,而不是全部,这时,就需要使用LIMIT关键字来实现,语法如下:

Select …… [ LIMIT offset_start, row_count ] //其中offset_start表示记录的起始偏移量,默认为0,这时只需要写行数就行了,实际显示的就是前N条记录。row_count表示显示的行数。

For example:显示emp表中的前3条记录,同时按照sal排序.

Select * from emp order by sal limit 3;

如果要显示emp表中按照sal排序后,从第二条记录开始的3条记录,可以使用如下命令:

Select * from emp order by sal limit 1,3;

Note:limit经常和order by一起配合,来进行记录的分页显示。

聚合

条件:很多情况下,用户都需要进行一些汇总操作,比如统计整个公司的人数或者统计每个部门的人数,这时就要用到SQL的聚合操作。

聚合操作语法如下:

Select [field1,field2,……,fieldn] fun_name

From tablename

[where where_contition]

[group by field1,field2,……,fieldn [ with rollup]]

[having where_contition]

其中fun_name表示要做的聚合操作,也就是聚合函数,常用的有sum,count(*),max,min

Group by 关键字表示要进行分类聚合的字段,比如要按部分分类统计员工数量,部门就应该写在group by 后面。

With rollup 是可选语法,表明是否对分类聚合后的结果进行再汇总。

Having 关键字表示分类后的结果再进行条件的过滤。

Havingwhere区别在于having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤。

For example:emp表中的统计公司的总人数.

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;

统计人数大于1的部门:

Select deptno, count(1) from emp group by deptno having count(1)>1;

最后统计公司所有员工的薪水总额,最高和最低薪水。

Select sum(sal),max(sal),min(sal) from emp;

表连接

条件:当需要同时显示多个表中的字段时,就可以用表连接来实现这样的功能。分为外连接和内连接,区别在于内连接仅选出两张表中互相匹配的记录,而外连接会选出和其他不匹配的记录,我们最常用的是内连接。

For example:查询所有雇员的名字和所在部门名称,因为雇员名称和部门分别存放在表emp和表dept中,因此需要使用表连接来进行查询。

Select ename, deptname from emp, dept where emp.deptno=dept.deptno;

外连接又分为:

左连接:包含所有的左边表中的记录,甚至是右边表中没有和它匹配的记录。

右连接:包含所有的右边表中的记录,甚至是左边表中没有和它匹配的记录。

Select enamedeptname from emp left join dept on emp.deptno=dept.deptno;

比较这个查询,两者的区别就是在本例中列出了所有的用户名,即使有的用户名并不存在合法的部门名称。而上例中仅仅列出了存在合法部门的用户名和部门名称。

左连接和右连接类似,两者可以相互转化。

 

子查询

条件:某些情况下,当进行查询的时候,需要的条件是另一个select语句的结果,这个时候就要用到子查询。用于子查询的关键字主要包括innot in=,!=existsnot exists等。

例如:从emp中查询出所有部门在dept表中的所有记录:

Select * from emp where deptno in(select deptno from dept);

如果子查询记录数唯一,还可以用=代替in

某些情况下,子查询可以转化为表连接,例如:

Select * from emp where deptno in(select deptno from dept);//转化为表连接后:

Select emp.* from emp, dept where emp.deptno =dept.deptno;

子查询和表连接,主要用在优化子查询。

 

记录联合

条件:我们经常会碰到这样,将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来, 这个时候,就需要用union union all关键字来实现这样的功能,具体语法如下:

Select * from t1

Union | union all

Select * from t2

……

Union | union all

Select * from tn;

Union union all的区别是union all是把结果集直接合并在一起,而union是将union all后的结果进行一起distinct,去除重复后的结果。

 

DCL语句 主要是用来管理系统中对象权限的使用。例如创建一个用户z1,具有对sakila数据库中所有表的select/insert权限。

Grant select, insert on sakila.* to z1@localhost identified by 123;

由于权限的变更,需要将z1的权限变更,收回insert,只能对数据进行select操作。

Mysql  -u root –p root

Revoke insert on sakila.* from z1@localhost;

 

可以使用命令改变存储引擎:

Alter table table_name engine = InnoDB;

Alter table table_name engine = MyIsam;

 

 

 

Mysql可以创建好几种索引:

Alter table table_name add index index_name(index_columns);

Alter table table_name add unique index_name (index_columns);

Alter table table_name add primary key (index_columns);

Alter table table_name add fulltext index_name (index_columns);

Alter table table_name add spatial index_name (index_colunms);

其中index_columns是想添加的索引的一个或者多个数据列。如果索引有多个数据列构成,要用逗号在它们的名字中间隔开。索引名称index_name是可选的,如果不指定,系统会自动挑选名字。

删除索引语句:

Drop Index index_name ON table_name;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想做个自由的人

随缘吧打赏与否还是会坚持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值