#数据库 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!