shell>mysql -u 用户名 -pEnter 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 affectedQuery OK, 0 rows affectedQuery OK, 0 rows affected为了避免中文乱码需以下两步:a.创建数据库时设置编码格式utf-8
mysql> CREATE DATAbase test1CHARACTER 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值,……)
范例:插入值
*表1mysql> 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');*表2mysql>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','生物');*表3mysql>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);单表查询
范例:查询每个表的内容
*表1mysql> 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*表2mysql> select * from course;结果:+-----+----------+| cno | cname |+-----+----------+| 1 | 语文 || 2 | 大学英语 || 3 | 数学 || 4 | 物理 || 5 | 生物 |+-----+----------+5 rows in set*表3mysql> 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 set4:分组查询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 set5:限定分组后的字段显示条件查询
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范例:查询2007级的各学生的平均成绩,没有成绩的为0; a)先作笛卡尔积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 b)再添加条件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 c)有重复,所以要进行分组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 set2:外连接 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 affectedRows 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 affectedRows matched: 2 Changed: 2 Warnings: 0deleted多表删除
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 affectedRecords: 0 Duplicates: 0 Warnings: 02.增加外键
格式:alter table 表名 add constraint 外键名 foreign key(字段) references 关联表的名称(关联表的主键)
范例:设置score表的外键
mysql> alter table score add constraint fk_sno foreign key(sno) references student(sno);