黑马程序员技术交流社区

标题: sql语言自我学习与整理 [打印本页]

作者: 15572805799    时间: 2016-12-6 13:43
标题: sql语言自我学习与整理
#1.数据库概念
- 数据库就是用来储存和管理数据的仓库

#2.数据库的优点
- 可储存大量的数据
- 方便检索
- 保持数据的一致性,完整性
- 安全,可共享
- 通过组合分析,可产生新的数据

#3.数据库的发展历程
- 没有数据库,使用磁盘文件储存数据
- 层次结构模型数据库
- 网状结构模型数据库
- 关系结构模型数据库:使用二维表格来储存数据
- 关系-对象※模型数据库
- MySQL就是关系型数据库

#4.常见的数据库
- Orcale:神谕,甲骨文公司(收费的大型数据库产品,市场占有率最高)
- DB2:IBM(收费,银行系统)
- SQLServer:微软,收费的中型数据库,c# , .net等语言使用.
- Sybase:赛尔斯(要被淘汰),提供了非常专业数据建模的工具PowerDesign.
- SQLite:嵌入式的小型数据库,应用在手机端.
- MySQL:开源免费的,甲骨文收购sun收购mysql

#5.理解数据库
- RDBMS=管理员(manager)+仓库(database)
- database=N个table
- table:
        - 表结构:定义表的列名和列类型
        - 表记录:一行一行的记录的数据

- 我们现在所说的数据库泛指"关系型数据库管理系统"RDBMS-Relational database Manager System ,即数据库服务器,它是操作和管理数据库的大型软件.
- 当我们安装了数据库服务器后,就可以在数据库服务器中创建数据库,每个数据库中包含多张表格
- 数据库表就是一个多行多列的表格,在创建表示,需要指定表的列数,以及列名称.列类型等信息.而不用指定表格的行数,行数是没有上限的.
- 当把表格创建好后.可以向表格中添加数据.向表格添加数据时一行为单位的.

- java中的类,和数据表的对应关系
        - 类->表
        - 类字段,成员变量->列(column)
        - 对象->表中的每行记录(row)
        - 用户需要数据就创建对象,不需要就销毁对象,不然浪费资源.
       

#6.应用程序和数据库
- 应用程序使用数据库完成多数据的储存!

##2.MySQL目录结构
- MySQL的数据存储目录为data,data目录通常在C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data位置。在data下的每个目录都代表一个数据库。
- MySQL的安装目录下:
        - bin目录中都是可执行文件;
        - my.ini文件是MySQL的配置文件;

#7.基本命令
##1.启动和关闭MySQL服务器
- 启动:net start mysql;
- 关闭:net stop mysql;
- 就是启动了mysqld.exe服务器程序

##2.客户端登陆退出MySQL
> 在启动MySQL服务器后,我们需要使用管理员登陆MySQL服务器,然后对服务器进行操作.
>
- 在登陆成功后,打开Windows任务管理器,会有一个mysqlde.exe的进程,所以mysql.exe是客户端程序

    登陆MySQL需要使用MySQL的客户端程序:mysql.exe
        登陆:mysql -u root -p 123 -h localhost;
                * -u:后面的root是用户名,这里使用是超级管理员root;
                * -p:后面的是密码,这是在安装MySQL是就以已经指定了的密码
                * -h:后面给出的localhost是服务器的主机名,它是可以省略的
                * 退出:quit或exit


#8.SQL语句
##1.SQL语句的概念
> SQL(Structure Query Language)是"结构化查询语言",它是对关系型数据库的操作语言,它可以应用到所有关系型数据库中,mysql,Orcale,SQL Server等.SQ标准(ANSI/ISO)有:
>
- SQL-92:1992年发布的SQL语言标准
- SQL:1999:1999年发布的SQL语言标准
- SQL:2003:2003年发布的SQL语言标准
- 新的版本中总要有一些语法的变化.不同时期的数据库对不同标准做了实现
- 虽然在SQL可以用在所有关系型数据库中,但是许多数据库还都有标准之后的一些语法,我们可以称之为:方言.方言是独有,其他数据库都不支持.

##2.语法要求
- SQL语句可以单行或者多行书写,以分号结尾
- 可以用空格和缩进来增强语句的可读性
- 关键字不区别大小写,建议使用大写
- /**/注释



##3.SQL分类
- DDL,定义语言,用来定义数据库对象:数据库,表,列等.create,alter,drop
- DML,操作语言,表中的记录更新,inset,delete,update
- DCL,控制语言,定义数据库的访问权限和安全级别及创建用户.
- DQL,查询数据语言,select

##4.数据类型
- int:整型
- double:浮点型
- varchar:var(可变),可变字符型
- data:日期类型,只有年月日,没有时分秒
- char:

##5.创建数据库
    create database 数据库名
        create database 数据库名 character set 字符集 (字符集默认已设置好)
        show databases        查看所有数据库
        drop database 数据库名        //删除数据库

##6.创建修改数据表

    create table 表名(
                列名1 数据类型 约束(可选),
                列名2 数据类型 约束,
                ....
        );
       
        create table users (
                uid INT,
                uname VARCHAR(20),
                uaddress VARCHAR(200)
        );

> 约束:限制列能写什么样的数据(主键约束,非空约束,唯一约束,...)

    show tables; 查看数据库中的所有表
        desc 表名;        查看表结构
        drop 表名;        删除表
        ******************************************
        alter table 表名 add 列名 数据类型 约束; //添加列,添加字段
        alter table 表名 modify 列名 数据类型 约束; //修改列,修改字段
        alter table 表名 change 旧列名 新列名 数据类型 约束;//修改列名
        alter table 表名 drop 列名
        rename table 表名 to 新名
        alter table 表名 character set 字符集;//修改字符集

##7.添加数据

        insert into 表名(列名1,列名2,列名3) values (值1,值2,值3);
        insert into 表名(列名2,类名3) values (值2,值3);        省略主键列
        insert into 表名 values (全列值);        不能省略主键值

        insert into 表名 (列名1,列名2,列名3) values (值1,值2,值3),(值1,值2,值3);                //批量写入

##8.更行数据

    update 表名 set 列1=值1,列2=值2        不加条件则修改表中全部的数据

    update 表名 set 列1=值1,列2=值2 while 条件

        /*
        修改条件的写法:
        id = 6;
        id <> 6        ;                不等于6
        id <=6;
        and                        //java:&&
        or                        //java:||
        not                        //java:!
        id in (1,3,4,5,6);        包含,not in 不包含

##9.删除数据

    delete from 表名 where 条件
        truncate table 表名

##10.查询

    查询指定列的数据
        select 列名1,列名2 from 表名       
        select * from 表名
        select distinct 列名 from 表名                //查询并去除重复记录
        select 列名 as '新名' from 表名           //查询重新命名列
        select 列名+1000 as 'sum' from 表名        //查询中计算

       
        ***********************************************
        条件查询:
        between and         //包头包尾
        in(set)                        //集合
        like 通配符        :  % 多个字符,  _一个字符                模糊查询
        is (not) null :判断是够为空
        and
        or
        not
       
        ***********************************************
        查询,对结果集进行排序

        order by 列名 [asc][desc]         [升序][降序]

        纵向查询,用集合函数
        sum
        max
        count
        min
        AVG
       
        *******************************************
        分组查询
        group by 被分组的列名,必须跟随聚合函数,要出现在select 选择列的后面
        select sum(zmoney),zname from zhangwu group by zname

        select sum(zmoney)as'getsum',zname from zhangwu where zname like '%支出%' group by zname order by getsum desc having getsum>5000
                                //having ,是分组后再过滤
                                //where,是分组前过滤
       
#11.limit
> limit用来限定查询结果的起始行,以及总行数
>
- `select * from sort limit 0,5;`
-
> 一页的记录数是:10行
> 查询第三页
>
- `select * from sort 20,10;`
- `(当前页-1)*每页记录数`

#12.创建用户
- CREATE USER 用户名@IP地址 IDENTIFIED BY '密码';
- 授权
        - GRANT 权限1,...,权限n ON 数据库.* TO 用户名@IP地址
       


- 撤销授权
        - REVOKE 权限1,...,权限n ON 数据库.* FROM  用户名@IP地址

- 查看权限
        - SHOW GRANT FOR 用户名@IP地址

- 删除用户
        - DROP USER 用户名@IP地址
       
作者: xyy222    时间: 2016-12-6 23:02
赞..............




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2