自学mysql教程 资料_数据库MYSQL,自学,命令,教程。
--- 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,自学,命令,教程。相关推荐
- mysql清空数据库所有表的命令_mysql清空表数据命令是什么?_数据库,mysql,清空表数据...
mysql服务无法启动怎么解决_数据库 mysql服务无法启动的解决方法是:1.配置环境变量:2.在mysql安装目录下,新建my.ini文件,设置默认字符集.端口.存储引擎等:3.执行[mysqld ...
- mysql数据库要定期清除吗_数据库mysql定时清除数据
数据库mysql定时清除数据 数据库mysql定时清除数据 https://www.jiangweishan.com/article/2384238490809808.html 作者:andy0012 ...
- MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结
MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...
- 添加启动mysql的用户_向mysql添加新用户并分配权限
首先要声明一点,大部分情况下,修改MySQL是需要有mysql里的root权限的,所以一般用户无法更改密码,除非请求管理员. 方法一 使用phpmyadmin,这是最简单的了,修改mysql库的use ...
- 二级mysql教程下载_全国计算机等级考试教程:二级MySQL数据库程序设计
第一章 数据库技术的基本概念与方法 1.1 基本概念 1.2 数据库系统的特点 1.3 数据库系统的结构 1.3.1 数据库系统的三级模式结构 1.3.2 三级模式结构的两层映像与两级数据独立性 1. ...
- 32位mysql安装包_《MySQL 入门教程》第 02 篇 MySQL 安装
文章来源:<MySQL 入门教程>第 02 篇 MySQL 安装 原文作者:不剪发的Tony老师 来源平台:CSDN 上一篇我们了解了什么是MySQL数据库. 本文介绍如何在 Window ...
- mysql查出倒序第一条数据_[数据库]mysql 记录根据日期字段倒序输出
[数据库]mysql 记录根据日期字段倒序输出 0 2016-07-21 11:00:17 我们知道倒序输出是很简单的 select * from table order by id desc 直接这 ...
- mysql数据库基本语法_[数据库]MySQL 基本语法
[数据库]MySQL 基本语法 0 2018-05-31 05:00:07 1.说明: 创建默认数据库 create database 库名; 2.说明: 创建指定字符编码的数据库 create da ...
- mysql where 条件取反_数据库MySQL之where条件查询
数据库MySQL之where条件查询 1. where条件查询的介绍 使用where条件查询可以对表中的数据进行筛选,条件成立的记录会出现在结果集中. where语句支持的运算符: 比较运算符 逻辑运 ...
- mysql账目表_数据库1(数据库、表及表数据、SQL语句)
01数据库概念 A: 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来, 用户可以对数据库中的数据进行增加,修改,删除及查询操作. B: 什么是数据库管理 ...
最新文章
- C语言实现归并两个链表
- 工作占用了太多私人时间_职晓|如果工作占用了生活时间,我应不应该辞职?...
- Net Core集成Exceptionless分布式日志功能以及全局异常过滤
- oracle 还原dmp时_报错的值太大,基于oracle数据库的CLOUD备份恢复测试
- Windows 2003 网络负载均衡的详细配置文档
- 网络适配器本地连接没有有效ip地址配置错误的解决办法
- 龙腾P2P流媒体点播系统商业计划书
- ssa/ass字幕格式全解析
- 七夕情人节表白网页代码大全(浪漫的html表白源代码)
- ES 数据导出和数据导入
- 应用Scratchbox构建基于CF卡的嵌入式Linux系统
- IE11 For Win7、win2008中文版官方下载地址
- 破坏网络可信身份认证,黑灰产业链正在兴起
- 教你玩转iphone超实用的3D touch功能!
- zz from 古文中惊艳的句子
- 推荐免费学习使用的云服务器
- GAN生成对抗网络合集(三):InfoGAN和ACGAN-指定类别生成模拟样本的GAN(附代码)
- opencv中Hu矩的学习心得
- 【MySQL】查询语句
- FQ队列detached流管理