虚拟机中数据库操作

#数据库 database
#按照数据结构来组织、存储和管理数据的仓库。
#自定义:库>表>(表结构+表数据+索引(数据结构:查)+自定义函数+存储过程)
#表结构:数据结构
#存储引擎:innodb/事务transaction(lock/unlock:增删改)
#系统函数:字符串函数,数学函数,日期函数,聚合函数,其他
#自定义函数,存储过程的语法定义
#系统库:mysql:user/操作记录 syslogins.../schema...

#建库
show databases;                                        查当前系统下所有可见库
create database [if not exists] DATABASE_NAME;        创建[如果不存在]数据库
drop database [if exists] DATABASE_NAME;            删除[如果存在]数据库
use DATABASE_NAME;                                    进入数据库
#数据的完整性
1、实体完整性(行的唯一性)
2、域完整性
3、引用完整性
#数据类型  
            java                    js            mysql
字符        char/string                string        char(n:0~255:默认为1)/varchar(n:英文符号0~65535/中文符号21844 三分之一)可变长度/text(n:英文符号0~65535/中文符号21844 三分之一)
数值        byte/short/int/long/    number        unsigned(无符号 表示正值)tinyint(0~255)/smallint(0~65535)/int(11)/bigint
            float/double                        (float/double/real 三个非精确类型)
            BigInteger                            decimal(m,n)(m是最大长度65n是小数最大长度30)=numeric(m,n)默认mn为10和0
            BigDecimal
布尔        boolean                    boolean        bit
日期        Date                    Date        date/datetime/timestamp
            Calender
集合        T[]/Collection/Map        Array/[]
自定义        class T[]                function Constructor(){}/{}    


#约束
实体完整性的实现方法
1、唯一性约束(1列)            unique key
2、主键约束(1~N列)            primary key
3、自增列(1数据类型列)        auto_increment
域完整性的实现方法
1、为列选择恰当的数据类型    
2、非空约束                    not null
3、默认值约束                default
引用完整性的现实方法
1、外键约束                    foreign key
#建表
show tables;                查看当前库中的所有的表
create table TABLENAME{
    FIELDNAME [unsigned] datdtype [not null,default(VALUE),auto_increment,primary key,unique key],
    ...
};
#一般情况下:每一张表都是一个无意义的自增列{begin:1,step:1}作为主键
#为什么每张表都有主键:因为自动创建聚族索引;
#为什么主键都是自增列:因为可以更好的确保主键是唯一的特性;
#为什么需要主键无意义:因为有意义的字段具有不确定因素。

#查看表设计
desc TABLENAME;
#删除表
drop table [if exists] TABLENAME;

#结构操作
show/create/drop

#数据操作(增删改查)
insert into TABLENAME(FIELDS...)values(VALUES...);
#可以不出现在·字段列表中的字段如下:
    #1、自增列主键不允许出现                xxx auto_increment primary key,
    #2、允许为空,且当前字段的值为null        无not null,
    #3、有默认值,且当前字段的值为n默认值    xxx default VALUE,
    #一条语句添加多条数据
    1、insert into TABLENAME(FIELDS...)values(VALUES...),...,(VALUES...);
    目标表DESTTABLE必须存在
    2、insert into DESTTABLE(FIELDS...)select FIELDS... from OTHERTABLE;
    DESTTABLE必须不存在
    3、create table [if not exists] DESTTABLE(select FIELDS...from OTHERTABLE);

#删除操作[禁用]
1、delete from TABLENAME where id=...
2、delete from TABLENAME where id in(...)
#关系运算符 = !=和<>一样
#id>=min and id<=max <=> id between min and max
#mysql中的逻辑运算符and or not
#like '教%' like '教_' %表示任意长度任意内容 _表示一个长度任意内容
# is [not] NULL        [不]为空        
truncate table TABLENAE;

#修改操作
update TABLENAME set field=VALUE,...,fieldn=VALUEN where id=...;

#数据库的查询操作
#1、简单查询
    select
        FIELDS...    列删选
    from
        TABLENAME
    where(一次筛选,分组前的条件)
        ..            行删选
    group by(能查出来的列只有两种:分组依据列和聚合函数)
        FIELDS...    左1主,其右依次为辅,以逗号分隔
    having(二次筛选,分组后的条件)
        ...            分组结果二次筛选
    order by        排序
        [FIELD ASC默认(升序)/DESC(降序)]
    limit             当前页码:pageNo,每页的数据量:pageSize,总页数:total
        (pageNo-1)*pageSize,pageSize
        
#聚合函数:avg,min,max,count,sum
#列别名 select id,count(1) [stuNum]...
#分组查询【可以】出现在字段列表中的字段:参与分组的字段和聚合函数
        
    
#2、-------------复杂查询---------------
    #------------------子查询------------------
    select
        可以出现子查询
    from
        可以出现子查询
    where
        可以出现子查询    但在in/call/some/any子查询中不能使用limit
    group by
        不可以出现子查询
    having
        可以出现子查询
    order by        
        不可以出现子查询
    limit             
        不可以出现子查询
    #合并查询
    select    
        FIELDS...
    from
        TABLE1,...,TABLEN...
    #连接查询    数据多的前置优化查询(从表前置)
    #内连接(交集)
    select    
        FIELDS...
    from
        TABLE A
    inner join
        TABLE B
    on
        A.fk=B.pk
    
    #外连接(主从关系)
            左外(左主右从)左表数据全部显示,右表没有的数据由null填充
            右外(右主左从)右表数据全部显示,左表没有的数据由null填充
            全外(全是主表)左右数据全部显示,没有的数据由null填充

#--------mysql不允许插入中文的解决方法--------
vi /etc/my.cnf
i
[client]
default-character-set=utf8
[masqld]
default-storage-engine=INNODB
collation-server=utf8_ge
character-set-server=utf8neral_ci

需要找到下面两行代码把它们注释掉(加#)
#symbolic-links=0
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysql]
default-character-set=utf8
:wq!

你可能感兴趣的:(linux)