zoukankan      html  css  js  c++  java
  • mysql数据库(2)

    命令行连接

    • 在工作中主要使用命令操作方式,要求熟练编写
    • 打开终端,运行命令
    mysql -uroot -p
    回车后输入密码,当前设置的密码为mysql
    • 退出登录
    quit 和 exit
    或
    ctrl+d
    
    • 登录成功后,输入如下命令查看效果
    查看版本:select version();
    显示当前时间:select now();
    

    修改输入提示符

    prompt python>
    
    • D 完整日期
    • U 使用用户

    数据库

    • 查看所有数据库
    show databases;
    
    • 使用数据库
    use 数据库名;
    
    • 查看当前使用的数据库
    select database();
    
    • 创建数据库
    create database 数据库名 charset=utf8;
    例:
    create database python charset=utf8;
    
    • 删除数据库
    drop database 数据库名;
    例:
    drop database python;

    数据表

    • 查看当前数据库中所有表
    show tables;
    
    • 查看表结构
    desc 表名;
    
    • 创建表
    • auto_increment表示自动增长
    CREATE TABLE table_name(
        column1 datatype contrai,
        column2 datatype,
        column3 datatype,
        .....
        columnN datatype,
        PRIMARY KEY(one or more columns)
    );
    

    例:创建班级表

    create table classes(
        id int unsigned auto_increment primary key not null,
        name varchar(10)
    );
    

    例:创建学生表

    create table students(
        id int unsigned primary key auto_increment not null,
        name varchar(20) default '',
        age tinyint unsigned default 0,
        height decimal(5,2),
        gender enum('男','女','人妖','保密'),
        cls_id int unsigned default 0
    )
    
    • 修改表-添加字段
    alter table 表名 add 列名 类型;
    例:
    alter table students add birthday datetime;
    
    • 修改表-修改字段:重命名版
    alter table 表名 change 原名 新名 类型及约束;
    例:
    alter table students change birthday birth datetime not null;
    
    • 修改表-修改字段:不重命名版
    alter table 表名 modify 列名 类型及约束;
    例:
    alter table students modify birth date not null;
    
    • 修改表-删除字段
    alter table 表名 drop 列名;
    例:
    alter table students drop birthday;
    
    • 删除表
    drop table 表名;
    例:
    drop table students;
    
    • 查看表的创建语句
    show create table 表名;
    例:
    show create table classes;

    增删改查(curd)

    curd的解释: 代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)

    查询基本使用

    • 查询所有列
    select * from 表名;
    例:
    select * from classes;
    
    • 查询指定列
    • 可以使用as为列或表指定别名
    select 列1,列2,... from 表名;
    例:
    select id,name from classes;
    

    增加

    格式:INSERT [INTO] tb_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...

    • 说明:主键列是自动增长,但是在全列插入时需要占位,通常使用0或者 default 或者 null 来占位,插入成功后以实际数据为准
    • 全列插入:值的顺序与表中字段的顺序对应
    insert into 表名 values(...)
    例:
    insert into students values(0,’郭靖‘,1,'蒙古','2016-1-2');
    
    • 部分列插入:值的顺序与给出的列顺序对应
    insert into 表名(列1,...) values(值1,...)
    例:
    insert into students(name,hometown,birthday) values('黄蓉','桃花岛','2016-3-2');
    
    • 上面的语句一次可以向表中插入一行数据,还可以一次性插入多行数据,这样可以减少与数据库的通信
    • 全列多行插入:值的顺序与给出的列顺序对应
    insert into 表名 values(...),(...)...;
    例:
    insert into classes values(0,'python1'),(0,'python2');
    
    insert into 表名(列1,...) values(值1,...),(值1,...)...;
    例:
    insert into students(name) values('杨康'),('杨过'),('小龙女');
    

     

    修改

    格式: UPDATE tbname SET col1={expr1|DEFAULT} [,col2={expr2|default}]...[where 条件判断]

    update 表名 set 列1=值1,列2=值2... where 条件
    例:
    update students set gender=0,hometown='北京' where id=5;
    

    删除

    DELETE FROM tbname [where 条件判断]

    delete from 表名 where 条件
    例:
    delete from students where id=5;
    
    • 逻辑删除,本质就是修改操作
    update students set isdelete=1 where id=1;

    备份

    • 运行mysqldump命令
    mysqldump –uroot –p 数据库名 > python.sql;
    
    # 按提示输入mysql的密码
    

    恢复

    • 连接mysql,创建新的数据库
    • 退出连接,执行如下命令
    mysql -uroot –p 新数据库名 < python.sql
    
    # 根据提示输入mysql密码

    数据库设计

    • 关系型数据库建议在E-R模型的基础上,我们需要根据产品经理的设计策划,抽取出来模型与关系,制定出表结构,这是项目开始的第一步
    • 在开发中有很多设计数据库的软件,常用的如power designer,db desinger等,这些软件可以直观的看到实体及实体间的关系
    • 设计数据库,可能是由专门的数据库设计人员完成,也可能是由开发组成员完成,一般是项目经理带领组员来完成
    • 现阶段不需要独立完成数据库设计,但是要注意积累一些这方面的经验

    三范式

    • 经过研究和对使用中问题的总结,对于设计数据库提出了一些规范,这些规范被称为范式(Normal Form)
    • 目前有迹可寻的共有8种范式,一般需要遵守3范式即可
    • ◆ 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。

      考虑这样一个表:【联系人】(姓名,性别,电话) 如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。

    • ◆ 第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。

      考虑一个订单明细表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。 因为我们知道在一个订单中可以订购多种产品,所以单单一个 OrderID 是不足以成为主键的,主键应该是(OrderID,ProductID)。显而易见 Discount(折扣),Quantity(数量)完全依赖(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依赖于 ProductID。所以 OrderDetail 表不符合 2NF。不符合 2NF 的设计容易产生冗余数据。

      可以把【OrderDetail】表拆分为【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)来消除原订单表中UnitPrice,ProductName多次重复的情况。

    • ◆ 第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

      考虑一个订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。 其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。 通过拆分【Order】为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。 *第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列.

  • 相关阅读:
    严重: Parse error in application web.xml file at jndi:/localhost/ipws/WEBINF/web.xml java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml
    Failed to install .apk on device 'emulator5554': timeout解决方法
    java.lang.NoClassDefFoundError:org.jsoup.Jsoup
    Conversion to Dalvik format failed: Unable to execute dex:解决方法
    apache Digest: generating secret for digest authentication ...
    Description Resource Path Location Type Project has no default.properties file! Edit the project properties to set one.
    android service随机自启动
    MVC3 安装部署
    EF 4.3 CodeBased 数据迁移演练
    SQL Server 2008开启sa账户
  • 原文地址:https://www.cnblogs.com/yinjiangchong/p/9404309.html
Copyright © 2011-2022 走看看