MySQL学习笔记
Posted 二十四桥明月夜33
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL学习笔记相关的知识,希望对你有一定的参考价值。
一、概述
1、数据库、数据库系统、数据库管理系统之间的关系?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
数据库管理系统:用来管理数据及数据库的系统
数据库系统:数据库、数据库管理系统、硬件、操作人员的合在一起的总称。
数据库系统包含数据库管理系统、数据库及数据库开发工具所开发的软件(数据库应用系统)。
二、mysql的下载安装
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
与其他的大型数据库LAMP例如 Oracle、DB2、SQL Server等相比,MySQL 自有它的不足之处,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于 MySQL是开放源码软件,因此可以大大降低总体拥有成本
下面就Mysql的linux与Windows版本的安装分别介绍:
windows版本
1、下载
网址 http://dev.mysql.com/downloads/mysql/ 下载完成后一路点点点就ok
2、添加环境变量
将刚刚安装的mysql的bin目录路径加入环境变量 环境变量:计算机->右键(属性)->高级系统设置->环境变量-> 修改系统变量中的path,把mysql的bin目录路径加上即可(注意分号)
3、将mysql制作成windows服务
命令行输入 mysqld --install 移除服务: mysqld --remove 注册成服务后,以后启动和关闭就可使用以下命令 启动: net start mysql 关闭: net stop mysql
4、mysql初始化
命令行输入如下命令
mysqld --initialize-insecure
5、启动mysql服务
命令行输入:
mysqld
6、连接mysql
#命令行输入: mysql -u root -p #提示输入密码,由于刚初始化并未设置密码,直接敲回车
linux版本
这个就比较省事了,一条命令搞定
下载安装:
yum install mysql-server
启动服务
mysql.server start
连接mysql
mysql -u root -p
三、数据库操作
1、显示数据库
SHOW DATABASES;
默认数据库
mysql - 用户权限相关数据 test - 用于用户测试数据 information_schema - MySQL本身架构相关数据
2、创建数据库
#utf-8 CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; #如CREATE DATABASE mytest DEFAULT CHARSET utf8 COLLATE utf8_general_ci; #gbk CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;#如CREATE DATABASE mytest DEFAULT CHARSET gbk COLLATE gbk_chinese_ci;
3、使用数据库
USE 数据库名 #如use mytest
4、查看表
show tables
由于未创建表,现在显示空表
5、用户管理与授权
创建用户
命令: CREATE USER \'username\'@\'host\' IDENTIFIED BY \'password\'; 说明: username:你将创建的用户名 host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符% password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器 ex: CREATE USER \'xiaohua\'@\'localhost\' IDENTIFIED BY \'123456\'; CREATE USER \'taiyang\'@\'192.168.1.110_\' IDENDIFIED BY \'123456\'; CREATE USER \'xiaozhu\'@\'%\' IDENTIFIED BY \'123456\';
授权
命令: GRANT privileges ON databasename.tablename TO \'username\'@\'host\' 说明: privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL databasename:数据库名 tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.* ex: GRANT SELECT, INSERT ON mytest.user TO \'xiaohua\'@\'%\'; GRANT ALL ON *.* TO \'xiaohua\'@\'%\';
设置用户密码
命令 SET PASSWORD FOR \'username\'@\'host\' = PASSWORD(\'newpassword\'); 如果要修改当前用户 SET PASSWORD = PASSWORD("newpassword"); ex: SET PASSWORD FOR \'xiaohua\'@\'%\' = PASSWORD("123456");
撤销用户权限
命令: REVOKE privilege ON databasename.tablename FROM \'username\'@\'host\'; 说明: privilege, databasename, tablename:同授权部分 ex: REVOKE SELECT ON *.* FROM \'xiaohua\'@\'%\';
删除用户
命令: DROP USER \'username\'@\'host\';
数据表操作
创建表
命令: CREATE TABLE table_name (column_name column_type); 如: create table student( id int not null auto_increment primary key, name varchar(20) not null, age int not null )engine=innodb charset=utf8; 说明: 1、如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。 2、AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。 3、PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。 4、ENGINE 设置存储引擎,CHARSET 设置编码。
删除表
命令:
drop table 表名
清空表:
delete from 表名 truncate table 表名 drop table 表名
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
TRUNCATE,DELETE,DROP放在一起比较:
TRUNCATE TABLE:删除内容、释放空间但不删除定义。
DELETE TABLE:删除内容不删除定义,不释放空间。
DROP TABLE:删除内容和定义,释放空间。
修改表
添加列:alter table 表名 add 列名 类型 删除列:alter table 表名 drop column 列名 修改列: alter table 表名 modify column 列名 类型; -- 类型 alter table 表名 change 原列名 新列名 类型; -- 列名,类型 添加主键: alter table 表名 add primary key(列名); 删除主键: alter table 表名 drop primary key; alter table 表名 modify 列名 int, drop primary key; 添加外键:alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段); 删除外键:alter table 表名 drop foreign key 外键名称 修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000; 删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
表内容操作
1、增
命令: INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); 如: insert into student(name,age) values(\'豆豆\',8);
2、删
命令: DELETE FROM table_name [WHERE Clause] 说明:WHERE Clause后面跟的是条件 如: delete from student where age<18; #从student表中删除年龄小于18的数据
3、改
命令: UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause] 说明: 1、你可以同时更新一个或多个字段。 2、你可以在 WHERE 子句中指定任何条件。 3、你可以在一个单独表中同时更新数据。 如: update student set name=\'xiaohua\',age=18 where age<18;
4、 查
命令: SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT N][ OFFSET M] 说明: 1、查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用2、WHERE语句来设定查询条件。 3、SELECT 命令可以读取一条或者多条记录。 4、你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据 5、你可以使用 WHERE 语句来包含任何条件。 6、你可以使用 LIMIT 属性来设定返回的记录数。 7、你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。 如: 查看student表中age等于18的学生的姓名 select name from student where age=18;
5、其他
a、条件 select * from 表 where id > 1 and name != \'xiaohua\' and age = 18; select * from 表 where id between 5 and 16; select * from 表 where id in (11,22,33) select * from 表 where id not in (11,22,33) select * from 表 where id in (select nid from 表) b、通配符 select * from 表 where name like \'xiao%\' - xiao开头的所有(多个字符串) select * from 表 where name like \'xiaohu_\' - xiaohu开头的所有(一个字符) c、限制 select * from 表 limit 5; - 前5行 select * from 表 limit 4,5; - 从第4行开始的5行 select * from 表 limit 5 offset 4 - 从第4行开始的5行 d、排序 select * from 表 order by 列 asc - 根据 “列” 从小到大排列 select * from 表 order by 列 desc - 根据 “列” 从大到小排列 select * from 表 order by 列1 desc,列2 asc - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序 e、分组 select num from 表 group by num select num,nid from 表 group by num,nid select num,nid from 表 where nid > 10 group by num,nid order nid desc select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid select num from 表 group by num having max(id) > 10 特别的:group by 必须在where之后,order by之前 f、连表 无对应关系则不显示 select A.num, A.name, B.name from A,B Where A.nid = B.nid 无对应关系则不显示 select A.num, A.name, B.name from A inner join B on A.nid = B.nid A表所有显示,如果B中无对应关系,则值为null select A.num, A.name, B.name from A left join B on A.nid = B.nid B表所有显示,如果B中无对应关系,则值为null select A.num, A.name, B.name from A right join B on A.nid = B.nid g、组合 组合,自动处理重合 select nickname from A union select name from B 组合,不处理重合 select nickname from A union all select name from B
基本数据类型
MySQL的数据类型大致分为:数值、时间和字符串
数值类型
时间及日期类型
字符串类型
以上是关于MySQL学习笔记的主要内容,如果未能解决你的问题,请参考以下文章