您的位置:首页 > 数据库 > MySQL

mysql操作

2015-08-29 00:23 525 查看
连接服务器:
shell>mysql -u 用户名 -p
Enter password:
或者
shell>mysql -u 用户名 -p 密码


断开连接
mysql> QUIT


多行语句以分号“;”表结束,一条长的语句可以写在不同的行,只要在最后加分号即可。若不想执行输入的 语句则可以使用‘\c’

不区分大小写
查看当前已存在的数据库
mysql> show databases ;


创建新数据库
mysql> create database abc;
Query OK, 1 row affected (0.00 sec)


注:abc为自己创建的数据库名
创建表:
格式:
mysql>
create table 表名(
字段1 数据类型 ,
字段2 数据类型 ,
......
字段n 数据类型 ,
);


注:创建表之前,需要先选择数据库,如

mysql> use test1;
结果:Database changed      否则显示:1046 - No database selected


下面的范例都是使用如下表:

表1:

学生表student

Sno学号,sname姓名,difdate出生日期, grade年级

表2:

课程表 course

cno课程号,名字cname

表3:

成绩单score

sno学号 cno课程号 score成绩

mysql>
create table student(
sno varchar(20) not null default '',
sname varchar(30),
difdate date,
grade varchar(10)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

create table course(
cno varchar(20) not null default '',
cname varchar(20)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

create table score(
sno varchar(20) not null default '',
cno varchar(20) ,
score double
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
结果:
Query OK, 0 rows affected

Query OK, 0 rows affected

Query OK, 0 rows affected

为了避免中文乱码需以下两步:a.创建数据库时设置编码格式utf-8
mysql> CREATE DATABASE  test1
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
b.然后创建表时设置编码格式
create table student(
sno varchar(20) not null default,
sname varchar(30),
difdate date,
grade varchar(10)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

向表中添加一个或多个记录

注:mysql中的插入日期格式为‘YYYY-MM-DD’,而oracle中 格式为‘DD-M月-YYYY’;字符、汉字、日期需要用单引号;
格式:
1.插入部分字段
mysql>insert into 表名 (字段1,字段2……字段n)
values(字段1值,字段2值,……)
2.插入全部的字段,可以省略字段名,如:
mysql>insert into 表名
values(字段1值,字段2值,……)


范例:插入值

*表1
mysql> insert into student values('1','李丽','1993-02-03','2007');
insert into student values('2','王明','1993-04-02','2008');
insert into student values('3','李云','1994-03-12','2009');
insert into student values('4','李四','1992-02-13','2007');
insert into student values('5','王五','1992-04-13','2010');
insert into student values('6','赵六','1992-03-28','2009');
insert into student values('7','张三','1992-08-03','2008');

*表2
mysql>insert into course(cno,cname) values('1','语文');
insert into course(cno,cname) values('2','大学英语');
insert into course(cno,cname) values('3','数学');
insert into course(cno,cname) values('4','物理');
insert into course(cno,cname) values('5','生物');

*表3
mysql>insert into score (sno,cno,score) values('1','1',69);
insert into score (sno,cno,score) values('1','2',40);
insert into score (sno,cno,score) values('1','3',67);
insert into score (sno,cno,score) values('1','4',79);
insert into score (sno,cno,score) values('1','5',89);
insert into score (sno,cno,score) values('2','1',97);
insert into score (sno,cno,score) values('2','2',69);
insert into score (sno,cno,score) values('2','3',39);
insert into score (sno,cno,score) values('2','4',90);
insert into score (sno,cno,score) values('2','5',99);
insert into score (sno,cno,score) values('3','1',99);
insert into score (sno,cno,score) values('3','2',69);
insert into score (sno,cno,score) values('3','3',39);
insert into score (sno,cno,score) values('3','4',69);
insert into score (sno,cno,score) values('3','5',99);
insert into score (sno,cno,score) values('4','1',99);
insert into score (sno,cno,score) values('4','2',69);
insert into score (sno,cno,score) values('4','3',39);
insert into score (sno,cno,score) values('4','4',69);
insert into score (sno,cno,score) values('4','5',99);
insert into score (sno,cno,score) values('5','1',79);
insert into score (sno,cno,score) values('5','2',70);
insert into score (sno,cno,score) values('5','3',39);
insert into score (sno,cno,score) values('5','4',69);
insert into score (sno,cno,score) values('5','5',99);
insert into score (sno,cno,score) values('6','1',99);
insert into score (sno,cno,score) values('6','2',69);
insert into score (sno,cno,score) values('6','3',39);
insert into score (sno,cno,score) values('6','4',69);
insert into score (sno,cno,score) values('6','5',80);
insert into score (sno,cno,score) values('7','1',39);
insert into score (sno,cno,score) values('7','2',69);
insert into score (sno,cno,score) values('7','3',89);
insert into score (sno,cno,score) values('7','4',64);
insert into score (sno,cno,score) values('7','5',59);

单表查询

范例:查询每个表的内容

*表1
mysql> select * from student ;
结果:
+-----+-------+------------+-------+
| sno | sname | difdate    | grade |
+-----+-------+------------+-------+
| 1   | 李丽  | 1993-02-03 | 2007  |
| 2   | 王明  | 1993-04-02 | 2008  |
| 3   | 李云  | 1994-03-12 | 2009  |
| 4   | 李四  | 1992-02-13 | 2007  |
| 5   | 王五  | 1992-04-13 | 2010  |
| 6   | 赵六  | 1992-03-28 | 2009  |
| 7   | 张三  | 1992-08-03 | 2008  |
+-----+-------+------------+-------+
7 rows in set
*表2
mysql> select * from course;
结果:
+-----+----------+
| cno | cname    |
+-----+----------+
| 1   | 语文     |
| 2   | 大学英语 |
| 3   | 数学     |
| 4   | 物理     |
| 5   | 生物     |
+-----+----------+
5 rows in set

*表3
mysql> select * from score ;
+-----+-----+-------+
| sno | cno | score |
+-----+-----+-------+
| 1   | 1   |    69 |
| 1   | 2   |    40 |
| 1   | 3   |    67 |
| 1   | 4   |    79 |
| 1   | 5   |    89 |
| 2   | 1   |    97 |
| 2   | 2   |    69 |
| 2   | 3   |    39 |
| 2   | 4   |    90 |
| 2   | 5   |    99 |
| 3   | 1   |    99 |
| 3   | 2   |    69 |
| 3   | 3   |    39 |
| 3   | 4   |    69 |
| 3   | 5   |    99 |
| 4   | 1   |    99 |
| 4   | 2   |    69 |
| 4   | 3   |    39 |
| 4   | 4   |    69 |
| 4   | 5   |    99 |
| 5   | 1   |    79 |
| 5   | 2   |    70 |
| 5   | 3   |    39 |
| 5   | 4   |    69 |
| 5   | 5   |    99 |
| 6   | 1   |    99 |
| 6   | 2   |    69 |
| 6   | 3   |    39 |
| 6   | 4   |    69 |
| 6   | 5   |    80 |
| 7   | 1   |    39 |
| 7   | 2   |    69 |
| 7   | 3   |    89 |
| 7   | 4   |    64 |
| 7   | 5   |    59 |
+-----+-----+-------+
35 rows in set
格式:
1:个别字段查询
select 字段1,字段2 ...... from 表名

2:显示表中的全部内容
select * from 表名

3:限定条件查询
select 字段1,字段2 ......
from 表名
where 条件
范例:查询2007级姓李的学生信息
mysql> select  * from student where sname like '李%' and grade=2007;
结果:
+-----+-------+------------+-------+
| sno | sname | difdate    | grade |
+-----+-------+------------+-------+
| 1   | 李丽  | 0000-00-00 | 2007  |
| 4   | 李四  | 0000-00-00 | 2007  |
+-----+-------+------------+-------+
2 rows in set

4:分组查询
select 字段1,字段2 ......
from 表名
[where 条件]
group by 字段
此语句表示按照这个指定的字段进行分组,一般和sql的合计函数一起使用,如sum(),count(),avg(),min(),max(),Var 和 VarP 函数等
范例:统计每个年级的人数
mysql> select  grade,count(sno) from student group by grade;
结果:
+-------+------------+
| grade | count(sno) |
+-------+------------+
| 2007  |          2 |
| 2008  |          2 |
| 2009  |          2 |
| 2010  |          1 |
+-------+------------+
4 rows in set
5:限定分组后的字段显示条件查询

select字段1,字段2 ......

from 表名

[where 条件]

group by 分组字段

[having 条件]

注意:HAVING 是可选的。HAVING 与 WHERE 类似,可用来决定选择哪个记录。在使用 GROUP BY对这些记录分组后,HAVING 会决定应显示的记录

6:按指定顺序查询asc,desc

select字段1,字段2 ......
from 表名
[where 条件]
[group by 分组字段
having  条件]
order by 字段a  [asc|desc],字段b [asc|desc],......
表示按照字段a升序排序或降序排序;若字段a相同,则按照字段b升序排序或降序排序;若字段b相同,则按照字段 ....升序排序或降序排序;......




多表查询
1:内链接 inner join
范例:查询级的各学生的平均成绩,没有成绩的为先作笛卡尔积
mysql> select * from student s,score sc where s.sno=sc.sno;
+-----+-------+------------+-------+-----+-----+-------+
| sno | sname | difdate    | grade | sno | cno | score |
+-----+-------+------------+-------+-----+-----+-------+
| 1   | 李丽  | 1993-02-03 | 2007  | 1   | 1   |    69 |
| 1   | 李丽  | 1993-02-03 | 2007  | 1   | 2   |    40 |
| 1   | 李丽  | 1993-02-03 | 2007  | 1   | 3   |    67 |
| 1   | 李丽  | 1993-02-03 | 2007  | 1   | 4   |    79 |
| 1   | 李丽  | 1993-02-03 | 2007  | 1   | 5   |    89 |
| 2   | 王明  | 1993-04-02 | 2008  | 2   | 1   |    97 |
| 2   | 王明  | 1993-04-02 | 2008  | 2   | 2   |    69 |
| 2   | 王明  | 1993-04-02 | 2008  | 2   | 3   |    39 |
| 2   | 王明  | 1993-04-02 | 2008  | 2   | 4   |    90 |
| 2   | 王明  | 1993-04-02 | 2008  | 2   | 5   |    99 |
| 3   | 李云  | 1994-03-12 | 2009  | 3   | 1   |    99 |
| 3   | 李云  | 1994-03-12 | 2009  | 3   | 2   |    69 |
| 3   | 李云  | 1994-03-12 | 2009  | 3   | 3   |    39 |
| 3   | 李云  | 1994-03-12 | 2009  | 3   | 4   |    69 |
| 3   | 李云  | 1994-03-12 | 2009  | 3   | 5   |    99 |
| 4   | 李四  | 1992-02-13 | 2007  | 4   | 1   |    99 |
| 4   | 李四  | 1992-02-13 | 2007  | 4   | 2   |    69 |
| 4   | 李四  | 1992-02-13 | 2007  | 4   | 3   |    39 |
| 4   | 李四  | 1992-02-13 | 2007  | 4   | 4   |    69 |
| 4   | 李四  | 1992-02-13 | 2007  | 4   | 5   |    99 |
| 5   | 王五  | 1992-04-13 | 2010  | 5   | 1   |    79 |
| 5   | 王五  | 1992-04-13 | 2010  | 5   | 2   |    70 |
| 5   | 王五  | 1992-04-13 | 2010  | 5   | 3   |    39 |
| 5   | 王五  | 1992-04-13 | 2010  | 5   | 4   |    69 |
| 5   | 王五  | 1992-04-13 | 2010  | 5   | 5   |    99 |
| 6   | 赵六  | 1992-03-28 | 2009  | 6   | 1   |    99 |
| 6   | 赵六  | 1992-03-28 | 2009  | 6   | 2   |    69 |
| 6   | 赵六  | 1992-03-28 | 2009  | 6   | 3   |    39 |
| 6   | 赵六  | 1992-03-28 | 2009  | 6   | 4   |    69 |
| 6   | 赵六  | 1992-03-28 | 2009  | 6   | 5   |    80 |
| 7   | 张三  | 1992-08-03 | 2008  | 7   | 1   |    39 |
| 7   | 张三  | 1992-08-03 | 2008  | 7   | 2   |    69 |
| 7   | 张三  | 1992-08-03 | 2008  | 7   | 3   |    89 |
| 7   | 张三  | 1992-08-03 | 2008  | 7   | 4   |    64 |
| 7   | 张三  | 1992-08-03 | 2008  | 7   | 5   |    59 |
+-----+-------+------------+-------+-----+-----+-------+
35 rows in set
再添加条件
mysql>select * from student s,score sc where s.sno=sc.sno and s.grade='2007' ;
结果:
+-----+-------+------------+-------+-----+-----+-------+
| sno | sname | difdate    | grade | sno | cno | score |
+-----+-------+------------+-------+-----+-----+-------+
| 1   | 李丽  | 1993-02-03 | 2007  | 1   | 1   |    69 |
| 1   | 李丽  | 1993-02-03 | 2007  | 1   | 2   |    40 |
| 1   | 李丽  | 1993-02-03 | 2007  | 1   | 3   |    67 |
| 1   | 李丽  | 1993-02-03 | 2007  | 1   | 4   |    79 |
| 1   | 李丽  | 1993-02-03 | 2007  | 1   | 5   |    89 |
| 4   | 李四  | 1992-02-13 | 2007  | 4   | 1   |    99 |
| 4   | 李四  | 1992-02-13 | 2007  | 4   | 2   |    69 |
| 4   | 李四  | 1992-02-13 | 2007  | 4   | 3   |    39 |
| 4   | 李四  | 1992-02-13 | 2007  | 4   | 4   |    69 |
| 4   | 李四  | 1992-02-13 | 2007  | 4   | 5   |    99 |
+-----+-------+------------+-------+-----+-----+-------+
10 rows in set
有重复,所以要进行分组
mysql> select s.sno ,s.sname , avg(sc.score)
from student s,score sc
where s.sno=sc.sno and s.grade='2007'
group by s.sno,s.sname;
结果:
+-----+-------+---------------+
| sno | sname | avg(sc.score) |
+-----+-------+---------------+
| 1   | 李丽  |          68.8 |
| 4   | 李四  |            75 |
+-----+-------+---------------+
2 rows in set

2:外连接 outer join
a)左连接 left join
b)右连接 right join
c)

3:交叉连接


mysql日期和字符相互转换方法
date_format(date,'%Y-%m-%d') 对应于oracle中的to_char(,'yyyy-mm--dd');
str_to_date(date,'%Y-%m-%d') 相当于oracle中的to_date(,);

单表更新

范例:将数学替换成高等数学

mysql> update course set cname='高等数学' where cname='数学';
Query OK, 1 row affected
Rows matched: 1  Changed: 1  Warnings: 0
查看结果:

mysql> select * from course;
+-----+----------+
| cno | cname    |
+-----+----------+
| 1   | 语文     |
| 2   | 大学英语 |
| 3   | 高等数学 |
| 4   | 物理     |
| 5   | 生物     |
+-----+----------+
5 rows in set


update更新 多表

1.使用inner join .....on更新

范例:给2007级学生的数学成绩加5分

mysql> update score sc inner join course c inner join student s on s.sno=sc.sno and c.cno=sc.cno set score=5+sc.score
where  s.grade='2007'and c.cname='数学';
Query OK, 2 rows affected
Rows matched: 2  Changed: 2  Warnings: 0

deleted多表删除

1.使用inner join .....on删除

范例:删除姓名是张三的大学语文成绩

mysql> delete sc.* from score sc inner join student s inner join course c on s.sno=sc.sno and sc.cno=c.cno where s.sname='张三' and c.cname='语文';
Query OK, 1 row affected


修改表结构alter

1.增加主键

格式:alter table 表名 add constraint 主键名 primary key(字段);

范例:设置student表的主键sno

mysql> alter table student  add constraint pk_sno primary key(sno);
Query OK, 0 rows affected
Records: 0  Duplicates: 0  Warnings: 0
2.增加外键

格式:alter table 表名 add constraint 外键名 foreign key(字段) references 关联表的名称(关联表的主键)

范例:设置score表的外键

mysql> alter table score add constraint fk_sno foreign key(sno) references student(sno);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: