zoukankan      html  css  js  c++  java
  • MYSQL 基础

    http://www.cnblogs.com/wupeiqi/articles/5713315.html

    http://www.cnblogs.com/wupeiqi/articles/5713323.html

    http://www.cnblogs.com/wupeiqi/articles/5729934.html

    http://www.cnblogs.com/wupeiqi/articles/5716963.html

    一、数据库管理系统DBMS
    软件

    bin
    config
    db (保存数据)
    - admin
    - 123asdfasd.txt {用户名, 密码,类型...}
    - 123asdfasdb.txt{用户名, 密码,类型...}
    - course
    - school
    src

    写程序:
    a. 数据库在本地
    1、找到目录
    2、添加数据
    b. 数据库在远程
    1、socket连接上远程机器
    2、socket发送{命令} # add|asdfasdfadf
    做些什么????
    a.
    A,程序
    程序,socket客户端
    B,数据
    socket服务端
    C,制作一套规则
    add|阿德法撒旦发射点发
    delete|asdfasdf
    ....
    D,socket客户端和服务端用户认证,授权,限制

    有人搞了一套软件:

    socket客户端
    B,数据
    socket服务端
    C,制作一套规则
    add|阿德法撒旦发射点发
    delete|asdfasdf
    ....
    D,socket客户端和服务端用户认证,授权,限制

    -- SqlServer(收费),Oracle,sqlite,access...,,,, MySQL

    MySQL,SqlServer(收费),Oracle,sqlite,access..

    二、下载安装

    1、下载
    2、解压到任意目录
    3、服务器端运行起来
    mysqld

    4、客户端连接

    省事:
    将mysql服务端制作成一个Windows服务
    net start mysql
    net stop mysql
    ===,打开服务管理,直接...

    三、MySQL数据库

    1、概念

    数据库, 文件夹
    数据库表, 文件
    数据行, 文件中的一行数据

    2、
    启动服务器:
    net start mysql

    C:mysql-5.7.16-winx64mysql-5.7.16-winx64mysql

    mysql.server start

    /etc/init.d/mysql start


    客户端连接:
    C:mysql-5.7.16-winx64mysql-5.7.16-winx64mysql -u root -p


    初试:

    show databases; # 查看当前Mysql都有那些数据,根目录都有那些文件夹

    create database 数据库名; # 创建文件夹

    use 数据库名; # 使用选中数据库,进入目录

    show tables; # 查看当前数据库下都有那些表,

    create table 表名(nid int,name varchar(20), pwd varchar(64)); # 创建数据库表

    select * from 表名; # 查看表中的所有数据

    insert into 表名(nid,name,pwd) values(1,'alex','123'); # 插入数据

    -- select * from 表名;

    3、用户授权
    用户管理特殊命令:
    创建用户
    create user '用户名'@'IP地址' identified by '密码';
    删除用户
    drop user '用户名'@'IP地址';
    修改用户
    rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';;


    修改密码
    set password for '用户名'@'IP地址' ='新密码'

    mysql> set password for 'root'@'localhost' ='111111';



    c:mysql-5.7.16-winx64mysql-5.7.16-winx64inmysql -u

    权限:
    默认,什么都没有

    grant 权限 on 数据库.表 to '用户'@'IP地址' -- 授权

    select,查


    数据库.表
    test.tb1
    test.*
    *.*

    '用户'@'IP地址'
    xiaohu@localhost

    mysql> grant all privileges on *.* to liyinchun@192.168.132.127;
    ##给liyinchun 用户开通所有的权限。

    ===========重要,远程连接=============

    ====================
    a. 解放双手,在重复操作文件,直接将命令发送给mysql服务端,自动操作
    b. 数据库,表,行
    c. 开户和授权
    密码,必须用 引号 ''
    其他,推荐用

    d. 客户端连接(MySQL提供的客户端)
    1、
    mysql -u root -h 192.168.1.1 -p
    # 输入密码

    2、

    初试:

    show databases; # 查看当前Mysql都有那些数据,根目录都有那些文件夹

    create database 数据库名; # 创建文件夹

    use 数据库名; # 使用选中数据库,进入目录

    show tables; # 查看当前数据库下都有那些表,

    create table 表名(nid int,name varchar(20), pwd varchar(64)); # 创建数据库表

    select * from 表名; # 查看表中的所有数据

    insert into 表名(nid,name,pwd) values(1,'alex','123'); # 插入数据

    -- select * from 表名;

    3、 ;;;;;;;;;;


    4、 SQL语句

    数据库级别
    SHOW DATABASES;

    CREATE DATABASE 数据库名称;
    CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

    USE 数据库名称;

    drop database 数据库名称;

    表级表
    show tables;
    desc tb1; 查看表的具体属性

    *** create table tb1(nid int, name varchar(10));
    # 事务,原子操作,回滚

    a. 默认值
    b. 是否可以为空
    c. 自增列(一张表只能有一个,数字,必须是索引-主键)
    d. 主键索引:

    一张表只能有一个主键,唯一不能重复,不能为null,- 一般情况下,自增列设置主键
    1,2,3,4,5,6
    唯一索引:
    可以为null,一张表可以有多个唯一列
    1,2,3,4,5,6,null

    -- 约束
    -- 索引,加速查找

    create table xxx(
    nid.... primary key,
    ....
    )

    create table student(
    name varchar(10) not null,
    num int not null,
    age int,
    gender int,
    primary key (name,num)
    )
    约束:
    name num age
    a 88 9
    a 99 9
    a 88 0

    # 主键:
    不能为null,
    不能重复,
    一张表只有一个主键(可以多列组成主键)
    # 一般用法:
    nid int auto_increment primary key,

    # 请在本地创建表:
    CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    use 数据库名称;

    create table tb5(
    nid int not null auto_increment primary key,
    name varchar(16),
    age int default 19
    )engine=innodb default charset=utf8;

    e. 外键foreign key,一对多

    两张表建立约束

    -- 约束
    -- foreign key,一对多



    f. 数据类型:数值、时间和字符串
    数值:
    二进制:
    bit 二进制
    整数:
    tinyint
    smallint
    int
    bigint
    - 范围不一样

    小数:
    decimal --精确的

    -- 985412154521321.857541245421245845
    FLOAT -- 98541215458798465465749465465465421321.857541245420000000
    -- 985412154000000000000000000000000000000000000000000000000
    DOUBLE -- 9854121544587984654657494654654654000000000000000000000000

    字符串:
    # 定长
    char
    create table tb13(n char(7),b int, c int)
    insert ssss
    # 查找速度快,浪费空间


    # 变长
    varchar
    create table tb13(n varchar(7),b int, c int)
    insert ssss
    insert sssss
    insert sssss5
    # 查获找速度慢,节省空间
    text
    mediumtext
    longtext
    二进制数据:
    TinyBlob、Blob、MediumBlob、LongBlob
    # 上传文件
    # Blob,强制二进制方式
    # varchar(65), "D:av.avi" 将上传的文件保存在硬盘, D:av.avi ;

    时间:
    DATE
    YYYY-MM-DD(1000-01-01/9999-12-31)
    # 1996-12-12 18:45

    TIME
    HH:MM:SS('-838:59:59'/'838:59:59')

    YEAR
    YYYY(1901/2155)

    DATETIME

    YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)

    TIMESTAMP

    YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

    enum
    单选

    集合
    多选

    create table tb13(num decimal(6,2)) #8888.18

    drop table tb1; # 直接表删除

    delete from tb1; # 清空表内容
    truncate table tb1; # 清空表内容,速度快,自增回到远点

    select * from tbl;

    数据行级别 *****

    select * from tbl;



    # 增
    insert into tb1(name,age) values('alex', 18);
    insert into tb1(name,age) values('alex', 18),('eric', 19),('eric', 19);
    create

    # 删
    delete from 表
    delete from 表 where id=1 and name='alex'

    # 改
    update 表 set name = 'alex' where id>1


    # 查
    select * from 表
    select * from 表 where id > 1
    select nid,name,gender as gg from 表 where id > 1

    # 其他

    连表操作:★★★★★★★
    # 连表
    select * form a,b where a.x = b.o
    mysql> select * from love,live where love.nid = live.nid;

    # join,
    a. left join
    select * from a LEFT JOIN b ON a.x = b.o

    b. inner join ,永远不会出现Null
    select * from a inner JOIN b ON a.x = b.o



    #组合
    组合,自动处理重合
    select nickname
    from A
    union
    select name
    from B

    组合,不处理重合
    select nickname
    from A
    union all
    select name
    from B


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



    #分组
    group by
    mysql> SELECT item FROM live GROUP BY item;
    #聚合函数
    mysql> select nid, max(item),min(item),sum(item),count(item) from live group by item;
    最大 最小 和 次数

    select AVG(cid) FROM course   ### avg 求平均

    查询某个段区间 

    SELECT *
    FROM
    SystemEvents
    WHERE  ReceivedAt BETWEEN'2018-06-20 09:51:00' AND '2018-06-20 10:01:00'


    mysql> select max(nid),item from live group by item having max(nid) > 3;
    # 在对 聚合条件进行删选的时候就不能用where了 需要用 having !

    #限制
    select * from 表 limit 5; - 前5行
    select * from 表 limit 4,5; - 从第4行打印5行
    select * from 表 limit 5 offset 4 - 从第4行打印5行 (和上面方法一样,不过这种用的多)

    ===========今日内容整理 ================
    1、数据库概念,很多
    2、数据库,表,行
    3、启动服务器端,启动客户端连接服务端
    - 用户管理
    - 权限管理
    4、SQL语句
    数据库操作 *
    表操作**
    - 是否可以为空
    - 默认值
    - 主键
    - 外键
    - 自增
    - 数据类型(char,varchar)
    数据行 ******:
    增删改查
    其他:
    limit offset
    left join
    order by
    group by ,having max,min,sum,count
    # 条件,模糊,.....

    添加列: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;

    外键,一个特殊的索引,只能是指定内容
    creat table color(
    nid int not null primary key,
    name char(16) not null
    )

    create table fruit(
    nid int not null primary key,
    smt char(32) null ,
    color_id int not null,
    constraint fk_cc foreign key (color_id) references color(nid)
    )

    外键




    create table fuwuzhongxing(nid int not null auto_increment primary key,
    name varchar(10),age int, class int default 4)engine=innodb default charset=utf8;

  • 相关阅读:
    Codeforces 177G2 Fibonacci Strings KMP 矩阵
    Codeforces Gym100187C Very Spacious Office 贪心 堆
    Codeforces 980F Cactus to Tree 仙人掌 Tarjan 树形dp 单调队列
    AtCoder SoundHound Inc. Programming Contest 2018 E + Graph (soundhound2018_summer_qual_e)
    BZOJ3622 已经没有什么好害怕的了 动态规划 容斥原理 组合数学
    NOIP2016提高组Day1T2 天天爱跑步 树链剖分 LCA 倍增 差分
    Codeforces 555C Case of Chocolate 其他
    NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
    NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp
    NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
  • 原文地址:https://www.cnblogs.com/th-lyc/p/8968607.html
Copyright © 2011-2022 走看看