zoukankan      html  css  js  c++  java
  • 数据库常用操作(未完待续)

    1.数据库建立在计算机上的存储设备上,按照数据结构来组织、存储和管理数据,可以对其进行操作,不仅仅是文本,也可以是图片等。
    2.特点:
    - 数据共享
    - 减少冗余
    - 数据独立
    - 数据视线集中控制
    - 数据一致性
    - 故障恢复
    3.它由软件和硬件组成,硬件主要存储数据库中的数据,软件主要包括操作系统以及应用程序。
    -----------------------
    问题1:
    mysql在按装过的情况下,无法正确安装,处理办法
    (1)将MySQL目录删除掉
    (2)将注册表中的数据删除
    一般可以解决

    安装时候的说明:
    Typical:只安装MySQL服务器.MySQL命令行客户端和命令使用程序
    Custom:自定义安装
    Complete:安装所有组件


    --------------
    4.MySQL启动
    net stop mysql
    net start mysql

    5.使用
    mysql -uroot -p
    exit;

    6.常用命令
    clear:清除当前输入语句
    connect:链接到服务器,并显示结果
    delimiter:设置语句分隔符
    print:打印当前命令
    source:执行脚本
    charset:切换到另一个字符集


    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    -------- 第二章 -------------
    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    1.数值类型
    tinyint 1
    smallint 2
    mediumint 3
    int/integer 4
    bigint 8
    float 4
    double 8
    decimal(M,D) 变长,整数部分和小数部分计算

    2.字符串类型
    - char和varchar类型
    - char用于定长字符串,必须使用圆括号指定,最大为255,超过将会被切断
    - varchar:是一个变长的,范围是0~65535,char不足时使用空格来加,varchar认为是最大值,如果超过了指定的长度也会被删除掉
    -TEXT和BLOB类型
    - 超过255的将会提供了text和blob,根据存储的数据的大小,会有不同的子类型。
    具体如下:
    - Text或者blob存储和检索过程不存在大小写变换,他们会将最大的截断,如果不是空格,将会被删除,并抛出警告。
    - 都不可以有默认值
    - 在保存或者是text咧的时候,将不会被截断
    - 日期类型
    - YEAR 1 YYYY 超过就会变为0000 两位就会转为4位
    - DATE 4 YYYY-MM-DD
    - Time 3 HH:MM:SS DX24+HH current_time:当前时间
    - DATETIME 8 YYYY-MM-DD HH:MM:SS
    - TIMESTAMP 4 YYYY-MM-DD HH:MM:SS


    3.基本操作
    - 修改编码
    ```mysql
    ALTER DATABASE 数据库名称 DEFAULT CHARACTER SET 编码格式 COLLATER 编码格式_bin
    ```
    - 查看数据库表
    ```mysql
    show create table 表名
    格式
    show create table 表名G
    ```
    - 修改表名
    ```mysql
    ALTER TABLE 原表名 RENAME to 新表名;
    ```
    - 修改字段
    ```mysql
    ALTER TABLE 表名 CHANGE 原字段 新字段名 新数据类型;
    ```
    - 修改字段类型
    ```mysql
    ALTER TABLE 表名 MODIFY 字段名 数据类型;
    ```

    -=======
    - 增加字段
    ```mysql
    ALTER TABLE 表名 ADD 新字段名 数据类型;
    ```
    - 删除字段
    ```mysql
    ALTER TABLE 表名 DROP 字段名;
    ```
    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    ---- 第三章 数据完整性 ------
    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    1.数据完整性
    - 主键约束
    - 主键用于标识一个某一条记录
    - 一个表中引用来自另一个特色记录,一个主键可以由多个关键字组成。
    - 使用主键
    ```mysql
    ALTER TABLE 表名 ADD PRIMARY KEY("列名");
    或者
    oid int PRIMARY KEY,
    两个主键的添加
    PRIMARY KEY(oid,pid);
    ```
    - 唯一约束
    - 只能有一个值
    - 使用
    ```mysql
    phone varchar(20) unique
    或者
    ALTER TABLE 表名 ADD UNIQUE(列名);
    ```
    - 自增长
    ```mysql
    字段名 数据类型 AUTO_INCREMENT,

    ALTER TABLE 表名 MODIFY 字段名 数据类型 PRIMARY KEY AUTO_INCREMENT;
    ```

    2,索引
    索引是一种单独、物理对数据对数据库中一列或者多咧的值进行排序存储,索引包括普通索引、唯一索引、全文索引、单列索引、多列索引、
    空间索引、组合索引等
    - 普通索引 只会增加查找速度 因此只需要对那些经常出现的查询条件或者排序条件中的数据进行创建索引
    创建方式
    ```mysql
    INDEX(name)

    CREATE INDEX test_2 ON 表名(字段)
    ```
    - 唯一索引 他可以被索引的列,重复的值,我们也可以做成一个唯一的值

    ```mysql
    unique index (字段名)

    create unique index 索引名 on 表名(字段名)
    ```
    3.域完整性
    对关系中的单元格进行约束,域代表单元格,对列的约束
    - 非空
    ```mysql
    NOT NULL

    ALTER TABLE test6 MODIFY id INT NOT NULL;
    ```
    - 默认约束
    ```mysql
    字段名 数据类型 DEFAULT 默认值

    ALTER TABLE test MODIFY 字段名 数据类型 DEFAULT 默认值;
    ```
    4.引用完整性
    对实体之间的关系
    外健的概念:引用另一个表中的一列或者是多列,引用的列应该具有主键约束和唯一约束,用于两个表之间的链接。
    ```mysql
    FOREIGN KEY(stu_id) REFERENCES student(stu_id);

    ALTER TABLE 表名 ADD FOREIGN KEY(外键字段) REFERENCES 主表表名(主表字段名);
    ```
    效果就是主表没有数据,从表是没有数据的。
    从表引用主表无法删除数据
    -----------------------------------------------
    删除外键约束
    ```mysql
    ALTER TABLE student DROP FOREIGN KEY 主键名
    ```
    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    ----- 第三章 多表查询 -------
    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    1.表之间的关系
    一对一 一夫一妻
    ```mysql
    create Table user(
    uid INT PRIMARY KEY,
    uname VARCHAR(20),
    uaddress VARCHAR(50)
    );

    一对一的时候,可以直接使用主键,因为主键唯一的
    create Table user_text(
    uid INT PRIMARY KEY,
    utext VARCHAR(100),
    FOREIGN KEY(uid)REFERENCES user(uid)
    );
    ```
    一对多
    ```mysql
    create Table student (
    stu_id int PRIMARY KEY,
    stu_name varchar(20)
    );

    一对多就重新创建一个字段专门作为外键


    create Table score(
    sco_id int PRIMARY KEY,
    score INT,
    stu_id INT,
    FOREIGN KEY(stu_id)REFERENCES student(stu_id);
    );
    ```
    多对一
    多对多
    ```mysql
    它做的时候,需要使用第三个表

    create Table teacher(
    tea_id INT PRIMARY KEY,
    tea_name VARCHAR(20)
    );
    create Table student(
    stu_id INT PRIMARY KEY,
    stu_name VARCHAR(20)
    );
    create Table teacher(
    tea_id INT,
    stu_id INT,
    FOREIGN KEY(tea_id) REFERENCES teacher(tea_id),
    FOREIGN KEY(stu_id) REFERENCES stu(stu_id)
    );
    ```

    2.合并结果集
    UNION / UNION ALL
    结果并集
    ```mysql
    select *from stu1 union slect *from stu2;
    ```
    区别就是一个会过滤掉重复一个不会过滤掉重复。

    3.链接查询
    迪卡尔查询 将左右的都查询
    ```mysql
    slect 查询字段 from 表1 cross join 表2;
    ```
    内链接查询 查询只有满足条件的行
    ```mysql
    select 查询字段 form 表1 inner join 表2 on 表1.字段 = 表2.字段 where 查询条件;
    ```


    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    ----- 第四章 常用函数 ------
    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    ASCII(str) 最左边的ASCII代码
    CONCAT(str1,str2,……,strn) 链接字符串
    INSERT(str , str , num ,instr) 1开始,数num个
    LEFT(str , pos) 左侧开始指定个数的字符
    RIGHT(str , num) 右侧开始指定个数的字符

    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    ------- 第五章 视图 --------
    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    视图:是虚拟的表,和真实的表类似。
    创建视图
    ```mysql
    一个表创建视图
    create view view_emp(id,name,……)
    As
    SELECT ID,NAME,…… FROM EMP;


    两个表上创建视图
    CREATE VIEW VIEW_DEMO(ID,AGE,NAME,GENDER)
    AS
    SELECT A.ID,A,AGE,B.NAME,B.GENDER FROM DEMO01 A,DEMO02 B;
    ```

    查看试图
    SELECT SHOW_VIEW_DEMO FORM MYSQL.USER WHERE USER='ROOT';查看用户是否有试图权限

    查看试图 DESCRIBE 视图名; DESC 视图名;
    -----主要是字段---------

    SHOW TABLE STATUS查看试图的基本信息,

    SHOW TABLE STATUS LIKE '视图名';

    --------试图相关信息---------

    SHOW CREATE VIEW 视图名;
    -------- 创建试图的语句和编码等信息 -----------

    修改试图
    修改数据库中已经存在的
    使用create or replace view 语句修改试图。必须确保有删除试图的权限。
    ```mysql
    SELECT DROP_PRIV FROM MYSQL.USER WHERE USER='ROOT';

    create or replace view view_detail(id,name,sex) AS
    SELECT ID,NAME,SEX FROM EMP;
    ```

    使用ALTER修改
    ```mysql
    ALTER VIEW VIEW_DEMO
    AS
    SELECT NAME,AGE FROM EMP;
    ```


    更新试图
    试图是虚拟出来的,在试图上的操作,也就是在表上的操作。删除也是一样。


    删除试图
    DROP VIEW IF EXISTS VIEW_EMP_DETAIL;

    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    ----- 第liu章 存储过程 ------
    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    存储过程

    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    -------- 第七章 其他 --------
    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    数据库范式:
    第一范式:每个字段都是不可分割的基本数据项,同一个字段不可以有多个值。
    第二范式:满足第二的必须满足第一,每个实例可以被唯一的区分。



    数据库指定端口的使用:
    ```mysql
    mysql -h 127.0.0.1 -P 3306 -u root -p
    ip 端口 用户名 密码
    ```
    乱码解决方法:
    乱码原因是因为使用了latin1,但字节编码,
    处理方式:
    - 在登入的时候进行设置
    ```mysql
    mysql --default-character-set=字符集 -h 服务器 -P 端口号 -u -p
    ```
    - 查看编码
    SHOW VARIABLES LIKE '%CHAR%'
    查看结束之后再设置编码
    ```MYSQL
    SET CHARACTER_SET_CLIENT = GBK
    SET CHARACTER_SET_CONNECTION = GBK
    SET CHARACTER_SET_DATABASE = GBK
    SET CHARACTER_SET_RESULT = GBK
    SET CHARACTER_SET_SERVER = GBK
    SET COLLATION_CONNECTION = GBK_CHINESE_CI
    SET COLLATION_DATEBASE = GBK_CHINESE_CI
    SET COLLATION_SERVER = GBK_CHINESE_CI
    ```
    修改密码:
    ```mysql
    mysqladmin -u root password "新密码"
    ```

    创建数据库是提供编码
    ```mysql
    创建数据库 指定默认的编码 数据库校验,大小写不敏感
    CREATE DATABASE DATABASENAME DEFAULT CHARACTER SET UTF8 COLLATER UTF8_GENERAL_CI;

    UTF8_GENERAL_CS:大小写敏感

    utf8_bin:将字符串用二进制存储
    ```


    数据库的备份和恢复
    ```mysql
    可以将其备份成为一个文件
    步骤:
    (1)首先查询需要备份的表结构
    (2)在文本中生成一个create语句
    (3)将表中的记录变为一个insert语句。
    ```

    操作
    - mysqldump 命令备份数据库,先将其内存中的数据刷到数据库文件中,同时锁定表
    flush tables with read lock 将其锁住,禁止各种更新操作,但是可查询。
    - MySQLdump用于转存数据库命令,主要是生成一个sql文件,需要制定到处的目录
    ```mysql
    mysqldump -u root -p 表名 > 文件名
    ```

    备份多个表
    ```mysql
    mysqldump -u root -p --databases test mysql > 文件名
    ```

    备份所有
    ```mysql
    mysqldump -u root -p -all-databases > 文件名
    ```

    使用复制数据库的方式进行备份


    恢复数据库
    ```mysql
    mysql -u root -p databases < 文件名
    ```
    操作,首先创建一个数据库,然后将其导入。

    恢复方式2
    ```mysql
    source 脚本文件
    ```


    数据库导入导出
    将数据库中表导出到一个txt文件中
    ```mysql
    SELECT 字段 FROM INTO OUTFILE 'PATH/FILENAME'
    ```
    案例:
    ```mysql
    SELECT * FROM STUDENT INTO OUTFILE 'C:STUDENT.TXT'
    ```

    两个服务器之间数据的导入和导出
    ```mysql
    MYSQLDUMP -U ROOT -P DATABASE_NAME MYSQL -H ip DATABASE_NAME;
    ```

    导入数据
    ```mysql
    LOAD DATA LOCAL INFILE 'dump.txt' INFO TABLE mytbl;
    ```

    使用import导入
    ```mysql
    mysqlimport -u root -p --local databases_name dump.txt
    ```


    数据库编程
    在开发过程中一个功能调用多次,为一组提供结果集
    - 存储过程
    - 增强sql语言功能性和灵活性,在存储过程中书写各种代码,完成各种复杂的运算
    - 可以被调用多次
    - 较快的执行速度
    - 减少网络流量
    - 增强安全性
    创建过程
    - 创建语句
    ```mysql
    CREATE PROCEDURE 过程名 (过程参数)
    BEGIN
    过程体
    END
    ```

    执行
    ```mysql
    CALL 过程名();
    ```

    案例:
    ```mysql
    CREATE PROCEDURE sp_1()
    BEGIN
    SELECT * FROM stu;
    END;
    ```

    ```mysql
    CALL sp_1();
    ```

    ----------------------------
    ```mysql
    CREATE PROCEDURE sp_1(IN student_no CHAR(10))
    BEGIN
    SELECT * FROM STUDENT WHERE STU_NO = student_no;
    END
    ```

    ```mysql
    CALL SP1('383')
    ```


    带有OUT的过程
    ```mysql
    CREATE PROCEDURE sp_1(OUT name VARCHAR(20))
    BEGIN
    SELECT st_name FROM student;
    END
    ```

    ```mysql
    CALL sp_1(@name)
    ```

    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    -------- 第ba章 安全 --------
    -----------------------------
    -----------------------------
    -----------------------------
    -----------------------------
    用户一般分为两类,一类是root管理员,一类是普通用户
    - 创建普通用户
    ```mysql
    GRANT privileges ON database.table to 'USERNAME' @ 'hostname' [identified BY [PASSWORD] 'password'];
    用户具有的权限 权限指定在特定的表上


    案例:
    GRANT SELECT ON database.table TO 'KW' @ 'LOCALHOST' IDENTIFIED BY '123456';


    CREATE USER 'username' @ 'hostname' IDENTIFIED BY 'abc123456';
    CREATE USER 'username' @ 'localhost' IDENTIFIED BY 'abc123456';


    使用insert
    INSERT INTO MYSQL.USER(HOST,USER,PASSWD) VALUES(xx,xx,XX);
    ```


    删除用户
    ```mysql
    DROP USER 'USERNAME' @ 'HOSTNAME'


    DELETE FROM MYSQL.USER WHERE HOST='LOCALHOST' AND user="USERNAME"
    ```


    修改密码:
    使用UPDATE
    ```mysql
    UPDATE MYSQL.USER SET PASSWORD ('NEW_password') where user = 'username' and Host = 'hostname'

    mysqladmin -u root -p password 123456;

    SET PASSWORD = PASSWORD(NEW_password);
    ```

  • 相关阅读:
    java的泛型
    JAVA集合类--(一闪而过)
    java面向对象- -一闪而过
    进制转换之二进制与十进制转换
    跳跃表-原理及Java实现
    Excel二次开发相关代码
    程序员学炒股(7) 股市心得
    程序员学炒股(7) 股指期货收盘价对第二天开盘价有影响吗?
    程序员学炒股(6) 让我们来看一下7月份A股的表现
    程序员学炒股(5) 股指交割日效应是否存在?
  • 原文地址:https://www.cnblogs.com/kw28188151/p/10843112.html
Copyright © 2011-2022 走看看