1.基本操作语句
1.1启动/关闭mysql服务器
启动:net start mysql
退出:exit
1.2连接服务器
mysql -uroot -p
2.管理数据库
查看当前服务器上管理的所有数据库:mysql>show databases;
新建数据库:mysql>create database 库名;
选择数据库:mysql>use 库名;
查看当前选择的数据库:mysql> select database();
删除数据库:mysql> drop database 库名;
3、使用帮助
mysql> ? contents; 列出菜单
4、管理表结构(DDL)
4.1创建表
mysql>? Create
create table 表名(
属性1 约束条件,
属性2 约束条件,
.......,
);
例:mysql>create table Stu(
->id int PRIMARY KEY not null AUTO_INCREMENT,
->name varchar(30) not null,
->sex char(2) default 'M',
->age int(4) default 20
->);
其中:PRIMARY KEY :主键;
not null/null :非空/空;
AUTO_INCREMENT :自动加载;
default :如果没有填写自动补写默认信息。
查看表结构:mysql>desc 表名
查看当前数据库下的所有表:mysql>show tables;
删除表:mysql>drop table 表名;
设置联合主键:mysql>PRIMARY KEY(aa,bb)
为已经添加好的数据表添加外键:
语法:alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名);
例: alter table tb_active add constraint FK_ID foreign key(user_id) REFERENCES tb_user(id)
如果发现主键设置错了,应该是id是主键,但如今表里已经有好多数据了,不能删除表再重建了,仅仅能在这基础上改动表结构。
先删除主键:alter table table_test drop primary key;
然后再增加主键:alter table table_test add primary key(id);
注:在增加主键之前,必须先把反复的id删除掉。
insert into stu1(name,birth,money) values('王五','1982-01-01',129.45);
mysql> create table stu2 like stu1;
ysql> create table stu3 select id,name,age from stu1;
4.2 修改表结构
mysql> alter table stu ADD email varchar(45) not null [after name|first];
//默认最后一个 放第一就用first
mysql> alter table stu MODIFY name varchar(45) not null[after name|first];
mysql> alter table stu CHANGE name sname varchar(45)[after name|first];
mysql> alter table stu DROP age;
mysql> alter table stu RENAMETO stu0;
mysql> alter table stu0 auto_increment=4; //下一个为5
4.3创建表间关系(部门和员工表)
create table dep(
id int not null auto_increment,
dname varchar(45) not null,
primary key(id)
);
create table emp(
id int not null auto_increment primary key, //设置为主键
dep_id int null ,
name varchar(25),
sex enum('M','F') default 'M',
age int(2) default 18,
FOREIGN KEY(dep_id) REFERENCES dep(id) //设置为外键
);
insert into dep(dname) values('生产'),('销售'),('行政'),('技术'); //一次性插入四行
insert into emp(dep_id,name,sex,age) values(2,'李四','F',23);
insert into emp(dep_id,name,sex,age) values(3,'小明','M',25);
insert into emp(dep_id,name,sex,age) values(2,'张明','M',26);
insert into emp(dep_id,name,sex,age) values(1,'王五','F',23);
insert into emp(dep_id,name,sex,age) values(3,'张华','F',27);
5.DML
mysql> show create table 表名 \G --查看表创建的语法
5.1在表中插入数据
mysql> insert into stu0(sname,email,sex) values('lisi','[email protected]','M');
mysql> insert into stu0 values(null,'wangwu','[email protected]','F');
mysql> insert into stu0 set sname='zhangsan',email="[email protected]";
mysql> insert into stu0(sname,email,sex) select name,birth,sex from stu1;
5.2修改数据
mysql> update stu0 SET email='[email protected]';
mysql> update stu0 SET email='[email protected]' where id=4;
mysql> update stu0 SET email='[email protected]',sname='angel' ,sex='F' where id=5;
5.3删除数据
mysql> delete from stu0 where id>3;
6、QUERY
Select * from 表名;
mysql> select DISTINCT sname,email,sex from stu0 ;//distinct 去掉重复的值
投影(projector):部分列组成的新的集合
mysql> select name,sex,age from emp;
mysql> select name as emp_name,sex,age from emp;
选择(selector):部分行组成新的集合
mysql> select * from stu0 where id<10;
6.1Where语句
mysql> select * from stu0 where id<10;
mysql> select * from stu0 where id>10:
mysql> select * from stu0 where id>=10;
mysql> select * from stu0 where id<=10;
mysql> select * from stu0 where id!=10;
mysql> select * from emp where id!=3;
mysql> select * from emp where id<>3;
mysql> select * from emp where name='小明';
mysql> select * from emp where sex='F' AND age >24;
mysql> select * from emp where sex='F' OR age >24;
mysql> select * from emp where NOT age >24;
mysql> select * from emp where dep_id IS NULL;
mysql> select * from emp where dep_id IS NOT NULL;
mysql> select * from emp where dep_id in(1,2);
6.2分组
分组时,select ...from之间只能出现分组的那个字段或统计函数
mysql> select sex,count(*) from emp group by sex;
mysql> select name,sex,avg(age) from emp group by sex;
mysql> select name,sex,sum(age) from emp group by sex;
mysql> select name,sex,sum(age) as totalage from emp group by sex;
对分组的条件过滤用HAVING而不是where
mysql> select dep_id,count(dep_id) from emp group by dep_id HAVING count(dep_id)>1;
对统计以后的结果再统计
mysql> select dep_id,count(dep_id) from emp group by dep_id WITH ROLLUP ;
6.3排序
mysql> select * from emp order by age;
mysql> select * from emp order by age desc;
mysql> select * from emp order by sex asc,age desc;
6.4分页查询
mysql> select * from emp limit 3;//返回从第一条到第三条的数据
mysql> select * from emp limit 3,5;//从结果的第三条开始,向后显示5条
6.5多表查询
mysql> 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;
6.6 链接查询*************
内连:两边匹配的数据显示
mysql> 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来填充
mysql> 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;
右外连:和左相反
mysql> 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;
6.7 子查询
mysql> select (select dname from dep d where d.id=e.dep_id) as dname,count(e.dep_id) as total from emp e group by e.dep_id having total>0 ;
mysql> select e.id,e.name,e.age from emp e where e.dep_id in(select id from dep where id in(2,3));
7.备份还原
7.1备份
Step1:退出mysql提示符 \q 回车
Step2:c:>msyqldump -uroot -p 数据库名 > ./sss.sql
7.2还原
Step1:创建一个新的数据库
Msyql>create database xupt;
Step2还原
C:\>mysql -uroot -p xupt<./xupt.sql