美文网首页
数据库2018-6-25

数据库2018-6-25

作者: 清清子衿木子水心 | 来源:发表于2018-06-25 20:10 被阅读0次

    数据库没有诀窍:唯有练习

    命令  ===== Linux

    前三周的课程:

    1、两周的时间讲解前端部分(UI):

    HTML

    css

    JavaScript(js)

    jQuery

    2、数据库(关系型数据库+非关系型数据库(nosql))

    MySQL:

    mongodb:

    redis:

    =================================================================

    mysql:

    典型关系型数据库(relational database)

    =================================================================

    1、安装MySQL

    window:

    .msi

    .zip

    修改my.ini

    bin添加到path

    以管理员身份打开cmd命令提示符,将路径切换到bin下去,

    mysqld install/remove

    net start/stop mysql

    Linux

    使用应用仓库安装

    CenterOS|redhat:

    sudo yum  install mysql-sever mysql

    ubuntu:

    sudo apt|apt-get install mysql-server

    sudo apt|apt-get install mysql-client

    sudo service mysql restart/start/stop/status

    从官网下载的源代码:

    2、MySQL的使用

    MySQL 典型C/S架构的软件 client/server

    进入mysql:

    mysql -u用户名 -p密码 -h主机ip或者域名 -P端口

    退出mysql:

    exit|quit|\q|Ctrl+C

    3、mysql远程登录:

    1、以管理员身份进入mysql

    update mysql.user set host='%' where user='root';

    2、修改/etc/mysql/mysql.conf.d/mysqld.cnf

    bind-address 注释掉

    3、重启服务

    4、mysql的一些常规操作

    show databases like pattern; # 显示当前所有的数据库

    use dbName; # 进入到对应数据库中

    show tables like pattern; # 显示当前数据库所有表

    desc\describe tableName; # 描述表的结构

    show columns from t_user; # 描述表的结构

    select database(); # 显示当前所在的数据库

    select now(); # 返回当前时间

    select version(); # 返回当前数据库的版本信息

    5、SQL标准的讲解

    |-- sql

    |-- DDL(data definition language)数据定义语言

    create drop alter show

    |-- DML(data manipulation language) 数据操作语言

    CRUD  update delete insert select

    |-- DQL(data query language)数据查询语言

    select

    |-- DCL(data controll language)数据控制语言

    grant invoke

    6、创建数据库

    创建数据库:

    create database dbName [[default] charset 'utf8']

    删除数据库:

    drop database dbName;

    修改数据库:

    alter database dbName default charset gbk;

    查看数据库定义:

    show create database dbName;

    7、mysql的数据类型

    整形:

    tinyint 一个字节

    smallint 两个字节

    mediumint 三个字节

    int 四个字节

    bigint 八个字节

    浮点型数据:

    float 四个字节

    double 八个字节

    decimal(10,5) 做精确运算时使用

    文本型:

    char(lenght)

    varchar(length)

    text

    二进制:bit,binary,Blob

    日期:

    year ,month,day,time,date,datetime,timestamp 游标戳

    枚举:enum()

    8、表的常见操作

    表的创建:

    create table tName(

    field1 int primary key auto_increment,

    gender varchar(20) not null

    ) default charset utf8 engine=innodb/mysiam

    查询表创建的信息:

    show create table tname[/G];

    对表结构的修改:

    修改表名:

    rename table oldTableName to newTableName;

    alter table tableName rename to new TableName;

    修改表的属性(字符集|引擎……):

    alter table tableName charset=gbk

    alert table t_test charset='gbk';

    修改表的字段:

    alter table tName change/modify/drop/add field

    增加一个新的字段:

    alter table tName add newColumn condition 位置

    alter table t_test add nickname varchar(50) not null unique

    修改一个字段的名称

    alter table tName change nickname test varchar(30) default 'liushuaige' first;

    修改一个字段的类型

    alter table tName modify test varchar(80) default 'hehe' after age;

    删除一个字段

    alter table t_test drop test;

    9、CRUD(C:create 增加 R:retrieve 查询 U:update 修改 D:delete 删除):                                     

    insert into

    tableName(field1,field2,……,fieldn)

    values(val1,val2,……,valn);

    update tableName set field1=newV[,……,fieldn=newV]

    where condition;

    delete from tableName where condition;

    truncate [table] tableName; #慎用

    select *[field1,field2,……,fieldn] from table [where condition]

    10、单表的条件查询

    关系运算符: > <  >= <=  =  != <>

    逻辑运算符:and(并且) or(或者) not

    空和非空的判断: is null is not null

    between and  in  not in

    排序:

    order by field1 [asc|desc] [,field2 [asc|desc]]

    分组:

    group by field [having condition]

    分页:

    limit offset, pageSize;

    11、编码问题

    utf8

    gbk

    latin1

    ……

    校对集:

    _bin: binary 区分大小写

    _cs: 区分大小写

    _ci: 忽略大小写

    =============================================================

    今天目标:

    分表:

    多表关联查询:

    外键:

    视图:

    索引:

    面试题:

    1、说说你所知道的mysql的数据库引擎有哪些?

    2、innodb、myisam 两个引擎的区别?

    =============================================================

    在设计数据库时,一般而言要求遵循数据库三范式(3NF)

    1、设计的字段具有原子性(字段不可分割)

    2、每天记录具有唯一性  主键

    3、外键

    大量数据冗余 

    数据冗余:在一个数据集合中重复的数据称为数据冗余.

    数据冗余技术是使用一组或多组附加驱动器存储数据的副本,这就叫数据冗余技术。

    create TABLE emp (

    id int PRIMARY KEY auto_increment,

    name varchar(50) not null,

    gender char(10) DEFAULT '男',

    tel  varchar(20) DEFAULT '110',

    address varchar(255),

    qq varchar(30),

    age int DEFAULT 18,

    deptId int,

    # 添加外键约束

    constraint foreign key(deptid) references dept(id) on delete set NULL  on update

    )

    外键 foreign key 完成外键的约束

    CONSTRAINT FOREIGN key(新表的字段) REFERENCES  主表(引用字段)

    create table dept(

    id int PRIMARY KEY auto_increment,

    name varchar(50) not null UNIQUE,

    describle text

    )

    # 多表管理查询

    # 多表管理查询有五种连接方式

    # 1、交叉查询(了解)

    select *

    from dept,emp

    SELECT * from emp cross join dept;

    # 笛卡尔积现象

     内连接

    SELECT *

    FROM emp,dept

    WHERE emp.deptid = dept.id                             

    SELECT e.*,t.name as deptname, t.describle deptdesc from emp as e inner join dept t on (e.deptid = t.id)

    外连接

     外连接分为左外连接和右外连接

    SELECT e.*,d.name deptname, d.describle deptdesc FROM emp e LEFT JOIN dept d on(e.deptid=d.id);

    SELECT e.*,d.name deptname, d.describle deptdesc FROM emp e RIGHT OUTER JOIN dept d on(e.deptid=d.id);

    # 自然连接 真正的开发中用不到

    SELECT * from emp natural join dept;

     自连接

    # 查询用户id为1的部门名称

    SELECT name

    from dept

    WHERE id = (SELECT deptId from emp where id=8);

    子查询

    将一个查询结果作为条件的一部分写入到第二个sql中

    如 姓名为zs的用户的部门名称:

    Select deptname from dept where deptid = (select deptid from emp where empname = ‘zs’)

    SELECT d.name

    from emp e ,dept d

    WHERE e.deptid=d.id and e.id = 1

    SELECT d.name

    from emp e INNER JOIN dept d on(e.deptid=d.id)

    where e.id = 1;

    相关文章

      网友评论

          本文标题:数据库2018-6-25

          本文链接:https://www.haomeiwen.com/subject/syhhyftx.html