DDL和DML的区别
- DML
DML(data manipulation language)数据操纵语言:
就是我们最经常用到的 SELECT、UPDATE、INSERT、DELETE。 主要用来对数据库的数据进行一些操作 - DDL
DDL(data definition language)数据库定义语言:
其实就是我们在创建表的时候用到的一些sql,比如说:CREATE、ALTER、DROP等。DDL主要是用在定义或改变表的结构,数据类型,表之间的链接和约束等初始化工作上
连接方式(命令行输入)
- 本地连接:mysql -uroot -p(回车后,输入命令)
- 远程连接:mysql -h(IP地址) -uroot -p(密码) -P(端口)
对数据库进行操作的命令
(每个命令输入完必须添加 “;”,回车后才能执行)
- 查看数据库-------------------------show databases
- 创建数据库-------------------------create database 数据库名
- 选择对指定的数据库进行操作----use 数据库名
- 查看当前数据库--------------------select database()
- 设置数据库的字符集---------------alter database 数据库名 character set 字符集
- 删除数据库--------------------------drop database 数据库名
对表中的列进行相关操作
-
创建表
- 第一种方法
create table stu(
id int primary key not null auto_increment,
name varchar(25) not null,
sex enum(‘M’,‘F’) default ‘M’,
age int(2) default 19,
); - 第二种方法
create table stu2 like stu;(stu2和stu具有一样的表结构,但stu2没有stu的数据) - 第三种方法
createtable stu3 select id,name,age,from stu1;(stu3和stu具有相同的数据,但某些列的属性会出丢失,如主键、外键、自增长等)
- 第一种方法
-
查看标的结构----------------------desc 表名
-
查看当前数据库中有多少表------show tables
-
对表的属性(列)进行修改
- 增加列-------------------------alter table 表名 add 列名 列的相关信息 [after 列名/first](方括号的内容可写可不写,用于确定增加列的位置)
- 修改列的属性-----------------alter table 表名 modify 列名 修改后的列信息 [after 列名/first]
- 改变列的名字-----------------alter table 表名 change 旧列名 新列名 [after 列名/first]
- 删除列:-----------------------alter table 表名 列名
- 修改表的名字------------------alter table 表名 rename to 新的表名
对表中的记录进行操作
-
插入数据
insert into stu0(sname,email,sex) values(‘lisi’,‘lisi@163.com’,‘M’);
insert into stu0 values(null,‘wangwu’,‘sss@qq.com’,‘F’);(对表中所有数据进行操作)
insert into stu0 set sname=‘zhangsan’,email=“sss@qq.com”;
insert into stu0(sname,email,sex) select name,birth,sex from stu1;(从其他表导入数据) -
修改数据
update stu0 SET email=‘aaa@qq.com’;(对这一列所有记录进行修改)
update stu0 SET email=‘bb@qq.com’ where id=4;(对指定记录进行修改) -
删除数据
delete from stu0 where id>3; -
投影:部分列组成的新的集合
select name,sex,age from emp;
select name as emp_name,sex,age from emp;(将输出的列名name改为emp_name) -
选择:部分行组成新的集合
select * from stu0 where id<10;
select * from emp where dep_id in(1,2);//id取值空间在1~2 -
分组
分组时,select …from 之间只能出现分组的那个字段或统计函数
select sex,count(*) from emp group by sex;(以sex分组,统计每组的个数)
select name,sex,avg(age) from emp group by sex;(以sex分组,统计每组记录的年龄平均值)
select name,sex,sum(age) from emp group by sex;(以sex分组,统计每组记录的年龄和)
select name,sex,sum(age) as totalage from emp group by sex;(以sex分组,统计每组记录的年龄平均值,列名改为totalage)
对分组的条件过滤用having而不是where
select dep_id,count(dep_id) from emp group by dep_id HAVING count(dep_id)>1;
对统计以后的结果在统计
select dep_id,count(dep_id) from emp group by dep_id WITH ROLLUP ; -
排序
select * from emp order by age;
select * from emp order by age desc;(年龄降序)
select * from emp order by sex asc,age desc;(以性别排序为首,性别相等时,以年龄降序排序) -
分页查询
select * from emp limit 3;//返回从第一条到第三条的数据
select * from emp limit 3,5;//从结果的第三条开始,向后显示5条 -
多表查询
select e.id,d.dname as dep_name,e.name,e.sex,e.age from emp e,dep d where e.dep_id=d.id;
- 连接查询
* 内连:两边匹配的数据显示
select e.id,d.dname as dep_name,e.name,e.sex,e.age from emp e INNER JOIN dep d ON
e.dep_id=d.id;
* 左外连:左边表都显示,右边没有对应的用 NULL 来填充
select e.id,d.dname as dep_name,e.name,e.sex,e.age from emp e LEFT JOIN dep d ON e.dep_id=d.id;(emp表中的内容全显示。若dep没有,则用null填)
* 右外连:和左相反
select e.id,d.dname as dep_name,e.name,e.sex,e.age from emp e RIGHT JOIN dep d ON
e.dep_id=d.id;
备份与还原
-
备份
Step1:退出 mysql 提示符 \q 回车
Step2:输入msyqldump -uroot -p 数据库名 > sql文件的路径(如:./sss.sql) -
还原
Step1:创建一个新的数据库------------------------Msyql>create database 数据库名;
Step2 还原-------------------------------------------退出 mysql 提示符 \q 回车后,输入mysql -uroot -p xupt<./xupt.sql