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:删除内容和定义,释放空间。
truncate、delete、drop区别

修改表

添加列: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 * fromwhere id > 1 and name != 'xiaohua' and age = 18;
 
    select * fromwhere id between 5 and 16;
 
    select * fromwhere id in (11,22,33)
    select * fromwhere id not in (11,22,33)
    select * fromwhere id in (select nid from 表)
 
b、通配符
    select * fromwhere name like 'xiao%'  - xiao开头的所有(多个字符串)
    select * fromwhere 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 fromwhere 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的数据类型大致分为:数值、时间和字符串

数值类型

时间及日期类型

字符串类型

原文地址:https://www.cnblogs.com/qflyue/p/8385822.html