数据库有很多,以MySQL5.7版本为例,MySQL的安装和配置详情链接:https://pan.baidu.com/s/1DhbxxuPmsk-cPr-egH4d9g
提取码:7hd6
MySQL为关系型数据库,关系库特点:
1.永久保存数据。2.供数据安全。3.提供数据并发访问。4.提供多种数据类型。5.提供事物支持。6.提供SQL语言操作数据。
数据库里面存放数据,是以库(database)为单位的。库里面又分为不同表(table),表中存放具体的数据
库
在搜索栏输入cmd 打开命令行,登陆MySQL。(注意所有的SQL语句一定要在命令末尾加 ';')
1.首先建库语句为:create database 库名;
2.查看已有数据库语句为:show databases;
mysql> create database test2; Query OK, 1 row affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | | test2 | +--------------------+
表
1.建表时首先得用语句:use 库名;选定你要用的数据库 出现Database changed就证明数据库选定了。选定以后才可以操作该数据库,比如建表,查看表中内容等。
use test2; Database changed
2.建表用 create table 表名(表中数据库类型);
create table student( -> sid int, -> sname varchar(10) -> ); Query OK, 0 rows affected (0.47 sec)
创建表中的数据类型格式:自定义名 数据类型名
数据类型有 int char(固定长度) varchar(可变长度)等
可以定义键值(primary key),数据自增(auto_increment),不为空(not null)等。
键可以保证数据唯一,自增可以保证数据自动添加.有序
mysql> create table student2( -> sid int primary key auto_increment, -> sname varchar(10)) -> auto_increment=10; Query OK, 0 rows affected (0.44 sec)
表创建好了之后就可以对表进行操作。
3.查看此库中的所有的表的语句:show tables;用此语句查看此库中的所有表。
mysql> show tables; +-----------------+ | Tables_in_test2 | +-----------------+ | student | +-----------------+
4.查看表中数据的数据类型语句:desc 表名
desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | sid | int(11) | YES | | NULL | | | sname | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+
可以看出刚才创建表时,定义的表中的数据是数据类型,以及主键,是否可以为空,默认等信息。
5.创建表后,可以修改表的结构,用alter语句
添加列:alter table 表名 add 列名 数据类型;
修改列: alter table 表名 modify 列名 新类型;
删除列 alter table 表名 drop 列名;
举例,增加一列score,修改列的类型,删除score列
mysql>alter table student add score int; mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | sid | int(11) | YES | | NULL | | | sname | varchar(10) | YES | | NULL | | | score | int(11) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ mysql> alter table student modify score char; mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | sid | int(11) | YES | | NULL | | | sname | varchar(10) | YES | | NULL | | | score | char(1) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ mysql> alter table student drop score; mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | sid | int(11) | YES | | NULL | | | sname | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+
6.往表中插入数据(要根据建表时定义的数据类型和数据个数插入数据)
格式为:insert into 表名(列1,列2...)values(值1,值2...)
insert into student(sid,sname) values(1,'Mr.Wang');
7.更新数据,update 表名 set 列名=新值 where 条件(不加条件的就是更改所有的符合条件的值)
update student set sid=4 where sid =3; Query OK, 2 rows affected (0.31 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> select * from student; +------+----------+ | sid | sname | +------+----------+ | 1 | Mr.Wang | | 2 | Mrs.Yang | | 4 | Mr.Wang | | 4 | 张三 |
8.查看表中的数据的命令格式:select 要查看的数据名 from 表名;(*代表所有的数据)
select sid from student; +------+ | sid | +------+ | 1 | | 2 | | 3 | | 3 | +------+ select * from student; +------+----------+ | sid | sname | +------+----------+ | 1 | Mr.Wang | | 2 | Mrs.Yang | | 3 | Mr.Wang | | 3 | 张三 | +------+----------+
也可以根据条件看自己想要的数据,这些条件语句有,order by(排序),group by(分组)having(分组选择条件),limit(限制),where(条件)
(1)条件 where
可以加 : = 等值匹配 != 不等值匹配 > 大于 < 小于 >= 大于等于 <= 小于等于 比如选择sid=1的数据:
select * from student where sid=1; +------+---------+ | sid | sname | +------+---------+ | 1 | Mr.Wang | +------+---------+
可以加:逻辑与(两个条件同时成立)and。逻辑或(两个条件有一个成立,结果就是真) or 。 逻辑非 (条件取反) not
select * from student where sid=1 and sname='Mr.Wang'; +------+---------+ | sid | sname | +------+---------+ | 1 | Mr.Wang | +------+---------+
可以加:between 值1 and 值2 等价于 列 >= 值1 and 列 <= 值2 (注意小值要在前面,包含边界的值)
in (值1,值2,... 值n) 等价于 列=值1 or 列=值2 ... or 列=值n (注意值列表的长度)
like 模糊查询 其中匹配通配符 % 表示匹配0~多个任意字符 通配符 _ 表示匹配1个任意字符
也可以于not配合 比如 not likeselect * from student where sid>1 and sid<3; +------+----------+ | sid | sname | +------+----------+ | 2 | Mrs.Yang | +------+----------+ 1 row in set (0.00 sec) mysql> select * from student where sid between 1 and 2; +------+----------+ | sid | sname | +------+----------+ | 1 | Mr.Wang | | 2 | Mrs.Yang | +------+----------+ select * from student where sid in(1,2); +------+----------+ | sid | sname | +------+----------+ | 1 | Mr.Wang | | 2 | Mrs.Yang | +------+----------+ select * from student where sname like 'Mr%'; +------+----------+ | sid | sname | +------+----------+ | 1 | Mr.Wang | | 2 | Mrs.Yang | | 3 | Mr.Wang | +------+----------+
(2)分组 group by having (分组条件)
select sid from student group by sid having sid>1 ; +------+ | sid | +------+ | 2 | | 3 | +------+
表示先以sid为条件把student表分组,在选择sid>1的sid,也可以不用加having选择
分组group by 分组条件后面可以加多个条件。比如 group by sid,sname
分组条件也可以加函数:
count(*) 表示求每组的个数 max(列) 求最大值 min(列) 求最小值
sum(列) 求和 avg(列) 求平均值下面举例:先以sid为条件把student表分组,再计算每个分组的个数,最后选择出分组中数据个数大于1的。
select sid,count(*) from student group by sid having count(*)>1 ; +------+----------+ | sid | count(*) | +------+----------+ | 3 | 2 | +------+----------+
(3)排序 order by 数据名 [参数] 。参数 有两种 desc升序排序 asc降序排序 (不加参数,默认为asc)
select sid from student order by sid desc; +------+ | sid | +------+ | 3 | | 3 | | 2 | | 1 | +------+
表示根据sid升序排序
(4)限制 limit()结合分组,排序等语句使用 表示根据sid升序排序后,在输出前三个数据
select sid from student order by sid desc limit 3; +------+ | sid | +------+ | 3 | | 3 | | 2 | +------+
(5)以上语句可以结合使用:执行为顺序为:
where > group by > having > select > order by > limit
库不用了可以删除,删库已有的库语句为:drop database 库名;(危险操作)
常用函数:
Numeric Functions 数学函数
rand() 生成一个从[0.0 ~ 1.0) 之间的随机小数, 小于1.0
floor() 舍去小数
round() 四舍五入String Functions 字符串函数
left(字符串, n) n代表从左边要截取的字符
lower()
upper()
substr(字符串,下标, 长度) 下标从1开始
求字符串长度char_length(name)=n;Date and Time Functions 日期函数
year() 截取年份
month()
date()
date_add(日期 时间间隔); 其中时间间隔的语法:interval n 单位
select empno,ename,date_add(hiredate, interval 1 month ),hiredate from emp; 加一个月
select empno,ename,date_add(hiredate, interval 3 day ),hiredate from emp; 加3天
SELECT EXTRACT(DAY_MINUTE FROM '2009-07-02 13:02:03'); 提取日期中的从天到分钟的部分
select now() 获取当前时间
导入数据
1.load data infile '文件路径\文件名字' into table 表名;外部文本文件的内容导入到数据库表中
要让load data命令生效,必须修改设置:在my.ini文件添加
secure-file-priv=2.source 文件路径/文件名
导出数据
1. cmd > mysqldump -uroot -p 库名 >> 要保存的文件.sql (source的逆操作, 内部是sql语句)
2. 把表中的数据保存到文本文件中 (load data infile的逆操作)
select * from 表 into outfile '文件路径\文件名'
几种连接查询
表1 inner join 表2 on 连接条件 (内连接:两张表的记录必须完全满足连接条件,才会出现在最后结果中)
表1 left outer join 表2 on 连接条件 (左外连接)
表1 right outer join 表2 on 连接条件 (右外连接)
left outer join 位于连接左侧的表,不管是否连接到了记录,都会出现在结果中
符合连接条件的记录,和内连接效果一样
不符合连接条件的记录,对应另一张表的列都是null值
right outer join 位于连接右侧的表,不管是否连接到了记录,都会出现在结果中outer可以省略