定义:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。
MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS
(Relational Database Management System,关系数据库管理系统) 应用软件。
————————————————————————————————————————————————————
①数据库
————————————————————————————————————————————————————
————————————————————————————————————————————————
1、增
————————————————————————————————————————————————
Create database mydb1;
Create database mydb1 character set gbk;
————————————————————————————————————————————————
2、删
————————————————————————————————————————————————
Drop database mydb3;
————————————————————————————————————————————————
3、查
————————————————————————————————————————————————
Show databases;
————————————————————————————————————————————————
4、改
————————————————————————————————————————————————
alter database mydb2 character set utf8;
————————————————————————————————————————————————
5、用
————————————————————————————————————————————————
Use mydb2;
————————————————————————————————————————————————————
②表
————————————————————————————————————————————————————
数据结构:
char(10) : 固定长度字符串类型; char(10)
varchar(100): 可变长度字符串类型; varchar(10)
text:字符串类型;
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
————————————————————————————————————————————————
1、增
————————————————————————————————————————————————
create table user(
id int,
name varchar(100)
);
————————————————————————————————————————————————
2、删
————————————————————————————————————————————————
DROP TABLE user ;
————————————————————————————————————————————————
3、查
————————————————————————————————————————————————
DESC user; //字段信息
show tables; //查看所有表
————————————————————————————————————————————————
4、改
————————————————————————————————————————————————
ALTER TABLE user ADD sex varchar(100);
ALTER TABLE user DROP sex;
————————————————————————————————————————————————
————————————————————————————————————————————————————
③DML
————————————————————————————————————————————————————
INSERT INTO emp(id,name) VALUES(1,'zhangsan');
UPDATE emp SET salary=5000,name='李昊宗';
DELETE FROM emp WHERE name=‘李昊宗’;
————————————————————————————————————————————————————
④DQL
————————————————————————————————————————————————————
————————————————————————————————————————————————————
1、条件查询
————————————————————————————————————————————————
=、!=、<>、<、<=、>、>=;
BETWEEN…AND;
IN('李昊宗','范冰冰');
IS NULL;
AND;
OR;
NOT;
SELECT * FROM stu WHERE id IN ('1','2','3'); //查询学号为1或2或3
SELECT * FROM stu WHERE id NOT IN ('1','2','3');
SELECT * FROM stu WHERE age IS NOT NULL;
SELECT * FROM stu WHERE age BETWEEN 20 AND 40;
SELECT * FROM stu WHERE gender!='male';
————————————————————————————————————————————————
2、模糊查询
————————————————————————————————————————————————
_ : 任意一个字母
%:任意0~n个字母
SELECT * FROM stu WHERE name LIKE '____i'; //名字第五个字符为i的信息
SELECT * FROM stu WHERE name LIKE 'z%'; //匹配以z开头的名称
SELECT * FROM stu WHERE name LIKE '%z%'; //匹配包含z的名称
————————————————————————————————————————————————
3、字段控制查询
————————————————————————————————————————————————
DISTINCT : 去除重复行
AS : 别名
SELECT DISTINCT sal FROM emp; //去掉查询结果的重复行
SELECT *,sal+comm FROM emp; //查看月薪与佣金之和
SELECT *,IFNULL(sal,0)+IFNULL(comm,0) FROM emp; //查看月薪与佣金之和,因为有些值为null,null值加任何值都为null
SELECT *, sal+comm AS total FROM emp; //这一列命名为total
————————————————————————————————————————————————
4、排序
————————————————————————————————————————————————
ORDER BY : 任意一个字母
DESC :降序 //关键字也用于查看表的字段信息
ASC :升序
SELECT * FROM stu ORDER BY id DESC,age ASC; //按id降序,id相同,按age升序
————————————————————————————————————————————————
5、聚合函数、分组
————————————————————————————————————————————————
sum avg max min count;
GROUP BY ;
HAVING;
SELECT SUM(sal) FROM emp where id >4 GROUP BY deptno HAVING SUM(sal) > 9000; //先找出id>4的人,然后按部门分组,计算和大于90000
//having 和 where作用一样,但是having是分组之后才进行过滤
//查询语句书写顺序:select – from- where- group by- having- order by-limit
//查询语句执行顺序:from - where -group by - having - select - order by-limit
————————————————————————————————————————————————
6、limit
————————————————————————————————————————————————
LIMIT用来限定查询结果的起始行,以及总行数。
SELECT * FROM emp LIMIT 1; //查询1行
SELECT * FROM emp LIMIT 3, 10; //查询10行记录,起始行从3开始
————————————————————————————————————————————————
7、正则
————————————————————————————————————————————————
rlike : 关键字
SELECT name FROM person_tbl WHERE name rlike '^[aeiou]|ok$';
————————————————————————————————————————————————————
⑤数据完整性
————————————————————————————————————————————————————
1、约束
————————————————————————————————————————————————
primary key :主键(不重复,不为空)
auto_increment :自动增长
unique :唯一约束
not null :非空
default :默认值
CREATE TABLE student(
Id int primary key auto_increment,
Name varchar(50) unique,
Id age not null,
Sex varchar(50) default '男'
);
————————————————————————————————————————————————
2、外键
————————————————————————————————————————————————
//外键数据类型和主键数据类型必须一致
CREATE TABLE student(
Id int primary key,
Id info_id,
foreign key (info_id) references info(id) //设置age为student表的外键,与info表的id键相关联
);
————————————————————————————————————————————————————
⑥多表查询
————————————————————————————————————————————————————
1、union、union all
————————————————————————————————————————————————
SELECT id,name FROM t1 UNION SELECT id,name FROM t2;
//挑选出两张表的id,name(列名,列类型必须相同),进行合并,union会去掉重复行,union all 不会去除重复行
————————————————————————————————————————————————
2、子查询
————————————————————————————————————————————————
①子查询作为表(from之后)
————————————————————————————————————————————
select a.kongfu from (select kongfu,address from address order by address) as a where a.address like '香%';
//对查询出来的表进行再次查询
————————————————————————————————————————————
②子查询作为条件(where之后,了解)
————————————————————————————————————————————
any :任意
all :全部
SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30)
SELECT * FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename='MARTIN')
//都能用子查询作为表查询出来
SELECT * FROM emp,(SELECT max(sal) FROM emp WHERE deptno=30) as a WHERE sal > a.max(sal)
SELECT * FROM emp,(SELECT job,sal FROM emp WHERE ename='MARTIN') as a WHERE (job,sal) IN (a.job,a.sal)
————————————————————————————————————————————
————————————————————————————————————————————————
3、链接查询
————————————————————————————————————————————————
①左连接
————————————————————————————————————————————
select * from a left join b on a.id = b.id;
//以左边的表为准(a),如果a表有一条记录在b表中没有,也会查出来,只不过为空
————————————————————————————————————————————
②右连接
————————————————————————————————————————————
select * from a right join b on a.id = b.id;
//以左边的表为准(a),如果a表有一条记录在b表中没有,也会查出来,只不过为空
————————————————————————————————————————————
③内连接
————————————————————————————————————————————
Select * from A inner join B ON A.Aid=B.Bnameid<=====>select * from A,B where A.Aid=B.Bnameid
//利用内连接可获取两表的公共部分的记录
//所以说where其实等价于内连接
————————————————————————————————————————————
④全连接
————————————————————————————————————————————
select * from a full outer join b on a.id = b.id
//返回AUB
————————————————————————————————————————————
————————————————————————————————————————————————————
⑦数据库函数
————————————————————————————————————————————————————
SELECT CURRENT_DATE() `//获取当前日期 yyyy-mm-dd
SELECT CURRENT_TIME() //获取当前时间hh:mm:ss
SELECT NOW() //yyyy-mm-dd hh:mm:ss
SELECT YEAR(NOW()) // 单独获取当前年
SELECT MONTH(NOW()) // 单独获取当前月
SELECT DAY(NOW()) // 单独获取当前日
SELECT DATE(NOW()) // 获取当前时间的日期部分
SELECT ADDTIME('2007-12-30 21:50:50', '1:1:1') //时间相加
SELECT DATE_ADD('2016-6-6' ,12) //天数相加
SELECT DATEDIFF('2016-6-8','2016-6-10') //-- 前面的时间-后面的时间的差值
SELECT CONCAT('he','lo') // 合并字符串
SELECT INSTR('hello','e') // 当在原字符串中找不到子字符串时,会返回0
SELECT REPLACE('hello','h','wo') // 字符串替换
SELECT STRCMP('hello','heloo') // 比较两个字符串 前面大返回1 后面大返回-1 相等返回0
SELECT LTRIM(' hello') // 去除左边的空格
SELECT RTRIM('hello ') // 去除右边的空格
注:数据库函数很多,这里只举例了其中的日期和字符串处理的一部分函数,
还有诸如:字符串长度,字符串切割,math、转大小写,转进制等
例:SELECT *,CONCAT(ename,job) FROM emp; //拼接字符串
————————————————————————————————————————————————————
————————————————————————————————————————————————————
⑧数据库备份
————————————————————————————————————————————————————
mysqldump -u root -p 123 mydb1> D:\backup.sql //备份
mysql -u root -p 123 mydb1< C:\backup.sql //还原
注意:在CMD下 命令不能加;
————————————————————————————————————————————————————
————————————————————————————————————————————————————
⑨mysql连接
————————————————————————————————————————————————————
//注册驱动和建立连接
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbtest","root","123");
String sql= "select * from address where kongfu='' and address=''";
Statement preState = conn.Statement(sql);
ResultSet rs = preState.executeQuery();
//int rows = preState.executeUpdate();
while(rs.next()){
String kongfu = rs.getString("kongfu");
String address = rs.getString("address");
System.out.println(kongfu + address);
}