• 数据库基础


    数据库基础

    -- 创建用户;CREATE USER'用户名'[@'主机名']IDENTIFIED BY '密码'
    -- 主机名可以为空,为空默认为%权限,表示所有主机可连接;
    CREATE USER 'jredu'@'localhost' IDENTIFIED BY 'jredu';

    -- GRANT TO:给用户分配权限:GRANT 权限名 ON 数据库名.表名 TO 用户@主机
    -- ALL表示所有权限 *.*表示所有数据库中所有表
    GRANT ALL ON *.* TO 'jredu'@'localhost';
    GRANT SELECT,INSERT,DELETE ON mysql.‘user’ TO 'jredu'@'localhost';

    -- REVOKE FROM 删除用户权限
    REVOKE SELECT ON *.* FROM 'jredu'@'localhost';

    -- 创建数据库:CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARACTER SET [=] 'UTF8']
    -- 如果省略 IF NOT EXISTS 在重复创建数据库时,会报错!
    CREATE DATABASE IF NOT EXISTS myDB3 CHARACTER SET ='UTF8';

    -- 删除数据库:DROP DATABASE [IF EXISTS] 数据库名;
    DROP DATABASE IF EXISTS mydb2;

    -- 查询本机中所有的数据库
    SHOW DATABASES;

    -- 使用mydb这个数据库,表示下面的查询都将默认针对mydb数据库
    USE mydb;

    -- 查询数据库中所有数据表 SHOW TABLES [FROM 数据库];
    SHOW TABLES FROM mysql;


    /*
    mysql 中常见的数据类型:

    一、字符型:
    ① CHAR(N):固定N个字符长度的字符串,如果长度不够会自动空格补齐。N的范围0~255;
    ② VARCHAR(N):存储可变长度的字符串,最常用的。0~2^16-1*10;
    ③ TEXT:存储可变长度的字符串。(常用于发布文章等大段内容)0~2^16-1*10^2;
    ④ TINYTEXT: 0 ~ 2^8-1*10;
    ⑤ MEDIUMTEXT:0~2^24-1*10^3;
    ⑥ LONGTEXT:0~2^32-1*10^4;
    ⑦ enum("男","女"):枚举类型。字段只能容纳枚举出的数据。

    二、整形:
    ① TINYINT: 无符号 0 ~ 2^8-1 有符号 -2^7 ~ 2^7-1;
    ② SMALLINT:无符号 0 ~ 2^16-1 有符号 -2^15 ~ 2^15-1;
    ③ MEDIUMINT:无符号 0 ~ 2^24-1 有符号 -2^23 ~ 2^23-1;
    ④ INT:无符号 0 ~ 2^32-1 有符号 -2^31 ~ 2^31-1; 最常用;
    ⑤ BIGINT:无符号 0 ~ 2^64-1 有符号 -2^63 ~ 2^63-1;

    三、浮点型:
    ① FLOAT:可以精确到小数点后7位有效数字;
    ② DOUBLE:可以精确到小数点后十五到十六位有效数字;
    四、日期时间数据类型:
    注意:由于时间存储使用字符串或者时间戳存储,所以数据库中几乎不用日期类型。
    ① DATE:存储日期和时间数据;
    ② TIMESTAMP:比DATA更精确;

    *
    【数据库设计的三大范式】
    1、第一范式(1NF):数据表中的每一列(每一个字段),必须是不可拆分的最小单元。
    也就是确保每一列的原子性。
    例如: userInfo:'山东省烟台市 1365464672'
    userAds:'山东省烟台市' userTel:'1365464672'
    2、第二范式(1NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系;也就是说一个表只描述一件事情。
    例如:订单表:只能描述订单相关的信息,所以所有的字段都必须与订单ID相关 ;
    产品表:只能描述产品相关的信息,所以所有的字段都必须与产品ID相关;
    因此:不能在一张表中,同时出现订单信息与产品信息。
    3、第三范式(3NF):满足2NF后,要求:表中的每一列都要与主键直接相关,而不是间接相关。(表中的每一列,只能那个依赖于主键)
    例如:
    订单表中,需要有客户相关信息,在分理出客户表之后。订单表中,只需要有一个用户即可。而不能有其他的客户信息。因为,其他的用户信息是直接关联于用户ID,而不是关联于订单
    ID。

    [第二范式与第三范式的本质区别]
    在于有没有分出两张表,第二范式是说一张表中包含了多种不同实体的属性,那么必须要分成多张表。第三范式是要求,已经分好了多张表的话,那么一张表中只能有另一张表中的ID(主键),而不能有其他的任何信息(其他的信息,一律使用主键在另一张表查询)。

    */

    -- 创建表
    -- IF NOTEXISTS可以省略。省略后重复创建报错。如果不省略,则创建时会检查表是否已经存在,如果表存在则不再执行创建语句。

    -- 定义列: 列名 数据类型 列定义关键字
    -- 常用的列定义关键字:
    -- UNSIGNED:设置列为无符号列。只能设置类型为数字类型的列。
    -- Auto_INCREMENT:设置列为自动增长列。自动增长列必须是主键。


    -- PRIMARY KEY:设置主键约束。
    -- 【主键】
    -- 1、主键的注意事项?主键默认非空!逐渐默认唯一性约束。只有主键才能设置自动增长
    -- (主键不一定自增,自增必定是主键)。
    -- 2、设置主键的方式?① 在列定义时设置:id INT UNSIGNED PRIMARY KEY,
    -- ② 在列定义完成后设置:PRIMARY KEY(id)
    -- UNIQUE:设置唯一性约束。该字段不能出现重复值。
    -- NOT NULL:设置列非空约束。该字段不能为空。
    -- DEFAULT:这支默认值约束。height DOUBLE(3,2) DEFAULT 1.2 height如果不输入默认1.2
    -- FOREIGN KEY:设置外键约束。
    -- 【外键】
    -- 1、设置外键有哪些注意事项?
    -- ① 只有innodb的数据库引擎支持外键。
    -- 修改.ini文件设置default-storage-engine=INNODB
    -- ② 外键与参照列的数据类型必须相同。
    -- (数值型要求长度和无符号都相同,字符串要求类型相同,长度可以不同)
    -- ③ 设置外键的字段必须要有索引。如果没有索引,设置外键时会自动生成一个索引。
    -- 2、设置外间的语法?
    -- [CONSTRAINT 外键名] FOREIGN KEY (外键字段) REFERENCES 参照表 (参照字段)
    -- [ON DELETE SET NULL ON UPDATE CASCADE ] 设置参照完整性操作
    -- 3、外键约束的参照完整性操作?
    -- 参照操作:当对参照表的参照字段进行删除或更新参照字段。
    -- 参照操作可选值:RESTRICT 拒绝参照表删除或更新参照字段。
    -- NO ACTION 与 RESTRICT 相同,但这个指令只在mysql生效
    -- CASCADE 删除或更新参照表的参照字段时,外键表的记录同步删除更新
    -- SET NULL 删除或更新参照表的参照字段时,外键表的外键设为null

  • 相关阅读:
    掌控像素的虚实
    多用组合,少用继承
    HTML5的语法变化和新增加元素
    又逢六月
    设计心情之心情设计
    web2.0生成器(超过100个)[转]
    css+div CSS教程——元素定位
    项目进度
    清华大学统一认证接口与PHP的调用
    将51JOB的求职意向选择框Down了
  • 原文地址:https://www.cnblogs.com/lixishimeng/p/7070774.html
Copyright © 2020-2023  润新知