mysql知识点
1:安装 mysql数据库 windows 版本mysql
2:配置文件 my.ini mysql安装目录下
[mysqld]
default-character-set=utf8
mysql服务器默认编码 utf8
3:登录mysql数据库服务器
mysql -uroot -proot
登录本机mysql服务器
mysql -uroot -proot -h 192.168.10.1
-h mysql服务器地址
4:查看当前mysql编码设置
status;
Server characterset: utf8 服务器编码
Db characterset: utf8 当前数据库编码
Client characterset: utf8 客户编码
Conn. characterset: utf8 客户连接编码
show variables like 'charac%';
character_set_client | utf8 客户编码
character_set_connection | utf8 连接编码
character_set_database | utf8 当前数据库编码
character_set_results | utf8 结果集
character_set_server | utf8 服务器
character_set_system | utf8 系统
5:设置客户端编码
set names gbk;一个指修改下面三个编码
1:客户编码
2:连接编码
3:结果编码
总结:
统一编码不容易出乱码;
1:创建数据库 utf8
2:创建表 utf8
3:查询更新 set names utf8;//一定
6:显示现在所有数据为名称
show databases;
1:information_schema 内存中数据....
2:mysql 安全相关数据
7:显示当前数据库下所有表
use test;
show tables;
8:更改使用当前数据库
use 数据库名;
9:查看表结构
desc 表名
show create table 表名
10:建库
create database 数据库名;
create database 数据库名 DEFAULT CHARACTER SET utf8;
11:查看创建数据库指令
show create database t11;
12:删除数据库
drop database t11;///???危害性比较大
13:建表;
create table 表名(
字段名 数据类型 约束,
字段名 数据类型 约束,
字段名 数据类型 约束,
字段名 数据类型 约束
) ENGINE=InnoDB;
默认存储引擎
14:数据类型
int,varchar,char,float,
date,time,datetime,timestamp;
enum,text; DECIMAL<高精度浮点>
char [固定长度字符段串]
varchar[可变长度字符段串]
create table t(c1 char(5),c2 varchar(5)));
insert into t values('ab','ab');
c1[5] c2
ab' ' 'ab'
磁盘空间: char浪费,varchar节省空间
查询效率: 高 稍慢
int 4个字节 21亿正负
int(5) 4个字节 21亿正负
date 年月日
time 时分钟
datetime 年月日时分秒
timstamp 时间戳[年月日时分秒]
15:约束
主键约束: primary key
唯一约束: unique
外键约束:foreign key(字段) references 表(字段)
非空约束:not null !!!
空约束: null
默认值: default 值 !!!
自增长: auto_increment
还有一个约束 mysql不支持约束
检查约束: check(字段=值);
16:添加记录
insert into 表名 values(值,值...);
insert into 表名(字段1,字段2)values(值,值);
insert into 表名 values(值),(值),(值);
17:修改记录
update 表名 set 字段=值,字段=值 where 条件;
update 表名 set 字段=值,字段=值;
18:删除记录
delete from 表名 where 条件
delete from 表名
19:清空表记录
delete from 表名; 慢: 删记录空间保留
truncate table 表名;稍快:删除记录空间回收;
20:基本查询
select * from 表名;//*所有字段
select 字段1,字段2 from 表名
21:条件
select * from 表名 where 条件;
22:排序
select * from 表名 order by 字段 asc;//升
select * from 表名 order by 字段 desc;//降
select * from 表名 order by 字段1 desc,字段2 asc;//降
select * from 表名 where 条件 order by 字段
23:聚合查询(count(),max(),avg(),sum(),min())
select count(*) from 表名;
select count(字段) from 表名;
select sum(字段) from 表名;
select avg(字段) from 表名;
select max(字段) from 表名;
select min(字段) from 表名;
24:给字段别名
select 字段1 as 别名 from 表名 where 条件;
select 聚合函数(字段) as 别名 from 表名 where 条件;
25:分组
select 字段 from 表名 group by 字段
技巧:
1:出现在select 子句中字段
2:一定要出现在group by 字段
3:或者添加组函数
示例
select count(id),name,age
from t_user
group by name;
26:having 条件分组函数 where
27:分页
select * from 表名 limit 超始值,条数;
1-10
select * from 表名 limit 0,5;
select * from 表名 limit 1;//只查询一条记录
28:模糊查询
select * from 表名 where name like '';
_ 匹配一个
% 匹配零到多个字符
29:内连接
select * from 表1 inner join 表2;
30:左连接
select * from 表1 left join 表2;
所有匹配内容显示
select e.empno,d.name
from emp e inner join dept d
on e.deptno = d.id;
select e.empno,d.name
from emp e left join dept d
on e.deptno = d.id;
select e.empno,d.name
from emp e right join dept d
on e.deptno = d.id;
31:右连接
select * from 表1 right join 表2;
32:内连接另一种用法
select * from 表1,表2;
where 条件;
编码,雇员名,主管名称;
select e.ename,m.ename
from emp e join emp m
on e.mgr = m.empno;
33:给表别名
select * from 表 别名;
34:子查询(嵌套查询)
select * from 表名
where 字段 = (子查询 select 字段 from 表名);
select * from 表名
where 字段 in(子查询 字段 from 表名);
select * from emp
where sal in
(select sal from emp where deptno = 10);
select * from emp
where sal in
(2540,5000,1000);
select * from 表名
where 字段 != (select 字段 from 表名);
delete from 表名
where 字段 = (select 字段 from 表名);
update 表名 字段=值
where 字段= (select 字段 from .....);
//-------------------------------------
3:mysql 视图
视图 view
作用:简化查询语句
创建视图
create view 视图名
as
查询语句;
使用视图(把视图当表用)
select * from 视图名
select 字段,字段,字段 from 视图名称
select * from 视图名 where 条件;
修改视图
alter view 视图名
as
查询语句;
删除视图
drop view 视图名;
//------------------------------
示例:
创建视图:保存所有雇员信息,工资大于2000;
create view v_emp
as
SELECT * FROM emp WHERE sal > 2000;
DROP view v_emp;
视图注意
1:视图中必须存放select 查询语句
2:把视图当表使用
3:不建议对视图执行insert,update,delete 操作;
查看视图
1:show tables;
2:用information_schema库表 tables;
use information_schema;
select * from tables;//????数据太多;
select table_schema,table_name,table_type
from tables
where table_schema='库名' and table_type='view';
查询所有视图
use information_schema;
select table_schema,table_name,table_type
from tables
where table_schema='test' and table_type='view';
查询某个库所表视图
use information_schema;
select table_schema,table_name,table_type
from tables
where table_schema='test';
3:触发器trgger javascript 事件...
作用:当对表进行 insert,update,delete 操作时[指定触发]
触发类型:insert;update;delete
触发器执行时间:before;after
创建触发器
delimiter //
create trigger 触发器名
[before|after] [insert|update|delete]
on 表名
for each row
begin
sql 语句;
sql 语句;
end //
delimiter ;
删除触发器
drop trigger 触发器名;
修改定界符
delimiter ;
delimiter //
select * from emp ;
示例:
create table t1(id int);
create table t2(name varchar(20));
insert into t1 values(1),(2),(3);
insert into t2 values('tom');
给t2表添加update触发器,
触发器工作--->将t1删除了;
delimiter //
create trigger tri_t2_update
before update
on t2
for each row
begin
delete from t1;
end //
delimiter ;
示例:
创建触发器 t2 delete
作用:向t1 表添加一条记录
delimiter //
create trigger tri_t2_delete
after delete
on t2
for each row
begin
insert into t1 values(1000);
end //
delimiter ;
查看触发器
information_schema库-->triggers
select trigger_name,event_object_schema,
event_object_table
from information_schema.triggers
where event_object_schema='库';
select trigger_name,event_object_schema,
event_object_table
from information_schema.triggers
where event_object_schema='news';
show create trigger '触发器名';
show create trigger tri_my \G;
存储过程 procedure 自定义函数
创建存储过程
delimiter //
create procedure 存储过程名称()
begin
sql ;
sql ;
end //
delimiter ;
调用存储过程
call 存储过程名(值);
删除存储过程
drop procedure 存储过程名;
查看存储过程
mysql库->proc 表
select db,name from mysql.proc;
select db,name from mysql.proc where db = 'news';
helloworld
delimiter //
create procedure hello()
begin
select 'hello';
end //
delimiter ;
call hello();
示例:查询表内容
delimiter //
create procedure hello1()
begin
select * from t_user;
end //
delimiter ;
call hello1();
PDO执行MySQL
<?php
header("content-type:text/html;charset=utf-8");
//1:创建连接
$dsn = "mysql:host=127.0.0.1;dbname=news";
$db = new PDO($dsn,'root','root');
//2:设置编码
$db->query("set names utf8");
//3:执行sql
$count = $db->exec("INSERT INTO t_user values(null,'f',md5('f'))");
//4:关闭
$db = null;
echo $count;
?>
mysql的数据文件在datadir下,你在数据库中执行 show variables like '%datadir%';就会显示数据库文件的路径