• 数据库基础和三大范式以及基本的增删改查命令


     所谓数据库就是建库 建表 建约束。
    ① 确定实体 就是确定有几张表
    ② 确定表的属性
    规范化的三个级别:数据库设计的三大范式!!!!
    第一范式(1NF):原子性:数据表中的每一列是不可拆分的最小单元,也就是确保每一列的原子性。
    例如:userInfo:'山东省烟台市 11233445667'
    拆分成: ‘山东省烟台市’ 和‘'11233445667“:


    第二范式(2NF):满足1NF后,要求:表中的所有列都依赖于主键,而不能有任何一列与主键没有关系。
    也就是说每张表只能描述一件事情。
    例如:订单表只能描述订单相关的信息,所以所有的字段都必须与订单id相关;
    产品表,只能描述产品相关的信息,所以所有的字段都必须与产品ID相关。


    第三范式(3NF):满足2NF后要求是表中的所有字段只与主键相关(依赖于主键),而不依赖于其他属性,
    确保每一列都只与主键直接相关,而不是间接相关。
    例如:订单表中,需要有客户相关信息,在分离出客户表之后。订单表中值需要有一个用户ID即可,
    而不能有其他的客户信息。因为,其他的用户信息是直接关联于用户ID,而不是关联于订单ID,
    【第二范式与第三范式的本质区别在于有没有分出两张表来】:第二范式是说一张表中包含了多种不同试题的属性,那么唏嘘分成多
    张表,第三范式是在于已经分好了多张表的话,那么,一张表中只能有另一张表的ID(主键),而不能
    有其他的任何信息(其他的信息,一律用主键在另一表查询)

    -- 创建表
    -- IF NOT EXISTS 可以省略 省略后重复创建时会包报错。如果省略,则创建时会检测表是否已存在,如果表存在则不再执行创建语句。
    -- 定义列:列名 数据类型 列定义关键字
    -- 常用的列定义关键字:
    -- UNSIGNED:设置列为无符号列,只能设置类型为数字类型列。
    -- AUTO_INCREMENT:设置列为自动增长列。自动增长列必须是主键。


    -- PRIMARY KEY:设置主键约束。
    -- 【主键】
    -- 1、主键的注意事项?主键默认为空!主键默认唯一性约束!
    -- 只有主键才能设置自动增长(主键不一定自增,自增的必定是主键)。
    -- 2、设置主键的方式?① 在列定义时设置:id INT PRIMARY KEY ② 在定义完成后设置:PRIMARY KEY(id);
    -- UNIQUE:设置唯一性约束。该字段不能出现重复值。例如:age SMALLINT UNIQUE,
    -- DEFAULT:设置默认值约束。height DOUBLE(3,2) DEFAULT 1.2 heighit 如果不输入默认为1.2
    -- NOT NULL:设置非空约束,该字段不能为空。

    -- FOREIGN KEY:设置外键约束
    -- 【外键】
    -- 1、设置外键有哪些注意事项
    -- ① 只有innodb的数据引擎支持外键
    -- 修改my.ini文件设置default——storage_engine
    -- ② 外键与参照列的数据类型必须相同,字符串要求类型相同,长度可以不同。
    -- 2、设置外键的语法
    -- CONSTRAINT 外键名 FOREIGN KEY (外键字段) REFERENCES 参照表(参照字段)
    -- ON DELETE SET NULL ON UPDATE CASCADE 设置参照完整性操作:
    -- 3、外键约束的参照操作
    -- 参照操作:当对参照表的参照字段进行删除或者是更新时,外键表中的外键如何应对

    -- 参照操作可选值:restrict 拒绝参照表删除或者是更新参照字段。
    -- NOACTION 与RESTRICT相同,但这个指令只在MySQL生效
    -- CASCADE 删除 或更新残渣表的参照字段,外键表的记录同步删除更新
    -- SET NULL 删除或更新参照表的参照字段,外键表的外键设为NULL
    --
    USE mydb;
    -- 删除表
    DROP TABLE IF EXISTS tb1;

    CREATE TABLE IF NOT EXISTS tb1(
    id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(255),-- name是关键字,所以使用反引号``包裹
    age SMALLINT,
    height DOUBLE(3,2) DEFAULT 1.2
    -- PRIMARY KEY(id)
    );
    CREATE TABLE IF NOT EXISTS CLASSES(
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    classname VARCHAR(255) NOT NULL
    );
    CREATE TABLE IF NOT EXISTS `USER`(
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    clsid INT UNSIGNED,
    `name` VARCHAR(255) NOT null ,
    CONSTRAINT user_fk_classes FOREIGN KEY (clsid) REFERENCES classes(id) ON DELETE SET NULL ON UPDATE CASCADE
    )

    /*SQY 多行注释 */
    -- SQL单行注释
    -- 创建用户:CREATE USER ‘用户名’[@'主机名'] IDENTIFIED BY ‘密码’
    -- 主机名可以为空,为空默认为%权限,表示所有主机可连
    CREATE USER 'jredu'@'localhost' IDENTIFIED BY 'jredu';


    -- GRANT 给用户分配权限:GRANT 权限名 ON 数据库名.表名 TO '用户'@'主机';
    -- ALL表示所有权限 *.*表示所有用户中的所有表
    GRANT ALL ON *.* TO 'jredu'@'localhost';

    GRANT SELECT ON mysql.'user' TO 'jredu'@'localhost';

    -- REVOKE FROM 删除用户权限
    REVOKE ALL 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的范围是0-255
    ② VARCHAR():存储可变长度的字符串。最为常用。大约是->0-(2^16-1)*10;
    ③ TEXT: 存储可变长度的字符串(常用与发布文章的等大段内容)。0-65535*10^2;
    ④ TINYTEXT:0 ~(2^8-1)*10 ;
    ⑤ MEDIUMTEXT: 2~(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:无符号 -2^32-1 有符号 -2^31 ~ 2^31-1;
    ⑤ BIGINT:无符号 0~2^64-1 有符号-2^63 ~ 2^63-1;
    三、浮点型
    ①FLOAT 可以精确到小数点后七位有效数字
    ②DOUBLE 可以精确到小数点后十五位到十六位数字
    四、日期和时间数据类型
    注意:由于时间存储使用字符串或者是时间戳存储,所以数据库中几乎不用日期类型。
    ①DATE:存储日期和时间数据
    ②TIMESTAMP:比DATE更精准。


    */

      

    SHOW COLUMN FROM classes;

    SHOW TABLES;
    -- 显示数据表结构
    SHOW COLUMNS FROM tb1;
    -- 显示表
    SHOW CREATE TABLE tb1;
    -- 删除表
    DROP TABLE IF EXISTS tb1;

    -- 修改表名 ALTER TABLE 旧表名 RENAME [TO]新表名;
    ALTER TABLE tb1 RENAME tb2;
    -- 同时修改多表名 RENAME TABLE tb3 TO tb1[,`user`TO user1...];
    RENAME TABLE tb3 TO tb1,`user`TO user1;

    --
    -- 修改字段 列
    -- ALTER TABLE 表名 CHANGE 旧列名 新列名 列定义 [FIRST|AFTER 某一列]
    -- FIRST:将这个字段调整为表格第一列 AFTER 某一列:将这个字段放到某一列后面。
    ALTER TABLE tb1 CHANGE `uername` `uername`VARCHAR(200) NOT NULL AFTER age;
    -- MODIFY 只修改列定义,不能改名
    ALTER TABLE tb1 MODIFY `uername` VARCHAR(200) NOT NULL AFTER age;
    -- 删除表中某一列
    ALTER TABLE tb1 DROP height;
    -- 新增一列 必选部分:ALTER TABLE tb1 ADD height DOUBLE(8,2)
    ALTER TABLE tb1 ADD height DOUBLE(8,2)DEFAULT 1.2 AFTER age;
    -- 新增多列 不能调整列的位置,只能插在最后。
    ALTER TABLE tb1 ADD(
    weight DOUBLE(3,2) UNSIGNED,
    school VARCHAR(255)

    );


    -- 增加主键约束
    ALTER TABLE tb1 ADD PRIMARY KEY(age);

    -- 删除主键约束 删去自增
    ALTER TABLE tb1 DROP PRIMARY KEY;
    -- 新增唯一性约束
    ALTER TABLE tb1 ADD UNIQUE KEY(username);
    -- 删除唯一性约束:由于创建唯一性约束会创建索引,所以删除时,需要删除索引
    ALTER TABLE tb1 DROP INDEX username;

    -- 设置默认值约束
    ALTER TABLE tb1 ALTER age SET DEFAULT 20;
    -- 删除默认值约束
    ALTER TABLE tb1 ALTER age DROP DEFAULT;
    SHOW COLUMN FROM tb1;
    SHOW TABLES;

  • 相关阅读:
    Elasticsearch 支持拼音自动补全
    laravel自动补全链接
    laravel的服务容器(药箱)、服务提供者(小盒子)、Facades(更方便用药),方便大家透彻理解
    php static静态属性和静态方法
    php面向对象的构造方法与析构方法
    MySQL事务-ROLLBACK,COMMIT用法详解
    php 事务处理transaction
    Python:初步学习Python
    iOS:自己写的一个星级评价的小Demo
    iOS:枚举enum的使用
  • 原文地址:https://www.cnblogs.com/GlenLi/p/7045951.html
Copyright © 2020-2023  润新知