目录

一.数据库

二.约束

1.修改非空约束

2.主键约束

3.唯一约束

4.检查约束

5.默认约束

6.外键约束

三.创建修改表

1.创建表

2.修改表

3.删除表

四.更新记录

1.添加记录

2.修改记录

3.删除记录

五.查询

1.简单查询

2.排序查询

3.查询时使用表达式进行列计算

4.使用别名和连接符

5.比较条件查询

6.范围条件查询

7.列表条件查询

8.模糊查询

9.模糊查询之特殊字符

10.复合条件查询

11.消除重复记录

12.聚合函数

13.分组查询

14.多表连接查询

15.子查询

16.使用exists的子查询

17.使用union运算符组合多个结果

18.函数查询

六.待学习


一.数据库

创建数据库:create database 数据库名称
修改数据库:alter database 数据库名称 。。。参考链接

删除数据库:drop database  数据库名称

使用数据库:use 数据库名称          在该数据库下写sql语句都需要先使用指定某个数据库

二.约束

一个数据库中不能出现重复的约束名。

什么是约束,约束是对数据表中的属性添加约束条件。

首先可以创建一个简单的表,如下,然后对表添加约束。

create table S
(SNO char(10),SNAME char(10),STATUS int,CITY char(10)
);

1.修改非空约束

修改非空约束:修改某个属性可以为空或者不为空。

空值的意思是没有输入==NULL,不同于0、空白或长度为零的字符串(如“”)

alter table table_name
alter column column_name column_type null | not null

table_name:表名

column_name:列名

column_type:列的类型

实例:

alter table S2
alter column SNO  char(10)  not null

SSMS中可以直接操作,不用SQL语句

2.主键约束

创建主键的时候,可以添加一个属性为主键,也可以设置多个字段为主键。

(1)在现有的表中添加约束

alter table table_name
add constraint  constraint_name
primary key(column_name1,column_name2...)

table_name:表名

constraint_name:约束名

column_name:列名1,2...

例子:

alter table S2
add constraint ming
primary key(SNO)
--primary key(SNO1,SNO2)  设置多个属性为主键

(2)删除约束

alter table table_name
drop constraint  constraint_name1, constraint_name2...

例子:

alter table S2
drop constraint ming
--删除多个约束
--drop constraint ming1,ming2

3.唯一约束

(1)在现有的表中添加约束

唯一约束unique 用于强制实施列集中值的唯一性。根据unique约束,表中的任何两行都不能有相同的列值。主键也强制实施唯一性,但主键不允许NULL作为一个唯一值。

唯一约束可以约束多个属性,当包含多个属性时,就是这个属性组不能重复,例如:

在有一行属性1 属性2的值为1 2的情况下,可以插入2 1,但是不能插入1 2

NULL也算一个值,只有一个NULL

alter table table_name
add constraint  constraint_name
unique(column_name1,...)

column_name1:可以有多个列名

例子:

alter table S2
add constraint ming
unique(ceshi)alter table S2
add constraint ming2
unique(ceshi1,ceshi2)

(2)删除约束

和2.(2)中的一样,删除约束名就好了。

4.检查约束

检查约束:就是在插入值的时候,该属性必须满足这个约束

(1)在现有的表中添加约束

alter table table_name
add constraint  constraint_name
Check(logical_expression)

table_name:表名

constraint_name:约束名

logical_expression:要检查约束的条件表达式

alter table S2
add constraint ming3
check (CITY in('上海','1'))--多种条件表达式
--check (CITY in('上海'))
--check (CITY='上海')
--check (ceshi between 0 and 100)
--check (ceshi>0 and ceshi<100)

(2)删除约束 同上

5.默认约束

默认约束就是插入一行属性值时,如果这个属性没有指定对应的值,则系统会根据默认约束自动默认值。

(1)在现有的表中添加约束

alter table table_name
add constraint  constraint_name
default constraint_expression for column_name

table_name:表名

constraint_name:约束名

constraint_expression :默认值

column_name:列名

例子:

alter table S2
add constraint ming
default '上海1' for CITY

(2)删除约束 同上

这个默认的约束在SSMS中,要在​这里找。

6.外键约束

创建外键约束时,首先关联的2个表中都需要有主键,在创建外键的这个表叫做外键表,关联的表时主键表,必须关联主键表中的主键。

如果主键表中的主键有多个属性,那么外键表中的这个外键也就需要有多个属性相对应。

对应属性的类型要一致。

外键表中的外键值必须存在与主键表中的主键值。

某一行的外键组中有一个属性值为NULL,则就不遵从外键约束。

外键约束定义的时候有3种情况。

外键表中的主键也可以作为外键创建外键约束。

(1)在现有的表中添加约束

alter table table_name
add constraint  constraint_name
foreign key(column_name1,column_name2...)
references ref_table(ref_column_name1,ref_column_name2...)
--第1种情况如上,后面什么也没加,若子记录存在, 则拒绝删除主记录
--最后面加上 on delete cascade
--第2种, 若子记录存在, 则删除主记录时, 级联删除子记录
--最后面加上 on delete set null
-- 第3种, 若子记录存在, 则删除主记录时, 子记录置空

table_name:表名

constraint_name:约束名

constraint_expression:默认值

column_name:列名

例子:

alter table S2
add constraint  constraint_name2
foreign key(ceshi1)
references S1(ceshi111)
--上面是一种约束的情况,(ceshi1,ceshi2)则是多种约束的情况。
--references S1(ceshi111) on delete cascade
-- 第2种, 若子记录存在, 则删除主记录时, 级联删除子记录
--references S1(ceshi111) on delete  set null
-- 第3种, 若子记录存在, 则删除主记录时, 子记录置空 

(2)删除约束 同上

一对一关系:2个相关列都是主键或具有唯一约束,这2个表创建的就是一对一关系。

一对多关系:如果在相关列中只有一列是主键或具有唯一约束,则创建的就是一对多关系。

多对多关系:是指关系表中每个表的行在相关表中具有多个匹配行。在数据库中,多对多关系的建立是依靠第3个表即连接表实现的,连接表包含相关的两个表的主键列,然后从两个相关表的主键列分别创建与连接表中匹配列的关系。

三.创建修改表

在上面我们详细介绍了如何修改表的约束,这里我们来介绍创建表以及修改删除表的操作。

1.创建表

定义表的基本语法

Create Table 表名 (   列名 数据类型 [列级约束, ...], ... [表级约束, ...] ); 

列级约束是定义在列属性中的,而表级约束是定义在列之后的,两者本质上没什么区别,而如果你的约束需要同时对多列进行约束那么就只能采用表级约束,因为表级约束面向的是表(当然就包括所有列),而列级约束只能针对该列进行约束。

例子:

create  table A1
(
a1 varchar(10) not null,    --不能取空值,默认的是可以取空值a2 int primary key,            --主码
a3 int unique,              --取值唯一
a4 int,
city nvarchar(10) check(city in('1','2')),  --检查约束
sex nvarchar(10) default '女',     --默认值,默认约束
foreign key(a4) references A2(aa)   --外码a4,对应主键表A2,中的aa属性
--如果有多个属性在口号内就添加多个属性
--例如foreign key(a4,a5) ) references A2(aa,ab),--如果主码有多个属性
--primary key(b1,b2)
--如果唯一约束包括多个属性
--unique(b1,b2)
a5 int identity(0,1)    --设置属性递增,identity标识列1个表只能设置1个
--identity(m,n)      m表示的是初始值,n表示的是每次自动增加的值
--如果插入某条记录不成功的时候,这个属性也是会自己默认递增的,
--假如之前是1,插入一条记录失败后,再插入一条记录的值则会递增到2
);

2.修改表

(1)向表中添加一个属性

alter table 表名
add 属性名 数据类型    约束条件(可有可无)

例如:

alter table S
add ceshi nvarchar(10)
--添加约束条件
--add ceshi nvarchar(10) not null

(2)从表中删除一个属性

alter table 表名
drop column 列名

例如:

alter table Sdrop column ceshi 

3.删除表

drop table 表名

例如:

drop table S 

总结二三章修改表的代码集合

    alter table 表名 [add 列名 数据类型 [列级约束]] |        --添加属性,如果表中有数据,新增加的列取空值。 [add [constraint 约束名] 表级约束] | --添加约束,不指定约束名时需省略,自动命名[alter column 列名 数据类型] |      --修改列的数据类型[drop column 列名] |                --删除指定的列。 [drop constraint 约束名];            --删除约束alter column (Oracle使用modify)
Oracle中的例子:alter table student modify Age int; 

四.更新记录

1.添加记录

(1)基本语法

insert into 表名(列名1,列名2...) values(值1,值2...);

例子:

--第一种插入
insert into t_student1(no,name) values(1,'lisi');
--第二种插入,不按照字段顺序
insert into t_student1(name,no) values('zhangsan',2);
--第三种插入,只插入一个字段,其余字段不管
insert into t_student1(name)  values('wanger');
--第四种插入,字段可以省略不写,但是后面的value对数量和顺序都有要求
insert into t_student2 values(3,'tom');  
--第五种插入多行数据
insert into t_student2(no,name) values (3,'rose'),(4,'domi');

(2)还有第二种语法,从别的表复制数据,然后把数据插入到这个表中

insert into 表名(列名1,列名2...) select语句;

例如:

insert into table2 select * from table1;
insert into Websites(name, country) select app_name, country from apps;insert into Websites(name, country) select app_name, country from apps where id=1;

2.修改记录

更新记录的语法模板:

update 表名 set 列名1 = 值1 ,列名2 = 值2...[where子句];

例子:

update A1 set sex='男';
--将A1表中所有数据的sex字段都改为‘男’
update A1 set sex='男' where  name="大卫";
--将A1表中name为‘大卫’的人的sex设置为‘男’

3.删除记录

基本语法模板

delete from 表名 [where子句];

例子:

delete from table_name;
--删除所有的行记录
delete from Person where LastName = 'Wilson';
--LastName = 'Wilson' 的记录会被删掉
delete from Websites where name='Facebook' and country='USA';
--name='Facebook' and country='USA'的记录会被删掉

两表连接进行 delete,参考:参考链接

五.查询

1.简单查询

select * from emp;
--查询表的所有数据,根据主键递增排序  select * from 表名;
select empno,ename from emp;
--查询表中制定字段的值 select  字段名1,字段名2,... from  表名
--查询字段的值是否为空
select empno,ename from emp where empno is not null;
--select * from 表名 where 字段名 is null    字段值为null
--select * from 表名 where 字段名 is not  null    字段值不为null

2.排序查询

--单字段排序
--select * from 表名 order by 字段名 asc  升序排序 asc可以省略不写
--select * from 表名 order by 字段名 desc 降序排序
select * from emp order by empno asc;     --(缺省默认)升序
select * from emp order by empno desc;   --降序
--多字段排序
--select * from emp order by 字段名1,字段名2.。
--先按照字段1排序,如果字段1的值相同,则按照字段2排序。。。
select * from emp order by empno,ename;

3.查询时使用表达式进行列计算

--select 表达式1,字段1, ... from 表名
--表达式可以是 字段1+1 也可以是 字段1+字段2 ,或者 字段1+‘字符串’
--相加的字段类型必须一样
select class+name ,age+1 from Student
--从Student表中查询班级加姓名的字符串和年龄+1的记录

4.使用别名和连接符

因为表达式列运算后是没有名称的,所有可以在字段后使用关键字  字段名 as "别名"

select mgr as "领导编号",sal+comm as "薪资"from emp;select empno 员工编号,ename "员工姓名",job as 工作 from emp;
--注意:as关键字可以省略不写,别名中没有特殊字符双引号也可以省略不写--连接符:把几个字段名和字符连接在一起,形成一个属性名
--oracle数据库中的连接符是 || ,SQL Server数据库中的连接符是+
--select empno||'的姓名是'||ename as "信息",job||'哈哈'||mgr from emp;
select bb1 +'asd' from B2;

5.比较条件查询

select * from A1 where age>80 and age<90
--查询age在80-90之间的数据
select * from A1 where age<=80 or age>=90
--查询age不在80-90之间的数据
select * from A1 where age !=30
--     !=和<>都表示不等于
select * from A1 where age!<90
-- !<表示不小于,!<表示不大于,没有!<=这种情况的表示

6.范围条件查询

select * from A1 where age between 80 and 90
--查询age在80-90之间的数据
select * from A1 where age not between 80 and 90
--查询age不在80-90之间的数据

7.列表条件查询

select * from A1 where name in('张三','李四');
--查询name存在于目标数组['张三','李四']中的数据
select * from A1 where name not in('张三','李四');
--查询name不在目标数组['张三','李四']中的数据

8.模糊查询

--  %表示由0或多个字符组成的字符串,int类型和字符串类型都有效
select * from A1 where name like '陈%' and tel like '%3%';
--查询姓陈的和 电话号中包含3(以3开头和以3结尾都是)的数据--  _表示任意单个字符,不能是空字符
select * from A1 where name like '吕_巍';
--查询姓‘吕’并且末尾字是‘巍’的数据-- []用于指定范围,例如[A-F]表示A到F范围内的任何单个字符
select * from A1 where sno like '[A-F][0-9]';
--查询学号是A0-A9.....F0-F9的数据-- [^]用于指定范围,例如[A-F]表示A到F范围之外的任何单个字符
select * from A1 where sno like '[^A][^6-9]';
--查询学号第1位不是A,第2位不是6-9之间的数据

9.模糊查询之特殊字符

“%”、“_”和“[]”单独出现时,会被认为是通配符。这时候要查询是否包含对应的特殊字符时,就需要用到转义字符。

escape将指定的字符变为转义字符,转义字符可以将特殊字符转为普通字符

select * from emp where ename like '%\_%' escape '\' ;
select *  from B2 where c1 like'%\[]%'escape '\' ;
--select * from 表名 where 字段名 like '%字符2字符1%' escape '字符2'
--字符2是转义字符

10.复合条件查询

select * from A1 where age>80 and age<90
--查询age在80-90之间的数据
select * from A1 where age<=80 or age>=90
--查询age不在80-90之间的数据
select * from A1 where name not in('张三','李四');
--查询name不在目标数组['张三','李四']中的数据
--逻辑运算符and,or,not

优先级:not>and>or

select * from A2 where (age>20 and sex='nv' or age>22 and sex='nan') and tel ='1';
--查询年龄大于20岁的女生或者年龄大于22岁的男生,并且电话号码是1的数据
select * from A2 where ((age>20 and sex='nv') or( age>22 and sex='nan')) and tel ='1';
--为了好区别最好是都带上括号

11.消除重复记录

select distinct age from A2;
--只查询age并将结果去重
select distinct age,sex from A2;
--对于多个列,对多个属性组成的集合去重,结果中没有完全相同的2行
--例如:age sex中有记录 1 2,2 1,1 2, 最后只显示1 2和2 1

12.聚合函数

select sum(sal) from emp;
--支持数字类型,对非空值求和
select avg(sal) from emp;
--支持数字类型,对非空值求平均值
select min(sal) from emp;
--支持数字、字符和日期类型,返回指定列中的最小数字、最小的字符串和最早的日期时间
select  max(sal) from emp;
--支持数字、字符和日期类型,返回指定列中的最大数字、最大的字符串和最近的日期时间
select count(*) from emp;
--支持任意基于行的数据类型, 查询表的记录数,最多可达2147483647行
--count(*) 返回表的记录数
--count(字段名) 返回非空值的数量
--count(distinct 字段名) 去除重复后的字段值的数量

13.分组查询

因为多行函数不能和字段直接混用,多行函数不能和单行函数混用,所以需要分组。
      --错误语句 select ename, max(sal) from emp;  
      --错误语句 select lower(ename),max(sal) from emp;

--select 字段名,聚合函数 from 表名 group by 字段名
--select字段列表中,除了聚合函数,其他所有字段都要在group by子句中出现
--在SQL Server中,text、ntext和image数据类型的字段不能作为group by的分组依据
--group by子句不能使用字段别名select age,sum(age) from A2  group by  age;
--查询表A2中age的数据,然后对age去重,后面显示每个去重age的sumselect age,sum(age) from A2 where tel>10 group by  age;
--查询表A2中tel>10的age的数据,然后对age去重,后面显示每个去重age的sumselect age,sum(age) from A2 where tel>10 group by age having age>22;
--查询表A2中tel>10的age的数据,然后对age去重,去重后再去掉age<=22的数据,后面显示每个去重age的sum--分组之前的条件要用where关键字,分组之后的条件要用having子句

14.多表连接查询

(1)交叉连接

交叉连接是2个表的笛卡尔积,即2个表的记录进行交叉组合显示出来。

select * from B1 cross join B2;
select B1.b1,B2.bb1 from B1 cross join B2;
--只把B1的b1和B2的bb1显示出来

(2)内连接

内连接就是在交叉连接的基础上,筛选满足条件的数据(不过join关键字不一样)

select* from B1 inner join B2 on B2.bb1=B1.b2;
--关键字是inner join 筛选满足B2.bb1等于B1.b2的数据

(3)外连接

外连接扩充了内连接的功能,会把内连接中删除的原表中的一些行保留下来,由于保留下来的行不同,因此又把外连接分为左外连接、右外连接和全外连接3种连接。

<1>左外连接

左外连接保留了第1个表的所有行,但是只包含了第2个表与第1个表的匹配行,第2个表相应的空行被放入null值。

select* from B1 left join B2 on B1.b1=B1.b2;

<2>右外连接

右外连接保留了第2个表的所有行,但是只包含了第1个表与第2个表的匹配行,第1个表相应的空行被放入null值。

select* from B1 right join B2 on B1.b1=B1.b2;

<3>全外连接

全外连接会把2个表所有的行都显示在结果表中,并尽可能多地匹配数据和连接条件。

select* from B1 full join B2 on B1.b1=B2.bb2;

显示结果如下图所示。

15.子查询

where 查询表达式  in|not in (子查询语句)

子查询语句就是使用select语句的基本查询语句

select * from B1 where b1 in(select bb2 from B2);
select * from B1 where b1 not in(select bb2 from B2 where bb1=1);

16.使用exists的子查询

exists谓词只注重子查询语句是否返回行,如果子查询返回1个或多个行,则为真,执行前面的查询语句,否则不执行查询语句。

exists谓词子查询的select子句中可使用任何列名,也可以使用任意多个列,这种谓词只注重是否返回行,而不注重行的内容。

select null from B2 where bb1=1;
--select null 就是查出来有几行,每行的都有一个null
select *  from B2 where exists(select null from B2 where bb1=1);
--如果B2中有bb1=1的条件,就执行select *  from B2的查询语句
select *  from B2 where not  exists(select null from B2 where bb1=1);
--逻辑和上面的相反,如果B2中没有bb1=1的条件,就执行select *  from B2的查询语句

查询结果:

17.使用union运算符组合多个结果

表的合并操作是指将2个表的行合并到单个表中。

构造合并查询时必须遵守的规则

(1)所有查询中的列数和列的顺序必须相同

(2)数据类型必须兼容

(3)作为对所有select语句的合并操作结果进行排序的order by子句,必须放到最后一个select后面,但它所使用的排序列名必须时第1个select选择列表中的列名。

select * from B1 union select*  from B2;
--union语句会自动根据查询的第1个字段进行升序排序,会去除重复的行
select * from B1 union select*  from B2 order by c1 desc;
--根据c1降序显示,order by的属性必须是第一个表的属性
select * from B1 union all  select*  from B2;
--union all语句,不会去重,显示所有的行,会先显示第1条查询的数据,下面再显示第2条的数据
--单独的select语句默认是根据主键递增排序
select * from B1 where b1!=0 union all  select*  from B2 where bb1!=0 order by b3 desc;
--也可以查几个字段,当然必须要对应彼此的表

18.函数查询

select lower(bb1),upper(bb1),lower('HAHA') ,upper('haha') from B2;
--小写函数,大写函数,这列所有行都是HAHA的小写,最后一列的所有行都是haha的大写
select abs(-1),ceiling(2.2),floor(3.3),power(2,3),round(4.55,1) from B2;
--绝对值,取整(大),取整(小),取平方,四舍五入

不同的数据库中还有许多不同的函数名称和用法,具体需要百度吧。

六.待学习

有待学习的

select  for update语句

索引

存储过程:这个涉及到C#的相关编程,项目中服务器的有个代码可以看看,

触发器

流程控制语句,在写存储过程的代码的过程中,可能需要用到流程控制语句进行判断。

事务:这个主要是执行多条语句中某一条语句失败,就撤销返回本次的所有语句。

视图

--建表
create table S
(SNO char(10),SNAME char(10),STATUS int,CITY char(10)
);create table P
(PNO char(10),PNAME char(10),COLOR char(10),WEIGHT int
);create table J
(JNO char(10),JNAME char(10),CITY char(10)
);create table SPJ
(SNO char(10),PNO char(10),JNO char(10),QTY char(10)
);
--输入信息
insert into S(SNO,SNAME,STATUS,CITY) values ('S1','精益',20,'天津');
insert into S(SNO,SNAME,STATUS,CITY) values ('S2','盛锡',10,'北京');
insert into S(SNO,SNAME,STATUS,CITY) values ('S3','东方红',30,'北京');
insert into S(SNO,SNAME,STATUS,CITY) values ('S4','丰泰盛',20,'天津');
insert into S(SNO,SNAME,STATUS,CITY) values ('S5','为民',30,'上海');insert into P(PNO,PNAME,COLOR,WEIGHT) values('P1','螺母','红',12);
insert into P(PNO,PNAME,COLOR,WEIGHT) values('P2','螺栓','绿',17);
insert into P(PNO,PNAME,COLOR,WEIGHT) values('P3','螺丝刀','蓝',14);
insert into P(PNO,PNAME,COLOR,WEIGHT) values('P4','螺丝刀','红',14);
insert into P(PNO,PNAME,COLOR,WEIGHT) values('P5','凸轮','蓝',40);
insert into P(PNO,PNAME,COLOR,WEIGHT) values('P6','齿轮','红',30);insert into J(JNO,JNAME,CITY) values('J1','三建','北京');
insert into J(JNO,JNAME,CITY) values('J2','一汽','长春');
insert into J(JNO,JNAME,CITY) values('J3','弹簧厂','天津');
insert into J(JNO,JNAME,CITY) values('J4','造船厂','天津');
insert into J(JNO,JNAME,CITY) values('J5','机车厂','唐山');
insert into J(JNO,JNAME,CITY) values('J6','无线电厂','常州');
insert into J(JNO,JNAME,CITY) values('J7','半导体厂','南京');insert into SPJ(SNO,PNO,JNO,QTY) values('S1','P1','J1','200');
insert into SPJ(SNO,PNO,JNO,QTY) values('S1','P1','J3','100');
insert into SPJ(SNO,PNO,JNO,QTY) values('S1','P1','J4','700');
insert into SPJ(SNO,PNO,JNO,QTY) values('S1','P2','J2','100');
insert into SPJ(SNO,PNO,JNO,QTY) values('S2','P3','J1','400');
insert into SPJ(SNO,PNO,JNO,QTY) values('S2','P3','J2','200');
insert into SPJ(SNO,PNO,JNO,QTY) values('S2','P3','J4','500');
insert into SPJ(SNO,PNO,JNO,QTY) values('S2','P3','J5','400');
insert into SPJ(SNO,PNO,JNO,QTY) values('S2','P5','J1','400');
insert into SPJ(SNO,PNO,JNO,QTY) values('S2','P5','J2','100');
insert into SPJ(SNO,PNO,JNO,QTY) values('S3','P1','J1','200');
insert into SPJ(SNO,PNO,JNO,QTY) values('S3','P3','J1','200');
insert into SPJ(SNO,PNO,JNO,QTY) values('S4','P5','J1','100');
insert into SPJ(SNO,PNO,JNO,QTY) values('S4','P6','J3','300');
insert into SPJ(SNO,PNO,JNO,QTY) values('S4','P6','J4','200');
insert into SPJ(SNO,PNO,JNO,QTY) values('S5','P2','J4','100');
insert into SPJ(SNO,PNO,JNO,QTY) values('S5','P3','J1','200');
insert into SPJ(SNO,PNO,JNO,QTY) values('S5','P6','J2','200');
insert into SPJ(SNO,PNO,JNO,QTY) values('S5','P6','J4','500');go
create view V as select SNO,SPJ.PNO,QTY from SPJ,J where SPJ.JNO=J.JNO and J.JNAME='三建';
go
select distinct PNO,QTY from V;
select distinct *from V where SNO='S1';

分区表

关于分区表这个暂时需不需要还不是很了解

1:啥是分区表?
创建表的时候,使用了数据分区相关的语法,存储数据的时候,存储引擎会根据分区规则将不同的数据存入不同的分区文件。
2:使用分区表的劣势?
2-1:MySQL 在第一次打开分区表的时候,需要访问所有的分区——打开的表较多,性能糟糕也可能报打开的表超过设置的问题。
2-2:在 server 层,认为这是同一张表,因此所有分区共用同一个 MDL 锁——锁粒度大,影响并发度,站在Server看也是合理的,不过站在存储引擎的角度看就不合理了。
2-3:在引擎层,认为这是不同的表,因此 MDL 锁之后的执行过程,会根据分区表规则,只访问必要的分区——被访问到的分区。
3:使用分区表的优势?
分区表的一个显而易见的优势是对业务透明,相对于用户分表来说,使用分区表的业务代码更简洁。还有,分区表可以很方便的清理历史数据。
4:啥时候适合使用分区表?
单表过大时,使用时注意一下两点
4-1:分区并不是越细越好。实际上,单表或者单分区的数据一千万行,只要没有特别大的索引,对于现在的硬件能力来说都已经是小表了。
4-2:分区也不要提前预留太多,在使用之前预先创建即可。比如,如果是按月分区,每年年底时再把下一年度的 12 个新分区创建上即可。对于没有数据的历史分区,要及时的 drop 掉。
5:使用分区表,有其特点的根本原因?
对于Server层,分区表还是一个表
对于存储引擎层,分区表会是多张表

总结下
1 由于分区表都很大,DDL耗时是非常严重的,必须考虑这个问题
2 分区表不能建立太多的分区,我曾被分享一个因为分区表分区过多导致的主从延迟问题
3 分区表的规则和分区需要预先设置好,否则后来进行修改也很麻烦

模式与表
 
定义基本表时如果需要指定它所属的模式, 通常使用的方法是在表名中显式给
模式名,即使用“模式名.表名”的形式指定表名。

Create Table "S-T".Student(...); -- Student所属的模式是S-T

数据库基本知识-总结相关推荐

  1. 软件测试培训分享:做软件测试需要掌握数据库的知识吗?

    最近几年,学习软件测试的同学越来越多,大家对于"做软件测试需要掌握数据库的知识吗?"这个问题都比较关注,那么下面小编就来为大家做下详细的介绍. 软件测试培训分享:做软件测试需要掌握 ...

  2. java学习与总结:MySQL和数据库基础知识

    文章目录 MySQL MySQL数据库索引数据结构 B树和B+树的区别 MySQL一条数据是怎么保存到数据库的 WAL : WRITE AHEAD LOG binlog 和 redo log 流程 M ...

  3. 1.0 MySQL数据库基础知识

    MySQL数据库基础知识 MYSQL介绍 MySQL分支版本的发展 MySQL. Oracle. SQLServer的市场区别 MYSQL数据库使用上的结构 MYSQL体系架构图 MYSQL体系架构- ...

  4. 一文聊“图”,从图数据库到知识图谱

    作者 | 穆琼 责编 | 晋兆雨 头图 | 付费下载于视觉中国 随着知识图谱的发展,图数据库一词被越来越多的提到.那么到底什么是图数据库,为什么要用图数据库,如何去建设一个图数据库应用系统,图数据库与 ...

  5. oracle数据库中基础知识,oracle数据库基础知识

    oracle数据库基础知识 -- End loop --1 declare pnum number(4):=0; begin while pnum < 10 loop dbms_output.p ...

  6. 重做 oracle_Oracle数据库基本知识(1)-数据库(1)

    一. 数据库相关概念 1 什么是数据库? 所谓的数据库其实就是数据的集合.用户可以对集合中的数据进行新增.查询.更新. 删除等操作.数据库是以一定方式储存在一起.能与多个用户共享.具有尽可能小的冗余度 ...

  7. 二级Access数据库大纲知识要点

    一.数据库基础知识 1.基本概念 1.1 数据库 数据库:指存储在计算机存储设备上.大量结构化的.可共享的相关数据的集合. 信息.消息.信号.数据.知识: 数据库管理系统(DBMS):指帮助用户建立. ...

  8. oracle数据库基础知识总结,oracle数据库基础知识学习笔记

    oracle数据库基础知识学习笔记 一.oracle数据库类型: Char:  字符型(最大长度2000,定长.不足时以空格补充) Varchar2:字符型 最大长度 4000,变长,实际长度由存储的 ...

  9. numeric比较大小 数据库_数据库基础知识个人整理版-强烈推荐

    <数据库基础知识个人整理版-强烈推荐>由会员分享,可在线阅读,更多相关<数据库基础知识个人整理版-强烈推荐(20页珍藏版)>请在人人文库网上搜索. 1.数据库知识要点总结第一章 ...

  10. 大数据的分布式数据库相关知识

    现如今,大数据的发展得到了越来越多人的关注,当然,很多企业也开始关注大数据,通过大数据可以从数据中挖掘出有价值的数据,从而找出隐藏的商机,而大数据的分布式数据库是一个十分重要的内容.我们在这篇文章中就 ...

最新文章

  1. linux安装ffmpeg
  2. 《Linux内核设计与实现》读书笔记(二)- 内核开发的准备
  3. flex ColorPicker
  4. 服务员就结账了的p8u8
  5. Bootstrap快速浮动.pull-left 或 .pull-right 类
  6. sql 如何设置行级锁_SQL Server 2016中的行级安全性
  7. 力扣题目——230. 二叉搜索树中第K小的元素
  8. 如何打开电脑上的安全策略
  9. Confluence 6 嵌套用户组的示例
  10. hibernate中的saveOrUpdate()报错
  11. mysql主机地址会什么问题_mysql的主机地址
  12. Hadoop学习2:Hadoop环境配置:JDK 1.8和Hadoop配置
  13. 用友集团前端面经整理及答案
  14. 深度解析 | 炎症,肠道菌群以及抗炎饮食
  15. slqdbx mysql_sqldbx下载 v4.3 附sqldbx使用教程
  16. 怎么调节PDF文件的尺寸大小?
  17. pt-table-checksum使用总结
  18. 「独立站必备工具」25种检测竞争对手网站的分析工具
  19. 输入四个整数,输出其中最小的数
  20. 看完全都会了!阿里巴巴java开发工程师待遇

热门文章

  1. 《神经网络与深度学习》中文版推荐
  2. 将qq目录下文件写如qq.txt
  3. 图卷积(1)——从欧式空间到非欧式空间
  4. fiddler重放请求
  5. linux配置gcc环境,linux gcc4.8安装(多个gcc环境)
  6. 虚拟机ubuntu14.04编译MPI版本NAMD
  7. Java经典面试题答案解析(1-80题)
  8. java SQL常用语句总结大全(超详细)
  9. vue——双层循环嵌套
  10. 同步与异步区别之我见(一)