1. ----------数据库定义-------
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
2. --------MySQL 目录结构--------
MySQL 的数据存储目录为 :data
data 目录通常在C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\data 位置。在 data 下的每个目录都代表一个数据库。
MySQL 的安装目录下:bin 目录中都是可执行文件;my.ini 文件是 MySQL 的配置文件;
3. -----------基本命令--------
启动:net start mysql;
关闭:net stop mysql;
登录:mysql -u root -p 123 -h localhost;
-u:后面的 root 是用户名,这里使用的是超级管理员 root;Ø
-p:后面的 123 是密码, 这是在安装 MySQL 时就已经指定的密码;Ø
-h:后面给出的 localhost 是服务器主机名,它是可以省略的,
例如:mysql -u root -p 123;Ø
-P: 端口号 l 退出:quit 或 exit;
查看MySQL编码
show variables like ‘char%’;
4. ----------分类-----------------
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
5.------------DDL-------------------
1.查看库名称:show databases;
2.切换数据库:use test01;
3.创建库:create database [ if not exists ] test02;
4.删除库:drop database [ if exists ] test02;
5.修改数据库编码:alter database test02 character set utf8 ;
6. ----------数据类型------------------
int:整型(放的是整数,比如:1,2,3)
double:浮点型,例如 double(5,2)表示最多 5 位,其中必须有 2 位小数,即最大值为 999.99;放的都是小数类型的数
decimal:泛型型,在表单钱方面使用该类型,因为不会出现精度缺失问题;也是小数类型,不会出现精度丢失。
char:固定长度字符串类型;
varchar:可变长度字符串类型;
text:字符串类型;
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型; 1970-1-1 数值、字符、日期
7. -----------操作表-------------------
1.创建表:create table test10 (sid varchar(10), name varchar(10) , age int ,birthday date , salary decimal(7,2)) ;
2.查看指定表的创建语句:show create table test10 ;
3.查看当前所在的库:select database() ;
4.查看当前表的表结构:desc test10 ;
5.删除表:drop table test10 ;
8.----------修改表----------------------
1.添加列 classname:alter table test10 add (classname varchar(20)) ;
2.修改列的数据类型:alter table test10 modify sid int(10) ;
3.修改列名gender改为sex: alter table test10 change gender sex char(2) ;
4.删除列:alter table test10 drop classname ;
5.修改表名称:alter table test10 rename to stu ;
9.------------DML----------------------
1.插入数据:
insert into stu (sid, name, age , gender ) values (‘1’, ‘小化’,’18’,’男’);
部分插入:insert into stu ( name, age) values (‘小丽’,‘13’);
没有指定插入列,则按顺序来:
insert into stu values (‘2’,’笑笑’,’20’,‘女’);
2.修改数据:
语法::update 表名 列名1=值1,列名2=值2,.
......where +条件- -update stu sid=3, name=’kk’where sid=1 ;
update stu age=age +1 where name=’小化’;
3.删除数据:
delete from stu where sid =2;
9. -----DCL----------
1.创建用户:
语法:CREATE USER 用户名@地址 IDENTIFIED BY '密码';
create user user1 @localhost identified by 123456;
create user user2 @’%’identified by 123456;
2.给用户授权:
语法:GRANT 权限 1, … , 权限 n ON 数据库.* TO 用户名
grant create ,alter, drop, insert ,update, select on myb1.* to user1 @localhost;
grant all on myb1.* to user2@localhost;
3.撤销授权:
语法:REVOKE 权限 1, … , 权限 n ON 数据库.* FORM 用户名
revoke create ,alter, drop, insert ,update, select on myb1.* to user1 @localhost;
revoke all on myb1.* to user2@localhost;
4.查看用户授权:
语法:SHOW GRANTS FOR 用户名
show grants for user1;
5.删除用户:语法:drop user user1@localhost;
6.修改密码:
UPDATE USER SET PASSWORD=PASSWORD('1234') WHERE User='user2' and Host=’localhost’;
FLUSH PRIVILEGES;
7、查询连接数据库的用户show full processlist;
10. ---------DQL-----------------------
1.基础查询
SELECT selection_list ----- /*要查询的列名称*/
FROM table_list -------- /*要查询的表名称*/
WHERE condition -----------/*行条件*/
GROUP BY grouping_columns------- /*对结果分组*/
HAVING condition -------/*分组后的行条件*/
ORDER BY sorting_columns --------/*对结果分组*/
LIMIT offset_start, row_count------ /*结果限定*/
2.条件查询
=、!=、<>、<、<=、>、>=;
BETWEEN…AND;
IN(set);
IS NULL;
AND;
OR;
NOT
3.模糊查询
1.模糊查询必须使用 LIKE 关键字。其中 “_”匹配任意一个字母,5 个“_”表示 5 个任意字母。
2.SELECT * FROM stu WHERE sname LIKE 'z%';
----其中“%”匹配 0~n 个任何字母。
3.去重---distinct----
--SELECT DISTINCT sal FROM emp;
4.-求和-
因为 sal 和 comm 两列的类型都是数值类型,所以可以做加运算。
如果 sal 或 comm 中有一个字 段不是数值类型,那么会出错。
SELECT *,sal+comm FROM emp;
comm 列有很多记录的值为 NULL,因为任何东西与 NULL 相加结果还是 NULL,所以结算结果可 能会出现 NULL。
下面使用了把 NULL 转换成数值 0 的函数 IFNULL:
SELECT *.sal+IFNULL(comm,0) FROM emp。
5.SELECT *.sal+IFNULL(comm,0) AS total FROM emp;
给列起别名时,是可以省略 AS 关键字的
SELECT *.sal+IFNULL(comm,0) total FROM emp;
4.排序
1.降序---desc
2.升序---asc
SELECT * FROM stu ORDER BY sage ASC;
或者
ELECT * FROM stu ORDER BY sage;
当省略时,默认的升序
5.聚合函数
聚合函数是用来做纵向运算的函数:
COUNT():统计指定列不为 NULL 的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为 0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为 0;
6. 分组查询
7.limit
LIMIT 用来限定查询结果的起始行,以及总行数。
11. 完美性约束
主键---primary key
建表时给定主键:
create table stu(sid char(10), sname varchar(20), age int, gender varhchar(10), primary key (sid));
建表后,增加主键:
alter table stu add primary key (sid);
删除主键:
alter table stu drop primary key
主键自增长---primary key auto_increment
当主键是int类型时才可以自增长
建表时给定主键自增长
create table stu(sid int primary key auto_increment, sname varchar(20), age int, gender varhchar(10));
修改表时设置主键自增长:
alter table stu change sid sid int auto_increment;
修表时删除主键自增长:
alter table stu change sid sid int;
非空---
在指定非空列表时一定要给值,不能把非空列表设置为null
建表时设置非空列表:
create table stu(sid int primary key auto_increment, sname varchar(20) not null , age int, gender varhchar(10));
唯一 ---unique
建表时给定唯一列表:
create table stu(sid (10) primary key auto_increment, sname varchar(20) uniqu);
外键:
备份和恢复数据:
--–-多表查询----------
1、合并结果集---把两个select查询结果合并到一起---注意:合并的两个结果 列数、类型 必须相同
第一种方式:
去重复记录---union:
select * from t1 union select * from t2 ;
第二种方式:
不去重复记录---union all:
select * from t1 union all select * from t2;
2、连接查询-求多个表的乘积:
select * from t1,t2;
产生了笛卡尔积
3、内连接
标准:
select * from emp e inner join dept d on e.deptno=d.deptno ;
方言:
SELECT e.ename,e.sal,e.comm,d.dname FROM emp AS e,dept AS d WHERE e.deptno=d.deptno;
4、外连接---左连接、右连接
查询出的结果存在不满足条件的可能。
左连接:
select * from emp e left outer join dept d on e.deptno = d.deptno ;
左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足 条件的显示 NULL
右连接:
select * from emp e right outer join dept d on e.deptno = d.deptno ;
自然连接
子查询




