zoukankan      html  css  js  c++  java
  • Mysql

    一、数据库管理系统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..
                    服务端和客户端
                    mysql:  
                    
                        add|asdfasd
                    SqlServer:
                        a|asdfasdf
            
    二、下载安装
    
    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地址' = Password('新密码')
                
            c:mysql-5.7.16-winx64mysql-5.7.16-winx64inmysql -u
            
        权限:
            默认,什么都没有
            
            grant  权限 on 数据库.表 to  '用户'@'IP地址'      -- 授权
            
            select,查
            
            数据库.表
                test.tb1
                test.*
                *.*
            
            '用户'@'IP地址'
                xiaohu@localhost
                
            ===========重要,远程连接=============
            
    ====================
        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))engine=innodb default charset=utf8;
            # 事务,原子操作,原子性操作未完成会回到原来的状态innodb支持事务
            
            a. 默认值
            b. 是否可以为空
            c. 自增列(一张表只能有一个,数字,必须是索引-主键)
            d. 主键索引:
            
                 一张表只能有一个主键,唯一不能重复,不能为null,- 一般情况下,自增列设置主键
                 123456
               唯一索引:
                    可以为null,一张表可以有多个唯一列
                    123456null
                
                -- 约束
                -- 索引,加速查找
            
                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/2155DATETIME
    
                        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
        
        来自 <http://www.cnblogs.com/wupeiqi/articles/5713315.html> 
    
            # 其他
            
                连表操作:
                    # 连表
                    select * form a,b where a.x = b.o
                    
                    # join,
                        a. left join
                            select * from a LEFT OUTER JOIN b ON a.x = b.o
                        
                        b. inner join ,永远不会出现Null
                            select * from a inner JOIN b ON a.x = b.o

    Mysql  事务

    # 事务示例(事务内每条命令都要执行完才能通过,有一条出错,将会回滚到执行事务前)
    # START TRANSACTION;    # 事务开始命令
    #     DELETE from tb1;
    #     insert into tb2(name)values('seven');
    # COMMIT;              #事务结束命令
    
    # 完整创建事务
    # delimiter \
    #     create PROCEDURE p1(
    #         OUT p_return_code tinyint)
    #     BEGIN
    #         DECLARE exit handler for sqlexception     # 创建异常报错,
    #         BEGIN
    #             -- ERROR
    #             set p_return_code = 1;          # 事务不能执行完时执行该行命令
    #             rollback;
    #         END;
    #         DECLARE exit handler for sqlwarning
    #         BEGIN
    #             -- WARNING
    #             set p_return_code = 2;
    #             rollback;
    #         END;
    #         START TRANSACTION;
    #             DELETE from tb1;
    #             insert into tb2(name)values('seven');
    #         COMMIT;
    #              -- SUCCESS
    #         set p_return_code = 0;
    #         END\
    # delimiter ;

    视图和存储过程

    创建视图
    CREATE VIEW v1 AS     # REATE VIEW "视图名称" AS   固定用法
    SELECT nid,
        name
    FROM
        A
    WHERE
        nid > 4
    
    删除视图
    DROP VIEW "视图名称"
    
    修改视图
    -- 格式:ALTER VIEW 视图名称 AS SQL语句
    
    ALTER VIEW "视图名称" AS
    SELECT A.nid,
        B. NAME
    FROM
        A
    LEFT JOIN B ON A.id = B.nid
    LEFT JOIN C ON A.id = C.nid
    WHERE
        A.id > 2
    AND C.nid < 5
    
    使用视图
    select * from "视图名称"
    
    存储过程  (无参数)
    delimiter //            #  将mysql结束符号改为 //
    create procedure p1()   #p1为“函数名”
    BEGIN                  #固定用法
        select * from t1;
    END//
    delimiter ;
    
    -- 执行存储过程
    call p1()
    
    -- 创建存储过程(有参数)
    delimiter \
    create procedure p1(
        in i1 int,              # in只能传参数
        in i2 int,              #
        inout i3 int,           # inout 能传参数也有返回值
        out r1 int              # out 可以有返回值
    )
    BEGIN
        DECLARE temp1 int;
        DECLARE temp2 int default 0;
        set temp1 = 1;
        set r1 = i1 + i2 + temp1 + temp2;
        set i3 = i3 + 100;
    end\
    delimiter ;
    
    -- 执行存储过程
    set @t1 =4;
    set @t2 = 0;
    CALL p1 (1, 2 ,@t1, @t2);
    SELECT @t1,@t2;
    
    有参数的存储过程
    返回结果集
    delimiter //
        create procedure p1()
        begin
            select * from v1;
        end //
        delimiter ;
    
    返回值+结果集
    delimiter //
        create procedure p2(
            in n1 int,
            inout n3 int,
            out n2 int,
    )
        begin
            declare temp1 int ;
            declare temp2 int default 0;
    
                select * from v1;
                set n2 = n1 + 100;
                set n3 = n3 + n1 + 100;
            end //
            delimiter ;
  • 相关阅读:
    vscode的go环境配置
    百度过的问题
    javascript判定两个对象是否相等
    chattr
    kubernetes ingress example
    docker 免 sudo
    build local kubernetes env
    go channel
    rpm install and uninstall
    fluentd v0.12 gem install fluent-plugin-webhdfs error
  • 原文地址:https://www.cnblogs.com/linpei/p/10980493.html
Copyright © 2011-2022 走看看