Mysql
一、数据库管理系统DBMS 软件 bin config db (保存数据) - admin - 123asdfasd.txt {用户名, 密码,类型...} - 123asdfasdb.txt{用户名, 密码,类型...} - course - school src 写程序: a. 数据库在本地 1、找到目录 2、添加数据 b. 数据库在远程 1、socket连接上远程机器 2、socket发送{命令} # add|asdfasdfadf 做些什么???? a. A,程序 程序,socket客户端 B,数据 socket服务端 C,制作一套规则 add|阿德法撒旦发射点发 delete|asdfasdf .... D,socket客户端和服务端用户认证,授权,限制 有人搞了一套软件: socket客户端 B,数据 socket服务端 C,制作一套规则 add|阿德法撒旦发射点发 delete|asdfasdf .... D,socket客户端和服务端用户认证,授权,限制 -- SqlServer(收费),Oracle,sqlite,access...,,,, MySQL MySQL,SqlServer(收费),Oracle,sqlite,access.. 服务端和客户端 mysql: add|asdfasd SqlServer: a|asdfasdf 二、下载安装 1、下载 2、解压到任意目录 3、服务器端运行起来 mysqld 4、客户端连接 省事: 将mysql服务端制作成一个Windows服务 net start mysql net stop mysql ===,打开服务管理,直接... 三、MySQL数据库 1、概念 数据库, 文件夹 数据库表, 文件 数据行, 文件中的一行数据 2、 启动服务器: net start mysql 或 C:\mysql-5.7.16-winx64\mysql-5.7.16-winx64\mysql mysql.server start /etc/init.d/mysql start 客户端连接: C:\mysql-5.7.16-winx64\mysql-5.7.16-winx64\mysql -u root -p 初试: show databases; # 查看当前Mysql都有那些数据,根目录都有那些文件夹 create database 数据库名; # 创建文件夹 use 数据库名; # 使用选中数据库,进入目录 show tables; # 查看当前数据库下都有那些表, create table 表名(nid int,name varchar(20), pwd varchar(64)); # 创建数据库表 select * from 表名; # 查看表中的所有数据 insert into 表名(nid,name,pwd) values(1,'alex','123'); # 插入数据 -- select * from 表名; 3、用户授权 用户管理特殊命令: 创建用户 create user '用户名'@'IP地址' identified by '密码'; 删除用户 drop user '用户名'@'IP地址'; 修改用户 rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';; 修改密码 set password for '用户名'@'IP地址' = Password('新密码') c:\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysql -u 权限: 默认,什么都没有 grant 权限 on 数据库.表 to '用户'@'IP地址' -- 授权 select,查 数据库.表 test.tb1 test.* *.* '用户'@'IP地址' xiaohu@localhost ===========重要,远程连接============= ==================== a. 解放双手,在重复操作文件,直接将命令发送给mysql服务端,自动操作 b. 数据库,表,行 c. 开户和授权 密码,必须用 其他,推荐用 d. 客户端连接(MySQL提供的客户端) 1、 mysql -u root -h 192.168.1.1 -p # 输入密码 2、 初试: show databases; # 查看当前Mysql都有那些数据,根目录都有那些文件夹 create database 数据库名; # 创建文件夹 use 数据库名; # 使用选中数据库,进入目录 show tables; # 查看当前数据库下都有那些表, create table 表名(nid int,name varchar(20), pwd varchar(64)); # 创建数据库表 select * from 表名; # 查看表中的所有数据 insert into 表名(nid,name,pwd) values(1,'alex','123'); # 插入数据 -- select * from 表名; 3、 ;;;;;;;;;; 4、 SQL语句 数据库级别 SHOW DATABASES; CREATE DATABASE 数据库名称; CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; USE 数据库名称; drop database 数据库名称; 表级表 show tables; desc tb1; 查看表的信息 *** create table tb1(nid int, name varchar(10))engine=innodb default charset=utf8; # 事务,原子操作,原子性操作未完成会回到原来的状态innodb支持事务 a. 默认值 b. 是否可以为空 c. 自增列(一张表只能有一个,数字,必须是索引-主键) d. 主键索引: 一张表只能有一个主键,唯一不能重复,不能为null,- 一般情况下,自增列设置主键 1,2,3,4,5,6 唯一索引: 可以为null,一张表可以有多个唯一列 1,2,3,4,5,6,null -- 约束 -- 索引,加速查找 create table xxx( nid.... primary key, .... ) create table student( name varchar(10) not null, num int not null, age int, gender int, primary key (name,num) ) 约束: name num age a 88 9 a 99 9 a 88 0 # 主键: 不能为null, 不能重复, 一张表只有一个主键(可以多列组成主键) # 一般用法: nid int auto_increment primary key, # 请在本地创建表: CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; use 数据库名称; create table tb5( nid int not null auto_increment primary key, name varchar(16), age int default 19 )engine=innodb default charset=utf8; e. 外键foreign key,一对多 两张表建立约束 -- 约束 -- foreign key,一对多 f. 数据类型:数值、时间和字符串 数值: 二进制: bit 二进制 整数: tinyint smallint int bigint - 范围不一样 小数: decimal --精确的 -- 985412154521321.857541245421245845 FLOAT -- 98541215458798465465749465465465421321.857541245420000000 -- 985412154000000000000000000000000000000000000000000000000 DOUBLE -- 9854121544587984654657494654654654000000000000000000000000 字符串: # 定长 char create table tb13(n char(7),b int, c int) insert ssss # 查找速度快,浪费空间 # 变长 varchar create table tb13(n varchar(7),b int, c int) insert ssss insert sssss insert sssss5 # 查获找速度慢,节省空间 text mediumtext longtext 二进制数据: TinyBlob、Blob、MediumBlob、LongBlob # 上传文件 # Blob,强制二进制方式 # varchar(65), "D:\av.avi" 将上传的文件保存在硬盘, D:\av.avi ; 时间: DATE YYYY-MM-DD(1000-01-01/9999-12-31) # 1996-12-12 18:45 TIME HH:MM:SS('-838:59:59'/'838:59:59') YEAR YYYY(1901/2155) DATETIME YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y) TIMESTAMP YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时) enum 单选 集合 多选 create table tb13(num decimal(6,2)) #8888.18 drop table tb1; # 直接表删除 delete from tb1; # 清空表内容 truncate table tb1; # 清空表内容,速度快,自增回到远点 select * from tbl; 数据行级别 ***** select * from tbl; # 增 insert into tb1(name,age) values('alex', 18); insert into tb1(name,age) values('alex', 18),('eric', 19),('eric', 19); create # 删 delete from 表 delete from 表 where id=1 and name='alex' # 改 update 表 set name = 'alex' where id>1 # 查 select * from 表 select * from 表 where id > 1 select nid,name,gender as gg from 表 where id > 1 来自 <http://www.cnblogs.com/wupeiqi/articles/5713315.html> # 其他 连表操作: # 连表 select * form a,b where a.x = b.o # join, a. left join select * from a LEFT OUTER JOIN b ON a.x = b.o b. inner join ,永远不会出现Null select * from a inner JOIN b ON a.x = b.o
Mysql 事务
# 事务示例(事务内每条命令都要执行完才能通过,有一条出错,将会回滚到执行事务前) # START TRANSACTION; # 事务开始命令 # DELETE from tb1; # insert into tb2(name)values('seven'); # COMMIT; #事务结束命令 # 完整创建事务 # delimiter \\ # create PROCEDURE p1( # OUT p_return_code tinyint) # BEGIN # DECLARE exit handler for sqlexception # 创建异常报错, # BEGIN # -- ERROR # set p_return_code = 1; # 事务不能执行完时执行该行命令 # rollback; # END; # DECLARE exit handler for sqlwarning # BEGIN # -- WARNING # set p_return_code = 2; # rollback; # END; # START TRANSACTION; # DELETE from tb1; # insert into tb2(name)values('seven'); # COMMIT; # -- SUCCESS # set p_return_code = 0; # END\\ # delimiter ;
视图和存储过程
创建视图 CREATE VIEW v1 AS # REATE VIEW "视图名称" AS 固定用法 SELECT nid, name FROM A WHERE nid > 4 删除视图 DROP VIEW "视图名称" 修改视图 -- 格式:ALTER VIEW 视图名称 AS SQL语句 ALTER VIEW "视图名称" AS SELECT A.nid, B. NAME FROM A LEFT JOIN B ON A.id = B.nid LEFT JOIN C ON A.id = C.nid WHERE A.id > 2 AND C.nid < 5 使用视图 select * from "视图名称" 存储过程 (无参数) delimiter // # 将mysql结束符号改为 // create procedure p1() #p1为“函数名” BEGIN #固定用法 select * from t1; END// delimiter ; -- 执行存储过程 call p1() -- 创建存储过程(有参数) delimiter \\ create procedure p1( in i1 int, # in只能传参数 in i2 int, # inout i3 int, # inout 能传参数也有返回值 out r1 int # out 可以有返回值 ) BEGIN DECLARE temp1 int; DECLARE temp2 int default 0; set temp1 = 1; set r1 = i1 + i2 + temp1 + temp2; set i3 = i3 + 100; end\\ delimiter ; -- 执行存储过程 set @t1 =4; set @t2 = 0; CALL p1 (1, 2 ,@t1, @t2); SELECT @t1,@t2; 有参数的存储过程 返回结果集 delimiter // create procedure p1() begin select * from v1; end // delimiter ; 返回值+结果集 delimiter // create procedure p2( in n1 int, inout n3 int, out n2 int, ) begin declare temp1 int ; declare temp2 int default 0; select * from v1; set n2 = n1 + 100; set n3 = n3 + n1 + 100; end // delimiter ;