本文是mysql基础知识的整理。版本是5.5.27社区版压缩包
Mysql官网: http://www.mysql.com/
MySQL Enterprise Edition (commercial)
MySQL企业版(商业),据说个人用不需要收费的
MySQL Cluster CGE (commercial)
运营商级版本,用户可通过订购或者商业许可及服务来获取
MySQL Community Edition (GPL)
MySQL社区版,它是基于GPL协议的,只要你的应用系统遵循GPL协议而开源,或者你的应用是内部使用,没有通过分销应用软件而获利的话,或者你开发商业应用软件的研发阶段都可以完全免费的使用这个Community版本;
对应下载地址:http://dev.mysql.com/downloads/
MySQL Community Server (GPL)
MySQL社区服务器(GPL)。我们学习sql、写sql、运行sql用到的程序
对应下载地址:http://dev.mysql.com/downloads/mysql/
MySQL Cluster (GPL)
MySQL集群(GPL)集群配置程序
MySQL Fabric (GPL)
数据分布式自动主从备份程序,看起来像是hadoop那种作用
MySQL Utilities (GPL)
一组用于维护和管理MySQL服务器的命令行工具,包括:管理工具(克隆、复制、比较、差异、导出、导入)、复制工具(安装、配置)、一般工具(磁盘使用情况、冗余索引、搜索元数据)等
MySQL Workbench (GPL)
可视化管理工具
MySQL Proxy (GPL)
一个数据库代理层产品,和MySQLServer一样,同样是一个基于GPL开源协议的开源产品。可用来监视、分析或者传输他们之间的通讯信息。他的灵活性允许你最大限度的使用它,目前具备的功能主要有连接路由,Query分析,Query过滤和修改,负载均衡,以及基本的HA机制等。
MySQL Connectors
其它语言/程序连接mysql需要用的到驱动程序
MySQL on Windows (Installer & Tools)
MySQL在Windows上的安装程序和工具
MySQL Yum Repository
Linux上安装mysql用到的Yum库
MySQL APT Repository
Linux上安装mysql用到的APT库
MySQL SUSE Repository
SUSE系统上安装或升级mysql用到的库
一。MySql的安装
1.解压到无空格目录:
2.配置MySql:
根据需要拷贝一个my-*.ini文件为my.ini文件:
3.my.ini配置参数:
1)[client] 条目下面的内容:
1 2 3 4 5 |
#password = your_password #默认为空 Port = 3306 #默认端口3306,多个数据库时可修改 Socket = /tmp/mysql.sock |
2)[mysqld] 条目下面的内容:
1 2 3 4 5 6 7 8 9 10 |
Port = 3306 #默认端口3306,须同上设置 Socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 16K max_allowed_packet = 1M table_open_cache = 4 sort_buffer_size = 64K read_buffer_size = 256K |
3)紧随其后可添加参数:
1 2 3 4 |
basedir="%MYSQL%/" #my.ini文件所在目录 datadir="%MYSQL%/data/" #mysql默认系统数据库所在路径 |
4)自定义字符集:
在[client]下面添加 default-character-set=utf8
在[mysqld]下面添加 character-set-server=utf8
4.进入bin目录初始化数据库:
cmd> cd D:\Programs\mysql\bin
cmd> mysqld --console
5.如果再次执行初始化:
ctrl+c结束。
6.注册系统服务:
1)注册服务:
方式1:
cmd> mysqld --install
方式2:
cmd> mysqld --install 服务名
方式3:
cmd> myslqd --install 服务名 --defaults-file="my.ini文件全路径"
2)删除服务:
方式1:
cmd> mysqld --remove 服务名
方式2:
cmd> mysqld --remove 服务名[--defaults-file="my.ini文件全路径"]
方式3:
cmd> sc delete "服务名"
3)启动服务:
cmd> net start 服务名
4)停止服务:
cmd> net stop 服务名
二. 基本命令:
1. 帮助:
方式1:
cmd> mysql -?
方式2:
cmd> mysql --help
2. 登陆服务器:
方式1: 第一次无密码登陆:
cmd> mysql -uroot
方式2: 简写附加密码登陆:
cmd> mysql -uroot -p1234
方式3: 单独输入密码登陆:
cmd> mysql -uroot -p
enter password: 1234
方式4: 全写附加密码登陆:
cmd> mysql --user=root --password=1234
3. 查看服务器状态:
mysql> status;
4. 查询已有库:
mysql> show databases;
5. 选择数据库:
mysql> use 库名;
6. 查询当前使用的数据库:
mysql> select database();
7. 查询库中已有的表:
mysql> show tables;
8. 查看表结构:
mysql> desc 表名;
9. 查询列:
1)指定列:
mysql> select 列名, 列名, 列名 from 表名;
2)全部列:
mysql> select * from 表名;
10. 查询数据库编码:
mysql> show variables like '%char%';
三. 管理用户:
1. 创建用户:
默认无密码;默认无权限;'主机名'默认为%,表示所有的机器
mysql> create user '用户名'@'主机' [identified by '密码']
2. 用户授权:
mysql> grant 权限 on 数据库.表名 to '用户名'@'主机' [with grant option];
with grant option :允许当前用户将自己的权限再次授予其他人
授予最大权限:grant all on *.* to 'itcast'@'192.168.1.100' with grant option;
3. 修改密码:
1)更新root的空密码:
mysql> use mysql;
先用空密码登陆,然后:
mysql> update user set password=password('新密码') where user='root';
mysql> flush privileges;
2)已知密码:
cmd> mysqladmin -u用户 -p旧密码 password 新密码
3)未知密码:
mysql> set password for '用户名'@'主机' = password('密码');
4)丢失root密码:
确保mysql系统服务没有启动。
①在单独的命令提示符中:
cmd> mysqld --console --skip-grant-tables
②在单独的命令提示符中:
cmd> mysql -uroot
四. SQL:
1. DDL:数据定义语言:
创建数据库:mysql> create database 库名;
删除数据库:mysql> drop database 库名;
修改数据库:mysql> alter database character set 字符集; #修改数据库默认字符集
创建表:mysql> create table 表名(列名 类型 [引用/约束], 列名 类型 [引用/约束]...);
删除表:mysql> drop table 表名;
修改表:mysql> alter table 表名 add column 列名 类型; #给表单添加新的列
2. DML:数据操作语言:
1)插入:
①mysql> insert into 表名 values('值', '值', '值' ...);
②mysql> insert into 表名('列1', '列2') values('值1', '值2');
2)修改:
mysql> update 表名 set 列名=值, 列名=值...[where 条件] ;
3)删除:
务必添加where条件,否则清空表单
mysql> delete from 表名 where 条件;
3. DQL:数据查询语言:
1)查询全部:
mysql> select * from 表名;
2)查询部分:
①按列查询:
mysql> select 列名, 列名, 列名 from 表名;
②按列值运算结果查询:
mysql> select 列名-60 from 表名;
③使用别名显示查询结果:
mysql> select 列名 as '别名', 列名 '别名' from 表名;
④按照where设定的具体条件查询:
mysql> select 列名 from 表名 where 条件;
⑤按照where 设定的模糊条件查询:
mysql> select * from 表名 where 列名 like 'a%'; #首字母为a
mysql> select * from 表名 where 列名 like '_a%'; #第二个字母为a
mysql> select * from 表名 where 列名 like '%a%'; #包含字母a
⑥按照where 设定的逻辑条件查询:
# 选择列值符合参数1 到参数2 区间的行
mysql> select * from 表名 where 列名 between 参数1 and 参数2 ;
# 查询符合条件1 同时符合条件2 的内容
mysql> select * from 表名 where 条件1 and 条件2 ;
# 查询符合条件1 或者如何条件2 的内容
# 逻辑元素符and的优先级大于or
mysql> select * from 表名 where 条件1 or 条件2 ;
⑦查询列值为null 的内容:
mysql> select * from 表名 where 列名 is null;
4. 聚合函数:
1)计数:
mysql> select count(*) from 表名; #统计总行数,推荐参数为1
2)平均值:
mysql> select avg(列名) from 表名; #查询指定列的平均值
3)最值:
mysql> select max(列名) from 表名; #查询指定列中值最大的条目
mysql> select min(列名) from 表名; #查询指定列中值最小的条目
4)总和:
mysql> select sum(列名) from 表名; #求指定列值的总和
5. 排序查询:
1)按指定列值升序查询表单内容
mysql> select * from 表 order by 列 ASC;
2)按指定列值降序查询表单内容
mysql> select * from 表 order by 列 DESC;
6. 分组查询:
1)按列值分组查询表单内容
mysql> select * from 表名group by 列名;
2)添加条件查询
mysql> select 列 from 表 group by 列 having 条件;
#注意:使用group时不能使用where设置条件
五. 关于编码:
1. 修改表的默认编码
mysql> alter table 表名 character set 编码;
2. 显示数据库当前编码
mysql> show variables like '%char%';
三个编码必须统一,并且应该与客户端的编码一致
character_set_client | gbk
character_set_connection | gbk
character_set_results | gbk
3. 修改数据库的默认编码
mysql> alter database 数据库 character set 编码;
4. 创建数据库时执行编码
mysql> create database 数据库 character set 编码;
5. 如果使用命令窗口进行中文录入
①设置上面的3个编码
mysql> set names 编码;
②单独设置
mysql> set 系统变量名 = 编码;
六. 关于注释:
1. 单行注释:
#这里是注释,以井号开头。
-- 这里是注释,双减号之后必须跟一个空格。
2. 多行注释:
/*
这里是多行注释,如果使用单引号或双引号,必须配对出现
*/
七. 数据备份/还原:
cmd> mysqldump -u用户名 -p密码 需备份的库名 > 路径/文件名.sql
cmd> mysql -u用户名 -p密码 还原到的库名 < 路径/文件名.sql
八. 表单约束:
1. 主键约束:确定被约束字段的内容不能为空(null),并且数据唯一
1)关键字:primary key
2)编写的位置:
①创建表时,在列名之后进行描述
列名 varchar(32) primary key
②创建表时,在约束区域指定列的主键约束。可以设置多个列为主键,联合主键
列名1 varchar(32), 列名2 varchar(32)...., constraint primary key(列名1,列名2)
③创建表后,修改表结构,给表添加主键。可以设置多个列为主键,联合主键
alter table 表名 add constraint primary key(列名);
2. 唯一约束:确定被约束的字段数据唯一,允许存在一个null值
1)关键字:unique
2)编写的位置
①创建表时,在列名之后进行描述
②创建表时,在约束区域进行,指定列为唯一约束
③创建表后,修改表结构,给表添加唯一约束
3. 非空约束:主键 = 唯一 + 非空
1)关键字: not null
2)编写位置:
创建表时,在列名之后进行描述
4. 默认约束:默认值
1)关键字:default '默认值'
2)编写位置:
创建表时,在列名之后进行描述
5. 累加约束:自动增长
1)关键字:auto_increment
2)编写位置:
创建表时,在列名之后进行描述
3)注意:
①如果要使用自动增长列,需要将列的类型定义成整型
②如果要使用自动增长列,需要将列定义成主键
4)删除数据,但自动增长列的序号不重置(序列保留)
delete from 表名;
5)删除数据,但自动增长列的序号重置(序列清零)
truncate table 表名;
6. 外键约束:处理多表之间的关系
关键字:foreign key
九. 多表关系:
1. 一对一:
主表的主键与从表的主键进行主外键关联。
主表的主键与从表的外键(必须唯一unique)进行主外键关联
2. 一对多:
修改主表:设置主键
修改从表:设置外键(数据类型须和主表主键相同,命名:主表_主键)
1 2 3 4 5 |
alter table 从表 add constraint 自定义约束名_fk foreign key(从表的外键) references 主表(主键); |
3. 多对多:
创建外联表1:设置主键
创建外联表2:设置主键
创建中间表,将多对多关系分成两个1对多关系
①设置两个外键,添加中间表和外联表的关联
1 2 3 4 |
alter table 中间表 add constraint 自定义列名称_fk1 foreign key(从表的外键1) references 外联表1(主键); alter table 中间表 add constraint 自定义列名称_fk2 foreign key(从表的外键2) references 外联表2(主键); |
②添加联合主键,使两个外键成为中间表的主键
alter table 中间表 add constraint primary key(fk1, fk2);
③添加数据:不能添加外联表中不存在的数据
insert into 中间表(外键1, 外键2, 其它列) values (外联表1主键值, 外联表2主键值, 其它列值);
④删除数据:
1》从外联表1中删除id值在数据表外联表2里有匹配的记录:
delete 外联表1 from 外联表1,外联表2 where 外联表1.id=外联表2.id;
或:
delete from 外联表1 using 外联表1,外联表2 where 外联表1.id=外联表2.id;
2》从外联表1删除在外联表2没有匹配的记录:
delete 外联表1 from 外联表1 left join t2 on 外联表1.id=外联表2.id where 外联表2.id is null;
或
delete from 外联表1,using 外联表1 left join t2 on 外联表1.id=外联表2.id where 外联表2.id is null;
3》从两个外联表删除相同记录:
delete 外联表1,外联表2 from 外联表1 left join 外联表2 on 外联表1.id=外联表2.id where 外联表1.id=25;
注意此处的 delete外联表1,外联表2 from 中的外联表1、外联表2不能是别名。
⑤查询数据:
1 2 3 4 5 6 7 8 9 10 11 |
#92规范: select w1.主键, w2.主键 from 外联表1 as w1, 中间表 as z, 外联表2 as w2 where w1.主键=z.fk1 and z.fk2=w2.主键; #99规范: select w1.主键, w2.主键 from 外联表1 as w1 inner join 中间表 as z on w1.主键=z.fk1 inner join 外联表2 as w2 on z.fk2=w2.主键; |
十。多个数据库安装:
第一个数据库安装:
1.首先解压两份数据库文件到不同路径:
2.配置my.ini数据库参数:
打开mysql_a目录
1)复制一个my-*.ini文件,更名为my.ini :
2)打开修改相关参数:
(此为第一个数据库,可以略过此步骤):
(1)[client] 条目下面的内容:
1 2 3 4 5 |
#password = your_password Port = 3306 #默认端口3306,可自行设置 Socket = /tmp/mysql.sock |
(2)[mysqld] 条目下面的内容:
1 2 3 4 5 6 7 8 |
Port = 3306 #默认端口3306,须同上设置 Socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 16K max_allowed_packet = 1M ... |
(3)紧随其后添加:
1 2 3 4 |
basedir="%MYSQL%/" #my.ini文件所在目录 datadir="%MYSQL%/data/" #mysql默认系统数据库所在路径 |
(4)自定义字符集:
在[client]下面添加 default-character-set=utf8
在[mysqld]下面添加 character-set-server=utf8
3.安装系统库:
%MYSQL%/bin> mysqld --console
4.安装到windows系统服务:
%MYSQL%/bin> mysqld --install mysqla --defaults-file="%MYSQL%/my.ini"
说明:mysqla为自定义的服务名称,没有此项,默认为“MySql”,
defaults-file="" 引号内包含的是my.ini文件的路径。
5.启动mysqla系统服务:
%MYSQL%/bin> net start mysqla
6.连接到mysql数据库:
%MYSQL%/bin> mysql -uroot -P3306
说明:此时mysql默认用户名为root,密码为空
-P3306 用大写字母P指明连接的端口3306
此时不指明端口也可以连接到数据库,因为当前mysql命令执行的路径就在其创建的路径下:
第二个数据库安装:
1.打开mysql_b目录:
1)复制一个my-*.ini文件,更名为my.ini 。
2)打开修改相关参数:
(1)[client] 条目下面的内容:
1 2 3 4 5 |
#password = your_password Port = 3307 #默认端口3306,须区别于第一个数据库 Socket = /tmp/mysql.sock |
(2)[mysqld] 条目下面的内容:
1 2 3 4 5 6 7 |
Port = 3307 #默认端口3306,须同上设置 Socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 16K ... |
(3)紧随其后添加:
1 2 3 4 |
basedir="%MYSQL%/" #my.ini文件所在目录 datadir="%MYSQL%/data/" #mysql默认系统数据库所在路径 |
(4)自定义字符集:
在[client]下面添加 default-character-set=utf8
在[mysqld]下面添加 character-set-server=utf8
2.安装系统库:
%MYSQL%/bin> mysqld --console
3.安装到windows系统服务:
%MYSQL%/bin> mysqld --install mysqlb --defaults-file="%MYSQL%/my.ini"
说明:mysqlb为自定义的服务名称,没有此项,默认为“MYSQL”,
defaults-file="" 引号内包含的是my.ini文件的路径。
4.启动mysqlb系统服务:
%MYSQL%/bin> net start mysqlb
5.连接到mysql数据库:
%MYSQL%/bin> mysql -uroot -P3307
说明:此时mysql默认用户名为root,密码为空
-P3307 用大写字母P指明连接的端口3307
1)此时,我们的目录在mysql_b下,退出mysqlb服务器,仍能在此目录直接连接mysqla:
2)当我们切换到mysql_a路径,也可以直接连接mysqlb:
3)如果想登录当前路径所在的数据库,也可以不指定端口:
十一。UI工具,SQLyog:
1.文件,新连接:
2.点击“新建”,输入自定义的名称:
3.按项填写,然后测试,“连接”:
4.在“询问”框输入命令,选择后按F9键或点击工具栏执行按钮执行命令:
5.SQLyog可以同时连接多个数据库:
6.切换标签执行操作:
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/1053.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设