MYSQL(一)

mysql简介
一、什么是数据库 ?html

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代之后,数据管理再也不仅仅是存储和管理数据,而转变成用户所须要的各类数据管理的方式。数据库有不少种类型,从最简单的存储有各类数据的表格到可以进行海量数据存储的大型数据库系统都在各个方面获得了普遍的应用。mysql

主流的数据库有:sqlserver,mysql,Oracle、SQLite、Access、MS SQL Server等,本文主要讲述的是mysqllinux

二、数据库管理是干什么用的?sql

a. 将数据保存到文件或内存
b. 接收特定的命令,而后对文件进行相应的操做
PS:若是有了以上管理系统,无须本身再去建立文件和文件夹,而是直接传递 命令 给上述软件,让其来进行文件操做,他们统称为数据库管理系统(DBMS,Database Management System)数据库

mysql安装
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最经常使用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。windows

使用mysql必须具有一下条件数据结构

  a. 安装MySQL服务端
  b. 安装MySQL客户端
  b. 【客户端】链接【服务端】
  c. 【客户端】发送命令给【服务端MySQL】服务的接受命令并执行相应操做(增删改查等)
一、下载地址:http://dev.mysql.com/downloads/mysql/架构

二、安装socket

windows安装请参考:http://www.cnblogs.com/lonelywolfmoutain/p/4547115.html
linux下安装:http://www.cnblogs.com/chenjunbiao/archive/2011/01/24/1940256.html
注:以上两个连接有完整的安装方式,安装完之后mysql.server start启动mysql服务ide

mysql操做
1、链接数据库

mysql -u user -p 例:mysql -u root -p
常见错误以下:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2), it means that the MySQL server daemon (Unix) or service (Windows) is not running.
退出链接:

QUIT 或者 Ctrl+D
2、查看数据库,建立数据库,使用数据库查看数据库: show databases;

复制代码

默认数据库:
    mysql - 用户权限相关数据
   test - 用于用户测试数据
    information_schema - MySQL自己架构相关数据

建立数据库:
create database db1 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # utf8编码
create database db1 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; # gbk编码
使用数据库: use db1;
复制代码
显示当前使用的数据库中全部表:SHOW TABLES;

3、用户管理

复制代码
建立用户
create user '用户名'@'IP地址' identified by '密码';
删除用户
drop user '用户名'@'IP地址';
修改用户
rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';;
修改密码
set password for '用户名'@'IP地址' = Password('新密码')
复制代码
注:用户权限相关数据保存在mysql数据库的user表中,因此也能够直接对其进行操做(不建议)

4、权限管理

mysql对于权限这块有如下限制:

View Code
对于数据库及内部其余权限以下:

数据库名.*           数据库中的全部
        数据库名.表          指定数据库中的某张表
        数据库名.存储过程     指定数据库中的存储过程
        *.*                全部数据库

对于用户和IP的权限以下:

用户名@IP地址         用户只能在改IP下才能访问
        用户名@192.168.1.%   用户只能在改IP段下才能访问(通配符%表示任意)
        用户名@%             用户能够再任意IP下访问(默认IP地址为%)

一、查看权限:

show grants for '用户'@'IP地址'
二、受权

grant 权限 on 数据库.表 to '用户'@'IP地址'
三、取消受权

revoke 权限 on 数据库.表 from '用户'@'IP地址'
受权实例以下:

复制代码
grant all privileges on db1.tb1 TO '用户名'@'IP'

grant select on db1.* TO '用户名'@'IP'

grant select,insert on . TO '用户名'@'IP'

revoke select on db1.tb1 from '用户名'@'IP'
复制代码
mysql表操做
一、查看表

show tables; # 查看数据库所有表

select * from 表名; # 查看表全部内容
二、建立表

create table 表名(
列名 类型 是否能够为空,
列名 类型 是否能够为空
)ENGINE=InnoDB DEFAULT CHARSET=utf8
来一个实例好详解

复制代码
CREATE TABLE tab1 (
nid int(11) NOT NULL auto_increment, # not null表示不能为空,auto_increment表示自增
name varchar(255) DEFAULT zhangyanlin, # default 表示默认值
email varchar(255),
PRIMARY KEY (nid) # 把nid列设置成主键
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
注:

默认值,建立列时能够指定默认值,当插入数据时若是未主动设置,则自动添加默认值
自增,若是为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)注意:一、对于自增列,必须是索引(含主键)二、对于自增能够设置步长和起始值
主键,一种特殊的惟一索引,不容许有空值,若是主键使用单个列,则它的值必须惟一,若是是多列,则其组合必须惟一。
三、删除表

drop table 表名
三、清空表内容

delete from 表名
truncate 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;
复制代码
对于上述这些操做是否是看起来很麻烦,很浪费时间,别慌!有专门的软件能提供这些功能,操做起来很是简单,这个软件名字叫Navicat Premium ,你们自行在网上下载,练练手,可是下面的即将讲到表内容操做仍是建议本身写命令来进行

五、基本数据类型

MySQL的数据类型大体分为:数值、时间和字符串

View Code
mysql表内容操做
表内容操做无非就是增删改查,固然用的最多的仍是查,并且查这一块东西最多,用起来最难,固然对于大神来讲那就是so easy了,对于我这种小白仍是很是难以灵活运用的,下面咱来一一操做一下

一、增

insert into 表 (列名,列名...) values (值,值,...)
insert into 表 (列名,列名...) values (值,值,...),(值,值,值...)
insert into 表 (列名,列名...) select (列名,列名...) from 表
例:
insert into tab1(name,email) values('zhangyanlin','zhangyanlin8851@163.com')
二、删

delete from 表 # 删除表里所有数据
delete from 表 where id=1 and name='zhangyanlin' # 删除ID =1 和name='zhangyanlin' 那一行数据
三、改

update 表 set name = 'zhangyanlin' where id>1
四、查

select * from 表
select * from 表 where id > 1
select nid,name,gender as gg from 表 where id > 1
查这块的条件太多太多我给列举出来至于组合还得看你们的理解程度哈

a、条件判断where

select * from 表 where id > 1 and name != 'aylin' and num = 12;
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、通配符like

select * from 表 where name like 'zhang%'  # zhang开头的全部(多个字符串)
select * from 表 where name like 'zhang_'  # zhang开头的全部(一个字符)

c、限制limit

select * from 表 limit 5;            - 前5行
select * from 表 limit 4,5;          - 从第4行开始的5行
select * from 表 limit 5 offset 4    - 从第4行开始的5行

d、排序asc,desc

select * from 表 order by 列 asc              - 根据 “列” 从小到大排列
select * from 表 order by 列 desc             - 根据 “列” 从大到小排列
select * from 表 order by 列1 desc,列2 asc    - 根据 “列1” 从大到小排列,若是相同则按列2从小到大排序

e、分组group by

复制代码
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以前

来自:http://www.javashuo.com/article/p-qnjtkjhh-k.html

相关文章
相关标签/搜索