MYSQL常用语法命令,MySQL中delete,drop和alter分别是用来删除什么的?有什么区别?删除了以后可以恢复吗?

1.AlterDeleteDrop相关语法

a、Alter

删除,添加或重新定义列

删除列:alter table tablename drop columnname

增加列:alter table tablename add columnname type 

在某列后增加一列:alter table tablename add columnname type after columnname2 

更改列定义或名称

alter table tablename modify columnname type

重命名表

alter table tablename rename tablename2(新表名)     

b、Delete

语法

DELETE FROM tablename [WHERE Clause]

c、Drop

删除数据库:drop database databasename

删除一个不确定存在的数据库:drop database if exists databasename;

删除表:drop table tablename

删除一个不确定存在的数据库:drop table if exists tablename;

简而言之,DDL语句是对表结构的修改,DML语句是对表数据的修改

(注:tablename是对应的数据库表名 databasename是对应的数据库名 columnname 是列名 type 类型)

2.常见问题

 1)delete,drop ,truncate都代表删除,有什么区别?
 2)alter跟其他的有什么区别
 3)drop、delete、alter该如何使用

3.解决方案

 1)delete,drop ,truncate都代表删除,有什么区别?

相同点:

delete,drop ,truncate都代表删除

不同点:

a、truncate和 delete只删除数据不删除表的结构(定义) 

b、drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态. 

c、delete语句是DML,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发. 

d、 truncate,drop是DDL, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发   trigger. 

e、delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动。显然drop语句将表所占用的空间全部释放 。

truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;   truncate会将高水线复位(回到最开始).  drop storage;

f、删除速度,一般来说: drop> truncate > delete 

 2)alter跟其他的有什么区别

alter是针对表字段、表名操作,新增、修改。

delete是针对表数据,进行删除,drop是删掉表

 3)drop、delete、alter该如何使用

a、.想删除表,用drop 
b、想保留表而将所有数据删除. 如果和事务无关,用truncate即可。

c、如果和事务有关,或者想触发trigger,还是用delete.

针对要讨论的这三种语法,只有delete才可以进行恢复,alter可以直接修改成需要的名称、类型、或者表名,不存在所说的数据恢复。

MySQL常用语法命令:

1.插入:向指定的列插入值,不插入的字段,默认是空值null

语法:insert into 表名(字段, 字段, ...)  values(, , ...);

注意:值的类型和顺序要和字段保持一致,如果字段为非空,必须插入值

--向学生信息表中插入记录005 李清

use student;     --选择数据库

desc studentinfo   --查看表的结构

select * from studentinfo;

insert into studentinfo(学号, 姓名) values('005', '李清');

2.删除:删除表中的记录(行)

语法:delete from 表名 where 条件

注意:如果不写where子句,会删除所有行

--删除nameTony的记录

delete from test1 where name='Tony';

--删除test1表中的所有记录

delete from test1;

3. 删除表

--语法:drop  table 表名

select * from test1;

drop table test1;

4. 删除数据库

--语法:drop database 数据库名

drop database testing;

5. 修改表中的数据  update语句

语法:update 表名  set 字段=新的值, 字段=新的值, ...  where 记录的匹配条件

说明:如果不写where子句默认是修改所有的行

--查询id3的员工信息

select * from worker where id=3;

--练习:给赵七加薪

update worker set salary=salary+300 where name='赵七';

select * from worker;

--可以同时修改多个字段,给id为的员工加薪元,同时修改电话号码88889999

update worker set salary=salary+300, phone='88889999' where id=3;

6. --查询出不住在'北京海淀'顾客的姓名和住址

select cname 姓名, address 住址 from Customer where address <> '北京海淀';

7. --查询出库存量在1035之间的图书信息

select * from Book where numstore between 10 and 35;

8--查询出bid'A0001''A0002'的图书信息

select * from Book where bid='A0001' or bid='A0002';

--等价于

select * from Book where bid in ('A0001', 'A0002');

9.模糊查询语法:字段名like '匹配字符串'

匹配字符串:

     %   0个或多个字符(任意个字符)

     _    任意一个字符

     []    在范围内的一个字符

     [^]  不在范围内的一个字符

--查询出图书名称以'邓小平'开头的图书信息

select * from Book where bname like '邓小平%';

--查询出书名包含有'小平'的图书信息

select * from Book where bname like '%小平%';

10、使用select可以复制表

语法:select * into 新表名 from  源表名;

--使用Book复制一张新表book1

select * into book1 from Book;

--复制时可以指定条件,需要指定行、列

select bid, bname, pub, author1 into book2 from Book where pub='人民出版社';

--创建新表book3 只复制Book表结构,不拷贝数据

select * from Book where 1<>1;   --永假式

select * into book3 from Book where 1<>1;

11. 数据完整性:数据的准确性、一致性

分为:实体完整性、域完整性、引用完整性

实现方法:约束constraint,约束也是数据库中的一种对象

约束的分类:

1. 主键约束 PK       primary key

2. 外键约束 FK     foreign key

3. 唯一约束 UK     unique

4. 非空约束 NN     not null

5. 检查约束 CK     check

6. 默认值约束   default

注:在某些项目中,有时即便两张表有关系,但不加外键约束 目的是:提高系统性能

数据库维护约束会增加系统开销,可以通过其它层面的技术来弥补。

12. --使用DDL  alter 语句 改变表结构

alter table emp2

--emp2表的id字段追加PK约束

add  constraint  emp2_id_pk  primary key(id);

13--如何删除约束(所有约束方式一样)

drop  constraint emp2_id_pk;

14--myemp表的name字段建立聚集索引

--索引的名称:myemp_name_index1

--语法: create clustered index 索引名称 on 表名(字段名)

create clustered index myemp_name_index1 on myemp(name);

15. --建立非聚集索引没有clustered

--针对myemp表中name字段建立非聚集索引

--语法: create index 索引名称 on 表名(字段名)

create index myemp_name_index1 on myemp(name);

 16. --删除索引

--语法:drop index 表名.索引名

drop index myemp.PK__myemp__3213E83F35BCFE0A;

--无法删除PK默认的索引

注意:建立索引增加系统开销

1. 占用表空间。

2. 增加、删除、修改数据效率降低。(因为重新调整索引的结构,具有时间开销)

总结:index适用于大海捞针,很少修改数据的情况,最终提高查询效率。

17. -- 去重(排重)、排序

select distinct pub from Book;

18.--查询myemp表的所有信息

--要求先按照姓名从小到大排序,如果姓名相同,再按照薪水从大到小

select * from myemp order by name asc, salary desc;

--查询员工信息,根据name降序排序

select * from myemp order by name desc;

--查询所有员工信息,根据name升序排序(从小到大)

select * from myemp order by name asc;

 

19. select语法:

select  字段名, *, 表达式, 函数调用, ...

from   , , ...

where  分组前的过滤条件  

group by  分组字段

having   分组后的过滤条件  

order by  字段名排序规则, ...

--查询出每个部门的总薪水和平均薪水,以及出每个部门的员工人数

select dept_id, SUM(salary), AVG(salary), COUNT(id) from emp group by dept_id;

--统计出每个部门薪水大于6000.0的员工的人数

select dept_id, COUNT(id) as 部门人数from  emp where salary > 6000.0 group by dept_id;

20. 函数三要素:函数名、参数表、返回值类型

1、单行函数  每条记录只会返回一个结果

    lower('ABC')  -> 'abc'  大写变小写

    upper('abc')  ->  'ABC' 小写变大写

nvl( , )

 

--查询出42部门的员工名字(原样,全小写,全大写)

select first_name,lower(first_name),upper(first_name) from s_emp where dept_id=42;

 

2、多行函数  多条记录返回一个结果,也称为:组函数、聚集函数

     sum()   求总和

     avg()    求平均数

     count()  统计记录的条数

     max()   求最大值

     min()    求最小值

1、单行函数:根据不同的数据类型进行分类

1)字符处理函数   char  varchar2  varchar

2)数值处理函数   number

3)日期处理函数   date

 

1)字符处理函数   char  varchar2  varchar

     Oracle函数               Java方法

 --------------       -----------------

 length() 字符串长度         length()

 lower()  大写变小写         toLowerCase()

 upper()  小写变大写         toUpperCase()

 substr()  求子串             substring()

2)数值处理函数  

 round  四舍五入

 trunc   截取

3)日期处理函数 

NLS 区域语言支持  National Language Supportnls_date_format

用来定义用户的所在区域的日期格式

alter session set nls_date_format = 'DD-MON-RR';

--查出员工的名字以及入职日期  s_emp   first_name   start_date

select first_name, start_date from s_emp;

alter session set nls_date_format = 'DD-MON-RR';

21. 表连接:

1、内连接   会严格匹配数据    inner join

1)等值连接

2)非等值连接

3)自连接

2、外连接   一个都不能少       outer join

1)左外连接

2)右外连接

3)全外连接

你可能感兴趣的:(MySQL基础知识)