--- MySQL:关系数据库

--- 完整性约束

-- 1.实体完整性:包含主键、唯一键。保证数据记录不重复(表中不能出现两行完全相同的记录)。

-- 2.域完整性:记录的取值应该有规定的范围。

-- 3.参照完整性:表与表之间相关联的字段,应该保持统一。

--- 数据库结构的创捷和修改

--数据库系统:数据管理系统(DBMS)->数据库(DB)->数据表(table)->行(row)和列(colum),数据应用软件、数据库的管理员、用户

--数据库系统的核心:数据管理系统(DBMS)

-- 注释:-- or #

-- 1.查看数据库

show databases;

-- 2.创建数据:

-- create database [if not exists] 数据库名;

create database MySchool;

-- create database 数据库名 [charset 编码格式] [engine 数据库引擎];

--create database helloo charset gbk;

-- 查看数据的描述语句

--show create database hello

-- 查看数据库系统支持的字符集

show variables like "character_set%";-- 通配符:_ 表示单个字符,   %表示任意长度的字符

--设置数据库的字符集

set names gbk;

-- 3.删除数据库(慎用)

-- drop database [if exists] 数据库名;

--drop database `database`;--不要用关键字或保留字作为数据库的名字

-- 4.选择数据库

-- use 数据库名;

use MySchool;

-- 5.创建数据表

-- create table [数据库名.]表名(属性1 数据类型1,属性2 数据类型2,……);

-- create table student(Id char(8),Name varchar(20),Sex char(2),Identify char(18),Birthday date);

-- 创建带主键的数据表:主键字段默认不能为空

create table MySchool.student(Id char(8) primary key ,Name varchar(20),Sex enum('男','女') default '',Identify char(18),Birthday date) charset gbk;

-- 创建非空、字段带默认值得数据表

create table student(Id char(8) primary key ,Name varchar(20) not null,Sex char(1) not null DEFAULT 1,Identify char(18),Birthday date);

-- 为字段加注释信息

-- create table 表名(字段名 数据类型 comment 注释)

create table student(Id char(8) primary key comment '学号',Name varchar(20) not null,Sex enum('男','女') default '男',Identify char(18),Birthday date) charset gbk;

-- 为字段加约束条件

create table student(Id char(8) primary key comment '学号',Name varchar(20) not null,Sex char(1) not null DEFAULT 1 check(Sex=0 or Sex=1),Identify char(18),Birthday date) charset utf8;

--创建班级代码表

create table Sclass(class_Id char(6) primary key,class_Name varchar(10),teacher varchar(50),Class_pro varchar(30));

-- 通过查询生成表

create table student2 select st_id,st_name,class_Name from student inner join sclass on student.class_Id=sclass.class_Id;

-- 6.删除表

-- drop table 表名;

drop table student;

--7. 查看数据表

--show tables 表名;-- 查看数据空中的表

show tables student;

-- 查看数据表中的字段:show columns from 表名 from 数据库名;

show columns from student;

-- 查看数据表中的字段:describe 表名;

describe student;--缩写 desc student;

--8. 修改表结构

-- 修改表名

-- alter table 原表名 rename 新的表名

alter table student rename student1;

-- 修改字段名

-- alter table 表名 change 原字段名 新字段名 数据类型

alter table student change sex gender char(1);

-- 修改字段类型

-- alter table 表名 modify 字段名 数据类型

alter table student modify gender enum('男','女');

-- 增加字段

-- alter table 表名 add 字段名 类型 [after 字段名]

alter table student add class_Id char(6) after gender;

-- 删除字段

-- alter table 表名 drop [COLUMN] 字段名

alter table student drop birthday;

-- 实体完整性

alter table sclass add constraint primary key(class_Id);

-- 参照完整性设定

-- CASCADE 在父表上update/delete记录时,同步update/delete掉子表的匹配记录

-- SET NULL 在父表上update/delete记录时,将子表上匹配记录的列设为null(要注意子表的外键列不能为not null)

--NO ACTION 如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作

--RESTRICT 同no action, 都是立即检查外键约束,默认

alter table student add constraint fk_student_sclass foreign key (class_Id) references sclass(class_Id); --on delete/on update

---数据记录的增删改查:数据记录在存储过程中,行列无序

-- 插入记录:insert [into] 表名(字段列表) values (值列表)

insert into student(id,name,gender,class_Id,identify,birthday) values('18163536','陈小明','男','计应1801','123456789987654321','2000-1-1');

-- 未显示指定字段列表

insert into student values('18160001','张三','男','计应1801','12345678998765432X','2000-1-1');

-- 显示指定字段列表:保证列和值对应

insert into student (name,class_Id,id,gender) values('李小四','计应1801','18160002','男');

insert into student (name,class_Id,id,gender) values('王小五','计应1801','18160003');

-- insert into student (name,class_Id,id,gender) values('王小五','计应1801','18160003','0'); --成功,但无性别信息

-- insert into student (name,class_Id,id,gender) values('王小五','计应1801','18160003',0); --报错

-- insert into student (name,class_Id,id,gender) values('王小五','计应1801','18160003','1');--成功 信息正确

-- insert into student (name,class_Id,id,gender) values('王小五','计应1801','18160003',1);--成功 信息正确

insert into student (name,class_Id,id,gender) values('王小五','计应1801','18160003','2');-- 成功 信息正确

insert into student (name,class_Id,id,gender) values('王小五','计应1801','18160003',2);--成功 信息正确

insert into student (name,class_Id,id,gender) values('王小五','计应1801','18160003','3');-- 成功 信息正确

insert into student (name,class_Id,id,gender) values('王小五','计应1801','18160003',3);--成功 信息正确

-- 备注: enum类型从1开始计数,且使用非数值字符、数值字符或数字,均可完成数据插入。

-- 同时插入多条数据:insert [into] 表名(字段列表) values (值列表1),(值列表2),……

insert into student (name,class_Id,id,gender) values('范小六','计应1801','18160004',1),('张小七','计应1801','18160005',2);

insert into sclass(class_Id,class_Name,teacher,class_pro) values('186001','计应1801','董老师','计算机应用技术'),('186002','计应1802','董老师','计算机应用技术')

-- 批量数据导入

insert into student(id,name,class_Id) select 学号,姓名,班级 from st;

insert into student(id,name,class_Id) select 学号,姓名,班级 from st where 班级="计应1801" or 班级="计应1802";

-- 修改记录

-- 批量修改:update 表名 set 字段名1=值1,字段名2=值2,……

update student set class_Id='186001' ;

-- 按条件修改

update student set class_Id='186001' where class_Id="计应1801";

--修改有参照完整设定的数据记录

update student set class_Id='186003' where id="18163000";

update student set st_age= 2019-SUBSTRING(st_identify, 7 , 4)

--表关联操作(待续)

--update student set student.class_Id=student1.class_Id where student.st_id=student1.st_id;--报错

update student join student1 on student.st_id=student1.st_id set student.class_Id=student1.class_Id;

-- 查询记录

--语法:

-- select 字段列表 from 表名

-- 基本格式:select 字段列表 from 表名

-- 执行顺序:from(获取数据源)->select(挑选字段)

select st_id,St_Name,St_Sex,class_Id from student;--查询结果是数据集

--带条件查询:select 字段列表 from 表名 where 条件表达式

-- 执行顺序:from(获取数据源)->where(满足条件)->select(挑选字段:显示)

select st_id,St_Name,St_Sex,class_Id,St_Identify,St_Birthday from student where class_Id="186001";

--查询所有字段:使用字段通配符*

select * from sclass;

-- 查询多张表

select * from student,sclass;-- 产生一个笛卡尔积

select * from student,sclass where student.class_Id=sclass.class_Id;--当两张中有相同字段名时,另外的相同字段名会加编号

select St_Id,St_Name,St_Sex,class_Name,student.class_Id from student,sclass where student.class_Id=sclass.class_Id;--当两张中有相同字段名时,应指定字段所属的表。

--case语句

-- 格式一:

--case column

--  when condition then result

--  when condition then result

--  when condition then result

--  else result

--end

select St_Id,St_Name,CASE St_Sex

when '0' then '男'

when '1' then '女'

END,

class_Name from student,sclass where student.class_Id=sclass.class_Id;

-- 格式二:

--case

--  when condition then result

--  when condition then result

--  when condition then result

--else result

--end

select St_Id,St_Name,CASE

when  St_Sex='0' then '男'

when  St_Sex='1' then '女'

END,

class_Name from student,sclass where student.class_Id=sclass.class_Id;

--空值查找:不是等号,使用 is NULL

select * from student where St_Identify is NULL;

-- 排序: select 字段列表 from 表名 where 条件表达式 order by 排序字段 [升|降]

-- 执行顺序:from(获取数据源)->where(满足条件)->select(挑选字段)->order by(排序)

select * from student order by St_Name;--当未给出排序方式时,默认为升序 asc,排序字段若为汉字字符,即按照拼音排序

select * from student order by St_Id desc;

--多字段排序:

select * from student order by class_Id ASC,St_Name DESC

--类型转换:select 字段列表 from 表名 where 条件表达式 order by 排序字段1 升降序,排序字段2 升降序……

--cast:CAST(数据 AS 目标类型)

select st_name,CAST(St_Birthday as CHAR) as birthday from student;

--COVERT:convert(数据 , 目标类型)

select st_name,CONVERT(St_Birthday,CHAR) as birthday from student

--分组:group by

-- 执行顺序:from(获取数据源)->where(满足条件)->select(挑选字段)->group by(分组)->order by(排序)

select class_Name "班级", COUNT(St_Id) as '人数' from student,sclass where student.class_Id=sclass.class_Id group by student.class_Id;

select class_Name '班级', AVG(st_age) '平均年龄' from student,sclass where student.class_Id=sclass.class_Id group by student.class_Id;

select avg(score) from st_score group by st_id;

select St_Name,avg(score) as '平均分' from st_score,student where student.St_Id=st_score.st_id group by student.st_id order by 平均分 DESC;

-- HAVING:对聚合函数做条件判断的,配合聚合函数使用

-- 执行顺序:from(获取数据源)->where(满足条件)->select(挑选字段)->group by(分组)->HAVING->order by(排序)

select St_Name,avg(score) as '平均分' from st_score,student where student.St_Id=st_score.st_id group by student.st_id HAVING avg(score)>70 order by 平均分 DESC;

select St_Name,avg(score) as '平均分' from st_score,student where student.St_Id=st_score.st_id group by student.st_id HAVING 平均分>70 order by 平均分 DESC;

-- 查询

-- 精确查询

select * from student where St_Id='18160001';

-- 模糊查询

select * from student where LEFT(St_Name,1)="黄";

select * from student where LEFT(St_Name,1)="黄" and LENGTH(St_Name)=2;

select * from student where St_Name LIKE "黄%";

select * from student where LEFT(St_Name,1)="黄" and LENGTH(St_Name)=4;

select * from student where St_Name LIKE "%黄%";

-- 区间查询

select * from st_score where score<80 and score >60;

select * from st_score where score BETWEEN 60 and 80;--大数在后,小数在前

-- 限制记录查询

select * from st_score ORDER BY score desc LIMIT 5 ;--显示前5条记录

select * from st_score ORDER BY score desc LIMIT 10 OFFSET 4;--10表显示的记录个数,4表示距离第一条记录的间隔数

-- 关联查询

--内连接:[inner] Join

select st_id,st_name,class_Name from student,sclass where student.class_Id=sclass.class_Id;

select class_Name,st_id,st_name from student inner join sclass on student.class_Id=sclass.class_Id;

--外连接

-- 左连接:left join

select class_Name,st_id,st_name from sclass left join student on student.class_Id=sclass.class_Id;

-- 右连接:right join

select class_Name,st_id,st_name from student right join sclass on student.class_Id=sclass.class_Id;

-- 自然连接

select class_Name,st_id,st_name from student natural join sclass;

-- 交叉连接

select class_Name,st_id,st_name from student cross join sclass;

-- 联合查询:union,保证多条select语句中所包含的字段个数相同

select st_id,st_name,st_sex from student

UNION

select st_id,st_name,st_sex from student1

-- 去重:distinct:select distinct 字段列表 from 表名

SELECT DISTINCT st_name,st_sex from student;--姓名和性别组合后唯一

SELECT st_name,st_sex from student group by St_Name;

-- 删除记录:delete

delete from student;-- 慎用,删除全部记录

delete from sclass where class_Id='186001';

-- 事务

-- 四个特性:

-- 1.原子性:说明事务的操作是一个完整的整体,不能分割

-- 2.一致性:说明事务操作的结果是需要保持一致结果的

-- 3.隔离性:事务的操作是相互独立的

-- 4.持久性:事务操作的结果是确定的,并且会被长期存储。

--语法:

START TRANSACTION;  -- 开始标记

-- 操作的语句

select * from st_score;

insert into st_score values("1860004","1903","2018-2019第一学期",80);

COMMIT; -- 提交

RollBack;

-- 指定事务回滚的位置

START TRANSACTION;

select * from st_score;

SAVEPOINT point    -- 事务保存点,用来指定事务回滚的标志

insert into student (st_id,st_name,st_sex,class_id) VALUES("18160014","zhangsan",1,'186002');

insert into st_score values("18600014","1903","2018-2019第一学期",80);-- 此句执行失败

COMMIT;

ROLLBACK TO SAVEPOINT point;

-- 视图

-- 创建视图

CREATE VIEW `V_Show` AS

SELECT  student.St_Id,student.St_Name,sclass.class_Name

FROM student INNER JOIN sclass ON student.class_Id = sclass.class_Id ;

--注意:

-- 1. 视图中不能使用insert语句、update语句和delete语句;

-- 2. 视图中只能包含一条select语句

-- 查看视图数据

select * from V_Show;-- 视图可以作为数据源

-- 修改视图数据

update V_show set st_Name='欧阳锋' where st_id='18160001';

-- 查看视图创建语句

show create view v_show;

-- CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_show` AS

-- select `student`.`St_Id` AS `St_Id`,`student`.`St_Name` AS `St_Name`,`student`.`class_Id` AS `CLASS_iD`,

--      `sclass`.`class_Name` AS `class_Name`

-- from (`student` join `sclass` on((`student`.`class_Id` = `sclass`.`class_Id`)))

-- 修改视图

ALTER VIEW `V_Show` AS

SELECT  student.St_Id,student.St_Name,student.CLASS_iD,sclass.class_Name

FROM student INNER JOIN sclass ON student.class_Id = sclass.class_Id ;

-- 删除视图

drop view v_show;

-- 用户权限管理

-- 创建用户

create user 'zhangsan'@'localhost';

-- 修改密码

--set password for 用户名@localhost = password('新密码');

-- 用户授权

grant select on student to 'zhangsan'@'localhost';

-- 函数

-- 数学函数

select ABS(-1);-- 1

select FLOOR(1.3); -- 1,地板函数

select CEILING(1.3); --2,天花板

select ROUND(1.5);--2,四舍五入

select FORMAT(3.1415926,3);-- 3.142,保留几位小数位,四舍五入,同round(3.14.5926,3)

select PI();

select RAND();-- 产生[0,1]之间的随机数

select MOD(13,2);-- 求余函数,相当于13%2

select char(65,97);-- 将ASCII转换成字符

select ASCII("a");-- 将字符转换成ASCII码值

-- 字符函数

select LENGTH("abcdefg");-- 求字符串长度,同CHAR_LENGTH("abcdefg");

select LEFT("abcdefg",2);-- 截取左起规定字符个数

select RIGHT("abcdefg",2);-- 截取右起规定字符个数

select substr("abcdefg",3,2);-- 从指定下标(从1开始)位置开始,截取规定个数的字符;若省略最后一个参数,则表示从规定下标开始后的所有字符,同substring

select LTRIM("   abcdefg");-- 剔除左起空格

select RTRIM("   abcdefg");-- 剔除右起空格

select TRIM("   abcdefg    ");-- 剔除左右空格

select REPLACE("abcbdabc","abc","ABC");--ABCbdABC, 替换规定字符串

select CONCAT("abc","ABC");-- 字符串连接

select UPPER("abc");-- 小写转大写

select LOWER("ABC");-- 大写转小写

-- 日期函数

select NOW();-- 2019-11-19 20:54:40

select date(NOW());-- 2019-11-19

select CURDATE();-- 2019-11-19 同CURRENT_DATE();

select TIME(NOW());-- 20:56:17

select YEAR(CURDATE());-- 2019

select MONTH(CURDATE());--11

select DAY(CURDATE());-- 19

select WEEK(NOW());-- 当前第几周

select DAYOFWEEK(NOW());--3, 星期二

-- 类型转换

-- 1. Cast(字段名|表达式 as 数据类型 )

-- 类型可以为:CHAR[(N)] 字符型、DATE 日期型、DATETIME 日期和时间型、DECIMAL float型、SIGNED int、TIME 时间型

select cast("123" as signed);-- 123

select cast("123.4567" as decimal(8,2));-- 123.46

select cast("1a2b.3c" as decimal(8,2));-- 1

select cast("a2b.3c" as decimal(8,2));-- 0

select cast(date(now()) AS char(10))-- 2019-11-20

select cast("2019/11/20" AS date)-- 2019-11-20

-- 2. convert(字段名|表达式 ,数据类型)

select CONVERT("2019/11/20" ,date);

-- 数据加密

-- 1. 不可逆加密:单向

md5("123");-- 202cb962ac59075b964b07152d234b70,产生32个字符的密文

sha("123");-- 40bd001563085fc35165329ea1ff5c5ecbdbbeef,返回一个40位十六进制

-- 2.可逆加密:双向,需要统一加密的密钥

--AES加密:

select AES_ENCRYPT("123","abc");--加密,返回128位二进制

select AES_DECRYPT(AES_ENCRYPT("123","abc"),"abc");-- 解密

-- ENCODE

select ENCODE("123","abc");-- 加密

select DECODE(ENCODE("123","abc"),"abc");-- 解密

-- 用户自定义函数

--1. 函数必须有返回值,存储过程没有返回值。

--2. 函数不允许返回结果集。只能返回一个值。

--3. 用户自定义函数和存储过程其他操作都一致。

-- 存储过程

-- 是一个语句的集合

-- 参数:IN表示参数属于输入类型,OUT表示参数是输出类型,INOUT表示参数是输入和输出类型

-- 没有返回值。

--创建:

-- 1. IN参数类型

Delimiter $$ -- 定义一个语句段的结束符号

CREATE PROCEDURE Us_DisplayStudentInfoByClassId(IN ClassId char(6))

BEGIN

select * from student where class_Id=ClassId;

END

$$

-- 调用

call Us_DisplayStudentInfoById("18160001");

-- 2. OUT参数类型

CREATE  PROCEDURE Us_GetStudentCount(OUT `total` int)

BEGIN

select count(*) into total from student;

END;

--调用

CALL Us_GetStudentCount(@num);

select @num;

-- 查看:show create procedure 存储过程名

show create PROCEDURE Us_GetStudentCount

-- 修改:除修改存储过程的特征信息外,都是先删除原有存储过程,再创建新的存储过程,只是存储过程名相同

--即,如果要修改存储过程的参数,修改存储过程体,都是需要删除后重建。

-- 删除:drop procedure 存储过程名

DROP PROCEDURE IF EXISTS `Us_GetStudentCount`;

-- 变量

-- 1. 系统变量(全局变量)

-- 查看:show GLOBAL VARIABLES;

-- 2. 局部变量

-- 定义:declare 变量名 数据类型

-- 作用域:只在存储过程或是函数内部

-- 3. 会话变量

-- 无需declare声明,直接在变量名前加@就可以了

-- 作用域:在当前用户与数据库连接过程中可用。

-- 控制结构

-- 1.分支结构

-- If 条件表达式 then

--      begin   -- 当下面语句有多条条时使用,相当于{

--          程序段

--      end

-- elseif 条件表达式 then

--      begin   -- 当下面语句有多条条时使用,相当于{

--          程序段

--      end

--  多条elseif语句

-- else

--      begin   -- 当下面语句有多条条时使用,相当于{

--          程序段

--      end

-- end if;

-- case语句:

-- 格式一:

--case column

--  when condition then result

--  when condition then result

--  when condition then result

--  else result

--end

-- 格式二:

--case

--  when condition then result

--  when condition then result

--  when condition then result

--else result

--end

CREATE PROCEDURE us_hhh()

BEGIN

select no into @num from st_score where left(no,2)="sw" ORDER BY no desc LIMIT 1;

set @n=CONVERT(right(@num,2),signed)+1;

IF @n<10 THEN

set @num=CONCAT("sw","0",CONVERT(@n,char(4)));

end IF;

insert into st_score VALUES(@num,"18160016","1901","2018-2019第一学期",80);

END;

-- 2.循环结构

-- while

-- while 条件表达式 do

--  循环体

-- end while;

-- repeat相当于C或C#中的do……while()

--  [lable:]repeat      -- lable时用户自定义的标签

--  循环体

--  UNTIL 条件表达式 end repeat[lable];

-- loop

--  [lable:]loop

--  循环体1

--  leave [lable]

--  循环体2

--  end loop[lable];

-- 触发器:属于表结构的一部分

-- 触发事件:在数据表记录进行删除(delete)、修改(update)和插入(insert)操作时使用。

-- 触发时机: 操作前(before)、操作后(after)。

-- 创建格式:

-- create trigger 触发器名 触发时机 触发事件 on 表名 for each row

-- 触发器执行的操作代码

-- new表示将要插入的新数据或者修改后的数据,old表示将要修改的数据或者需要删除的数据。

-- 定义Insert触发器

create TRIGGER Tr_Insert  BEFORE INSERT on st_score for each ROW

insert into student(st_Id,st_Name) values(new.st_Id,"待定");

-- 执行insert操作

insert into st_score(st_Id,subjectId,term,score) VALUES("18160011","1902","2018-2019第一学期",80);

-- 定义Update触发器

CREATE DEFINER=`root`@`localhost` TRIGGER `Tr_Update` AFTER UPDATE ON `student`

FOR EACH ROW update st_score set st_id=new.st_id where st_id=old.st_id ;

-- 修改数据

update student set st_id="18160012" where st_id="18160011";

-- 索引

-- 查看索引:show index from 表名;

-- 1.主键索引:一般来说在创建表的时候指明主关键字时,会自动产生主建索引

-- 主键:唯一且非空

create table student(st_id char(8) not null primary key);

create table student(st_id char(8),primary key(st_id));

alter table student add primary key pk_index(st_id);

-- 2.唯一索引:

-- 与主键索引的异同:都约束列值唯一。主键索引不允许为空,当唯一索引允许为空且为空值不能超过一个。

--create unique index 索引名 on 表名(字段列表)

create UNIQUE index U_index on st_score(st_id,subjectId,term);

create table student(st_id char(8),unique U_index(st_id));

alter table student add unique U_index(st_id);

-- 3.普通索引

create index U_index on st_score(term);

-- 4.复合索引

create index U_index on st_score(st_id,subjectId,term);

-- 5.全文索引

-- 使用场合

-- 字段被频繁用于查询,建索引

-- 字段值比较少或含有NULL值,不建索引

-- 游标:就是一个指向数据记录的指针。

-- 1.定义游标:declare 游标名 cursor for 查询语句;

DECLARE cur CURSOR for select st_id,st_name from student ;

-- 2.打开游标:open 游标名;

open cur;

-- 3.操作游标:fetch 游标名 into 变量列表;

FETCH cur into id,sname;-- 将当前指针所在的记录行的列值复制给变量

-- 4.关闭游标

close cur;

CREATE DEFINER = `root`@`localhost` PROCEDURE `P_cursor`()

BEGIN

-- 变量声明

declare id char(8);

declare sname varchar(20);

-- 游标定义

DECLARE cur CURSOR for select st_id,st_name from student;

-- 打开游标

open cur;

-- 读取游标中的值

REPEAT

FETCH cur into id,sname;

-- 打印

select id,sname;

UNTIL id is NULL end repeat;

-- 关闭游标

CLOSE cur;

END;

-- 分区:将数据存储到不同物理分区位置,以便加快数据检索。

-- 1. Range分区:判断连续数据值

create table test(

id int DEFAULT null,

name char(30),

datedata date

)

PARTITION BY RANGE (year(datedata)) (

PARTITION part1 VALUES LESS THAN (1990) ,

PARTITION part2 VALUES LESS THAN (1995) ,

PARTITION part3 VALUES LESS THAN (2000) ,

PARTITION part4 VALUES LESS THAN MAXVALUE );

-- 2.List分区:判断离散数据值

create table test1(

id int not null,

name char(30),

career VARCHAR(30)

)

PARTITION BY LIST (id) (

PARTITION part0 VALUES IN (1,5) ,

PARTITION part1 VALUES IN (11,15) ,

PARTITION part2 VALUES IN (6,10) ,

PARTITION part3 VALUES IN (16,20)

);

-- 3.Hash分区:hash函数可以用户自定义,且为整数

CREATE TABLE employees (

id INT NOT NULL,

firstname VARCHAR(30),

lastname VARCHAR(30),

hired DATE NOT NULL DEFAULT '1970-01-01',

separated DATE NOT NULL DEFAULT '9999-12-31',

job_code INT,

store_id INT

)

PARTITION BY HASH(store_id) PARTITIONS 4;

-- 4.Key分区:函数只能使用系统内置的Hash函数,除整数外,可以为BLOb或TEXT。

CREATE TABLE tk (

col1 INT NOT NULL,

col2 CHAR(5),

col3 DATE,

PRIMARY KEY(col1)

)

PARTITION BY KEY (col1) PARTITIONS 3;

-- 范式:

-- 1. 第一范式(1NF)

-- 不可再分的属性值,原子性

-- 确保不产生冗余数据

-- 2.第二范式(2NF)

-- 每一行的数据只能与其中一列相关

-- 满足1NF

-- 3.第三范式(3NF)

-- 属性都跟主键有直接关系,不能存在传递关系

-- 保证满足2NF

-- 总结:

-- 第一范式:简单说 列不能再分

-- 第二范式:简单说 建立在第一范式基础上,消除部分依赖

-- 第三范式:简单说 建立在第二范式基础上,消除传递依赖。

-- 数据库开发流程

-- 1.需求分析

-- 2.概念结构设计

-- 3.逻辑结构设计(E-R)

-- 4.物理结构设计

-- 5.数据库实施

-- 6.数据库的运行和维护

自学mysql教程 资料_数据库MYSQL,自学,命令,教程。相关推荐

  1. mysql清空数据库所有表的命令_mysql清空表数据命令是什么?_数据库,mysql,清空表数据...

    mysql服务无法启动怎么解决_数据库 mysql服务无法启动的解决方法是:1.配置环境变量:2.在mysql安装目录下,新建my.ini文件,设置默认字符集.端口.存储引擎等:3.执行[mysqld ...

  2. mysql数据库要定期清除吗_数据库mysql定时清除数据

    数据库mysql定时清除数据 数据库mysql定时清除数据 https://www.jiangweishan.com/article/2384238490809808.html 作者:andy0012 ...

  3. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

    MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...

  4. 添加启动mysql的用户_向mysql添加新用户并分配权限

    首先要声明一点,大部分情况下,修改MySQL是需要有mysql里的root权限的,所以一般用户无法更改密码,除非请求管理员. 方法一 使用phpmyadmin,这是最简单的了,修改mysql库的use ...

  5. 二级mysql教程下载_全国计算机等级考试教程:二级MySQL数据库程序设计

    第一章 数据库技术的基本概念与方法 1.1 基本概念 1.2 数据库系统的特点 1.3 数据库系统的结构 1.3.1 数据库系统的三级模式结构 1.3.2 三级模式结构的两层映像与两级数据独立性 1. ...

  6. 32位mysql安装包_《MySQL 入门教程》第 02 篇 MySQL 安装

    文章来源:<MySQL 入门教程>第 02 篇 MySQL 安装 原文作者:不剪发的Tony老师 来源平台:CSDN 上一篇我们了解了什么是MySQL数据库. 本文介绍如何在 Window ...

  7. mysql查出倒序第一条数据_[数据库]mysql 记录根据日期字段倒序输出

    [数据库]mysql 记录根据日期字段倒序输出 0 2016-07-21 11:00:17 我们知道倒序输出是很简单的 select * from table order by id desc 直接这 ...

  8. mysql数据库基本语法_[数据库]MySQL 基本语法

    [数据库]MySQL 基本语法 0 2018-05-31 05:00:07 1.说明: 创建默认数据库 create database 库名; 2.说明: 创建指定字符编码的数据库 create da ...

  9. mysql where 条件取反_数据库MySQL之where条件查询

    数据库MySQL之where条件查询 1. where条件查询的介绍 使用where条件查询可以对表中的数据进行筛选,条件成立的记录会出现在结果集中. where语句支持的运算符: 比较运算符 逻辑运 ...

  10. mysql账目表_数据库1(数据库、表及表数据、SQL语句)

    01数据库概念 A: 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来, 用户可以对数据库中的数据进行增加,修改,删除及查询操作. B: 什么是数据库管理 ...

最新文章

  1. C语言实现归并两个链表
  2. 工作占用了太多私人时间_职晓|如果工作占用了生活时间,我应不应该辞职?...
  3. Net Core集成Exceptionless分布式日志功能以及全局异常过滤
  4. oracle 还原dmp时_报错的值太大,基于oracle数据库的CLOUD备份恢复测试
  5. Windows 2003 网络负载均衡的详细配置文档
  6. 网络适配器本地连接没有有效ip地址配置错误的解决办法
  7. 龙腾P2P流媒体点播系统商业计划书
  8. ssa/ass字幕格式全解析
  9. 七夕情人节表白网页代码大全(浪漫的html表白源代码)
  10. ES 数据导出和数据导入
  11. 应用Scratchbox构建基于CF卡的嵌入式Linux系统
  12. IE11 For Win7、win2008中文版官方下载地址
  13. 破坏网络可信身份认证,黑灰产业链正在兴起
  14. 教你玩转iphone超实用的3D touch功能!
  15. zz from 古文中惊艳的句子
  16. 推荐免费学习使用的云服务器
  17. GAN生成对抗网络合集(三):InfoGAN和ACGAN-指定类别生成模拟样本的GAN(附代码)
  18. opencv中Hu矩的学习心得
  19. 【MySQL】查询语句
  20. FQ队列detached流管理

热门文章

  1. 翟菜花:资本退烧、开源节流时代,品质服务保障成携程终极利器
  2. 利用树莓派组建支持迅雷离线下载的NAS
  3. python爬取知乎热门话题及其回答(requests中session保持cookies的应用)
  4. win10永久自动更新服务器,四种方法关闭win10专业版自动更新
  5. 基于深度学习模型(1D CNN)实现钓鱼网站检测
  6. 详述支付网关的设计原则
  7. 【工具-SublimeText3】在SublimeText3中无法高亮 .vue 文件内容和less代码的解决方案
  8. rockchip mpp编码开发
  9. 马王堆出土道德经原文(非删改本)
  10. 最新中国象棋运动员技术等级标准及业余棋手晋级办法