一、mysql数据库的安装(win7—mysql-5.6.22-winx64)
windows下mysql免安装配置
1、 下载mysql免安装压缩包
下载mysql-5.6.22-winx64.zip 解压到本地D:\mysql-5.6.22-winx64
2、 修改配置文件
复制my-default.ini为my.ini 文件
3、 修改my.ini
在[mysqld] 组:
basedir = D:\\mysql-5.6.22-winx64
datadir = D:\\mysql-5.6.22-winx64\\data
port = 3306
4、 命令行安装mysql
4.1、注册服务(注意以管理员身份操作:在我的电脑中打开“C:\Windows\System32”,找到文件“cmd.exe”,右键点击,选择“以管理员身份运行(A),进到目录“D:\mysql-5.5.24-winx64”,然后运行以下代码)
bin\mysqld --install mysql-5.6.22-winx64 --defaults-file=d:\mysql-5.6.22-winx64\my.ini
4.2、 启动服务(以管理员身份运行)
net start mysql-5.6.22-winx64
--也可右键点击“我的电脑”|“管理”|“服务和应用程序”|“服务”|找到“mysql-5.5.24-winx64”,右键点开,选择启动
4.3、命令行登录(把bin目录设到path环境变量中,则可省略“bin\”,后面同理)
bin\mysql -u root -p
--密码为空回车
为root设密码(原密码为空时):mysqladmin -u root password "1234"
修改root密码:mysqladmin -u root password oldpass "newpass"
4.4、停止服务(以管理员身份运行)
net stop mysql-5.6.22-winx64
4.5 删除服务(以管理员身份运行)
bin\mysqld --remove mysql-5.6.22-winx64
启动服务不通过注册
bin\mysqld --console
停止服务不通过注册服务
bin\mysqladmin -u root shutdown
5、常用命令
1.列出MYSQL支持的所有字符集:
SHOW CHARACTER SET;
2.当前MYSQL服务器字符集设置
SHOW VARIABLES LIKE 'character_set_%';
3.当前MYSQL服务器字符集校验设置
SHOW VARIABLES LIKE 'collation_%';
4.显示某数据库字符集设置
show create database 数据库名;
5.显示某数据表字符集设置
show create table 表名;
6.修改数据库字符集
alter database 数据库名 default character set 'utf8';
7.修改数据表字符集
alter table 表名 default character set 'utf8';
8.建库时指定字符集
create database 数据库名 character set gbk collate gbk_chinese_ci;
---------------------------------------------------------------------------------------------
【知识性文章转载】
MYSQL 字符集问题
MySQL的字符集支持(Character Set Support)有两个方面:
字符集(Character set)和排序方式(Collation)。
对于字符集的支持细化到四个层次:
服务器(server),数据库(database),数据表(table)和连接(connection)。
1.MySQL默认字符集
MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。
但是,传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢? (1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
(2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
(3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;
(4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;
(5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;
(6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
(7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;
简单的总结一下,如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用
latin1 存储,不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把
default_character_set 设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用 UTF-8 存储。
2.查看默认字符集(默认情况下,mysql的字符集是latin1(ISO_8859_1)
通常,查看系统的字符集和排序方式的设定可以通过下面的两条命令:
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+---------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:"mysql-5.0.37"share"charsets" |
+--------------------------+---------------------------------+
mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3.修改默认字符集
(1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,
如 default-character-set = utf8
character_set_server = utf8
修改完后,重启mysql的服务,service mysql restart
使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8
+--------------------------+---------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | D:"mysql-5.0.37"share"charsets" |
+--------------------------+---------------------------------+
(2) 还有一种修改字符集的方法,就是使用mysql的命令
mysql> SET character_set_client = utf8 ;
二、dos 环境下mysql的基础命令
命令演示
关于查询用户名:select * from mysql.user ;
※※了解※※ DCL– 数据控制语言 ----DBA
- create user hncu identified by '1234'; //创建一个用户
- INSERT INTO mysql.user(HOST,USER,PASSWORD)
VALUES('127.0.0.1',"hncu",PASSWORD("1234"));//创建一个用户
- SELECT * FROM mysql.user//查看所有用户
- GRANT ALL PRIVILEGES ON testDB.* TO hncu@localhost IDENTIFIED BY
'1234';////给一个用户授权(所有)
- grant all on *.* to 'hncu'@'%' with grant option;
//把所有资源授权给用户hncu,并允许他在任何机器上登录使用
- DELETE FROM mysql.user WHERE USER LIKE'hncu%'//删除一个用户
- SHOW GRANTS FOR hncu;//查看用户的权限
- grant all on *.* to 'hncu'@'192.168.31.168' with grant option;
//限制该用户只能在这台机器上登录
※※※ DML-数据操纵语言Data Manipulation Language。
主要指数据的增删查改
Select\delete\update\insert\call
- show databases; //显示所有数据名
- use mydb; //打开“mydb”这个数据库
- show tables; //显示当前数据库的所有表名
- select * from student; //显示student表中的所有记录
- select * from student where saddress='湖南长沙';
//显示(查询)saddress='湖南长沙'的所有记录
- select sno,sname,saddress from student; //显示student表中的指定字段
- insert into student values(8000,'Jack','1995-1-1','中国北京');
//向student表插入一条记录
- delete from student where sname='heihei'; //删除指定行
- update student set sname='Rose' where sno='1009';
- insert into student (sno,sname) values ('8001','aaaa');//只插入指定的列
※※※DDL – 数据定义语言Data Definition Language
建库、建表、设置约束等:
create\drop\alter
数据类型的知识点: char和varchar都可以用来定义字符类型的字段,区别:
char(15) ---固定长度15,如果赋值时只赋一个字符'a',那么里面数据是:1个字符'a' 加 14个空格。-----类似Java当中的字符数组。
varchar(15)----可变长的char数组,如果赋值时只赋一个字符'a',那么里面数据就只有一个字符'a'。---类似Java当中的String
create table sstud(
sno varchar(15) not null primary key,
sname varchar(15) not null,
age int,
saddress varchar(30)
);
- desc sstud; //显示表结构1
- insert into sstud values('1001','Jack',25,'changsha');
//显示表结构1
- show create table sstud;//查看详细信息
- alter table sstud add column aa int;//修改表结构--添加一列
- alter table sstud drop column aa;//修改表结构--删除一列
- drop table sstud;//删除stud表
- drop database aa;//删除数据库
导入脚本:
- source D:/JavaTraining2015_2/sstud.sql
导出脚本:
- mysqldump -uroot -p1234 --databases aa > d:/a/dd.sql
三、SQLyog Ultimate软件下操作mysql数据库
CREATE DATABASE sstud CHARSET utf8;//创建数据库并且设置编码
//创建数据库表
CREATE TABLE sstud(
sno VARCHAR(10) PRIMARY KEY NOT NULL,//设置主键
sname VARCHAR(10) NOT NULL,//不为空
sage INT DEFAULT 20,//设置默认值
saddress VARCHAR(30));
插入操作:
- INSERT INTO sstud VALUES('1001','Jack',21,'湖南城市学院');//插入一行表记录
- INSERT INTO sstud VALUES('1010','唐僧',5,'武侠');
- INSERT INTO sstud(sno,sname,saddress)
VALUES('1002','张三','湖南益阳');//插入指定列一行行表记录
修改操作
- ALTER TABLE note CHANGE node note INT; //更改列名字
- ALTER TABLE sstud ADD COLUMN ssex CHAR(1) DEFAULT
'男';//为sstud表增加ssex一列 一个字符,默认值为男
- ALTER TABLE sstud ADD sex CHAR(1);
- ALTER TABLE sstud DROP COLUMN ssex;为sstud表删除ssex一列
- ALTER TABLE sstud DROP sex;
更新操作
//判断值时,NULL是不能用“=”号判断,而应该用IS
//不能使用: UPDATE TABLE sstud SET ...
- UPDATE sstud SET sage=50 WHERE sage IS NULL;//为sage为NULL的设置为50
- UPDATE sstud SET sname='王建安',saddress='永州' WHERE
sno='1007';修改sno为1007的sname为王建安,saddress为永州
删除操作:
- DROP DATABASE sstud;//删除数据库
- DROP TABLE sstud;//删除表sstud
- DELETE FROM sstud WHERE sname='Tom';删除sname=Tom的行记录
查询操作
- SELECT * FROM sstud;//查询sstud表的信息
- SELECT sno AS 编号,sname AS 姓名 ,sage AS年龄,saddress AS 地址 FROM
sstud;//给表的字段进行命名(别名)
//SELECT 复杂查询
//WHERE子句 --BETWEEN子句 和 IN子句
- SELECT * FROM sstud WHERE sage>22;//选择sstud表年龄大于22的
- SELECT * FROM sstud WHERE sage>20 AND
sage<25;//选择sstud表年龄大于20并且小于22岁的
- SELECT * FROM sstud WHERE sage=21 OR
sage=23;//选择sstud表年龄等于21或者年龄等于23岁的
- SELECT * FROM sstud WHERE sage BETWEEN 20 AND
25;//选择sstud表年龄介于20到25之间的
- SELECT * FROM sstud WHERE sage IN(23,25,500);//选择sstud表年龄是23,25或者500的
- SELECT * FROM sstud WHERE sage NOT
IN(23,25,500);//选择sstud表年龄不是是23,25或者500的
//模糊查询LIKE '%'匹配所有 '_'匹配单字符 ---必须和LIKE共同使用
- SELECT * FROM sstud WHERE sname LIKE '张%';匹配所有sname是张开头的姓名
- SELECT * FROM sstud WHERE sname LIKE '张_';匹配所有sname是张开头,并且长度为2的字符
- SELECT * FROM sstud WHERE sname LIKE '张__';匹配所有sname是张开头,并且长度为3的字符
- SELECT * FROM sstud WHERE sname LIKE '%张%' AND
sage>22;匹配所有sname包含张的,并且sage大于23的记录行
知识点:
SELECT 字段 FROM 表名 WHERE 条件 AND 条件 OR 条件
UPDATE tableName SET .. WHERE 条件
DELETE FROM tableName WHERE 条件
创建一个视图
- CREATE VIEW aview AS SELECT * FROM sstud WHERE
sage>20;//创建一个sage>20的视图
- SELECT * FROM aview WHERE sname LIKE '张%';//查询视图信息
- UPDATE aview SET sname='wang' WHERE sno='1003';//修改视图信息
//聚合函数
- SELECT COUNT(*) FROM sstud;//查找sstud的行数
- SELECT COUNT(*) AS sumROW FROM sstud;//统计总行数
- SELECT COUNT(0) AS sumNum FROM sstud;
- SELECT COUNT(saddress) AS sumAddress FROM
sstud;//统计saddress这一列中,内容为非NULL的行数
- SELECT AVG(sage) AS avgAge FROM sstud WHERE sage IS NOT
NULL;//求age不为空的行的平均值
- SELECT ROUND(AVG(sage)) AS roundAvgAge FROM sstud;//求sage的平均值的取整
- SELECT SUM(sage) AS sumAge FROM sstud;//求sage的总数
- SELECT MAX(sage) AS sumAge FROM sstud;//求sage的最大值
- SELECT MIN(sage) AS sumAge FROM sstud;//求sage的最小值
//选择年龄最小的那个人的名字和年龄
- SELECT * FROM sstud WHERE sage=(SELECT MIN(sage) AS sumAge FROM
sstud);
- SELECT sname,sage FROM sstud WHERE sage IN ( SELECT MIN(sage) FROM
sstud ) ;
//DISTINCT --数据相同时只显示第一条(去除重复数据)
- SELECT DISTINCT * FROM sstud WHERE sage =( SELECT MIN(sage) FROM
sstud ) ;
//EXISTS函数
- SELECT * FROM sstud WHERE sage>30 AND EXISTS (SELECT * FROM sstud
WHERE saddress='武侠');//查年龄大于三十岁并且saddress有属于武侠的的sstud信息
//ORDER BY
- SELECT * FROM sstud ORDER BY sage ;//按年龄给表进行排序,默认是升序
- SELECT * FROM sstud ORDER BY sage DESC;//按年龄给表进行降序排序
//分组 GROUP BY
- SELECT * FROM sstud GROUP BY saddress;//按地址进行分组
- SELECT saddress AS 地址,SUM(sage)AS 年龄和 FROM sstud GROUP BY
saddress;//对每个地区的年龄进行总和
- SELECT saddress AS 地址,COUNT(*) AS 个数 FROM sstud GROUP BY saddress
;//对每个地区的人数进行计数
//固定搭配1: SELECT ... FROM ... WHERE ... ORDER BY ... ----ORDER BY子句要放在最后
//固定搭配2: SELECT ... FROM ... GROUP BY ... HAVING .... ----GROUP BY子句中的条件用的是HAVING (不能用WHERE)
- SELECT * FROM sstud WHERE sage BETWEEN 20 AND 30 ORDER BY sage DESC;
//选择你年龄在20-30的进行降序排列
- SELECT saddress AS 地址,AVG(sage) FROM sstud GROUP BY saddress HAVING
AVG(sage)>20;//选择你年龄大于20的,对saddress进行分组
- SELECT saddress AS 地址,AVG(sage) AS avgAge FROM sstud GROUP BY 地址
HAVING avgAge>20;//这是利用了别名
//字符串处理函数
LENGTH(str) - 求字符串长度
LTRIM(str) - 去掉左边的空格
RTRIM(str) - 去掉右边的空格
LEFT(str,n); - 从左边取出n个字符
RIGHT(str,n); - 从右边取出n个字符
SUBSTRING(str,BEGIN,END) -返回子串
REVERSE(str) –返回颠倒的字符串
LOWER(str) - 转成小写
UPPER(str) - 转成大写
CONCAT(Str,str…..)串联字符串。
INSTR(str,s) – 返回s在str中出面的位置,没有则返回0
- SELECT * FROM sstud WHERE TRIM(sname)='Jack';//去调空格
- SELECT * FROM sstud WHERE
LEFT(saddress,2)='湖南';//选择地址是湖南开头的信息相当于SELECT * FROM sstud WHERE
saddress LIKE '湖南%';
- SELECT REVERSE(sname) FROM sstud;//查询名字的反序
- SELECT UPPER(sname) AS 姓名 FROM sstud;//查询名字的大写
- SELECT LOWER(sname) AS 姓名 FROM sstud;//查询名字的小写
- SELECT CONCAT(sname,sage,saddress) FROM sstud;//串联字符串。
- SELECT sname ,INSTR(sname,'a') AS ins FROM
sstud;//返回s在str中出面的位置,没有则返回0
四、用myelipse对mysql进行操作
//连接数据库步骤
//1.加载驱动,把mysql连接桥放在lib目录下
Class d=Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://127.0.0.1:3306/sstud?useUnicode=true&characterEncoding=utf-8";//采用的是默认编码
//简历连接
Connection con=DriverManager.getConnection(url, "root", "1234");
//获得语句对象
Statement st= con.createStatement();
//String sql="INSERT INTO sstud(sno,sname,sage,saddress,ssex) VALUES('1013','Big',25,'自己人','男');";
//String sql="DELETE FROM sstud WHERE sno='1013';";
String sql="UPDATE sstud SET saddress='中国北京' WHERE sno='1013'";
//增删改用execute();函数
st.execute(sql);
String sql2="SELECT * FROM sstud ;";
//查询用 st.executeQuery(sql);
ResultSet rs=st.executeQuery(sql2);
while(rs.next()){//从表头开始
String sno=rs.getString(1);
String sname=rs.getString("sname");
String saddress=rs.getString("saddress");
String ssex=rs.getString("ssex");
String sage=rs.getString("sage");
System.out.println(sno+","+sname+","+sage
+","+saddress+","+ssex);
}