三大范式
- 第一范式:强调的是列的原子性,即列不能够再分成其他几列。(错误例子:【联系人】(姓名,性别,电话) 它可以再分解)(属性不可分解)
- 第二范式:其他属性依赖于主键 001 李明 硕士、001 李明 博士
- 第三范式:消除依赖传递关系 001 李明 教师 2000、002 王明 教师 2000
关系运算
选择:select
投影:
连接:join
常用语句
use sqltestdb;
create table t_user(
uid int(10) not null unique primary key auto_increment,
uname varchar(100) not null unique,
pwd varchar(100) not null,
sex char(2) not null,
birthday datetime,
birth date,
primary key(uid)
);
create table workInfo(
id int(10) not null unique primary key auto_increment,
contents tinytext,
extra text,
unique index index_id(id desc)
);
insert into t_user values(default,'张三','123',1,'2018-12-3');
insert into t_user values(default,'李四','456',1,'2018-12-3');
insert into student values(901,'张老大','男',1985,'计算机系','北京海淀区');
insert into student values(902,'张老二','男',1986,'中文系','北京昌平区');
insert into score values(null,901,'计算机',98);
insert into score values(null,902,'英语',98);
insert into food values(null,'AA果冻','AA果冻厂',1.5,'2008',2,'北京'),(null,'AA咖啡','AA咖啡厂',20,'2008',5,'天津'),(null,'AA奶糖','AA奶糖厂',14,'2008',3,'山东');
delete from food where 2009-produce_time>validity_time;
delete from food where address='北京';
update food set address='内蒙古',price=3.2 where name='AA牛奶厂';/*修改某行的制定属性*/
alter table teacher modify name varchar(30) not null;
alter table teacher modify birthday datetime after name;
alter table teacher change num t_id int(10) not null;
alter table teacher drop address;
alter table teacher add wages float;
alter table teacher rename teacherinfo;
desc teacherinfo;
create index index_name on workInfo(name(10));
alter table workinfo add index index_t(type,address);
alter table workinfo add fulltext index index_ext(extra);
drop index index_id on workinfo;
desc workinfo;
show create table workinfo;
select * from score;
select id,stu_id,c_name,grade from score;/*两种方法一样*/
select * from student limit 1,3;/*显示第二条到第四条*/
select * from student where department in('计算机系','英语系');/*找到有计算机和·的行*/
select * from student where department='计算机系' or department='英语系';
select name,2009-birth as age from student;/*用年份计算年龄,并将其取名为age*/
select *,2009-birth as age from student where 2009-birth between 18 and 22;/*选择新属性年龄在18和22之间的量*/
select *,2009-birth as age from student where 2009-birth>=18 and 2009-birth<=22;
select department,count(id) as sum_of_department from student group by department;/*查属性的个数并进行分组*/
select c_name,grade from score where stu_id=(select id from student where name='李四');
/*显示另一个表中名为李四的,在该表中对应的属性 233*/
select student.id,name,department,c_name,grade from student s1,score s2 where student.id=score.stu_id;
/*命名表名并联合查询*/
select student.id,name,sum(grade) from student,score where student.id=score.stu_id group by student.id;
/*显示每位学生的总成绩 225*/
select *from student where id in(select stu_id from score where c_name='计算机' and grade<99);
/*筛选所有分数低于99的同学的信息 226*/
select stu_id,grade from score where c_name='计算机' order by grade desc;/*把成绩从高到低排序*/
select id from student union select stu_id from score;/*将查询结果合并起来*/
select student.id,name,sex,birth,department,address,c_name,grade from student,score
where(name like '张%' or name like '王%') and student.id=score.id;/*查找性王和性张的的属性*/
select student.id,name,sex,birth,department,address,c_name,grade from student,score
where address like '湖南%' and student.id=score.stu_id;
MySQL workbench错误
错误代码:1136
插入时的数据个数与表中的属性个数不一致(即使有not null)
核心代码
- 算术运算符(+,-,*,/,DIV,%,MOD)253 ————比较运算符(=,<>相当于!=,in,like,regexp匹配)260
- 逻辑运算符(与&&and,非!not,或||or,异或XOR)261————位运算符&,^,|,~,<<,>>263———运算符优先级265
- 数学函数271;字符串函数277;日期和时间函数284;条件if,ifnull,case,when297;系统信息函数;加密函数299,其他302
/*删除本行ctrl+L 复制本行到下行ctrl+D*/
create database 数据库;
use 数据库;
show databases;/*查看数据库*/
show engines; /*检查引擎*/
drop database 数据库;
create table 表(,primary key(属性1,属性2));/*多字段主键P84*/
/*限制条件primary key,foreign key,not null,unique,auto_increment(数值自动增加),default*/
desc 表;/*查看表结构属性*/
alter table 旧名 rename 新名;/*修改表名P85*/
alter table 表名 modify 属性 varchar(13);/*修改数据类型*/
alter table 表名 change 旧属性 新属性 varchar(1);/*修改属性名*/
alter table 表名 add 属性1 varchar(1) primary key after 属性2/*first*/;/*在第一个位置(或属性二)添加属性*/
alter table 表名 drop 属性;/*删除属性*/
alter table 表名 modify 属性1 varchar(1) after 属性2/*first*/;/*更改属性位置*/
alter table 表名 engine=引擎名;/*更改表引擎*/
alter table 表名 drop foreign key 外键名;/*删除外键名*/
drop table 表名;
create algorithm=merge view 视图名(id,name,sex,ad)
select distinct * from 表名;/*查询不重复的记录*/
create trigger 触发器名 before insert on 属性名 for each row insert into 表名 values(null,····)/*触发器*/
select 属性,属性 from 表名(视觉列表) where 条件 in(关键词,关键词) order by asc;/*升序排列 desc降序排列*/
select * from 表名;/*检查该表*/
select * from 表名 where 属性 in(1001,1002);/*F1挑选属性为~~~and259*/
alter table worker add check(sex in ('男','女'));
select * from 表名 where 属性 not between 15 and 25;/*选择该属性不在15到20之间的列*/
select * from 表名 where 属性 like '1';/*模糊查询该属性尾部为1;_代表一个字符;%代表无数个字符;仅此处like与等号相同*/
select * from 表名 where 属性 is null;/*查取该属性为空的部分*/
select * from 表名 where age<10 and sex="男" or 学号 like "%1";/*F1*/
select sex,count(sex) from 表名 group by sex having count(sex)>=1;/*having限制,with rollup进行总结*/
select * from 表名 limit 3,2;/*初始位置是从第0条记,共计两条(记3与4条)*/
select 系号,count(*) from 表 where ·· group by 系号; /*统计每个系号数量*/
select 属性1,属性2 from 学生,系 where 学生.属性n=系.属性n;/*外键连接后,内连接195*/
select 属性1,属性2 from 学生 left join 系 where 学生.属性n=系.属性n;/*外连接中左连接197*/
select 属性1,属性2 from 学生 where score>=(select score from 学生 where level=1);/*两表之间查询*/
select * from 学生 where exists(select 属性 from 学生 where id=1)/*如果括号内存在则执行执行前面内容,否则不执行 not exists 204*/
select * from 学生 where socre>any(select socre from 奖学金)/*any指大于括号内任何一个就可以,all指必须大于括号内所有206*/
select * from 学生 union all select * from 学生;/*两表内容合并在一起(不消除相同记录) union消除相同记录208*/
select 属性1 as 属性别名1,属性2 from 学生 表别名 /*为表,属性取别名(前个as可以省略)210*/
/*^ $ {m,n}正则表达式211*/
insert into 表名 values(数据,数据);
insert into 表名(属性,属性) values(数据,'数据'),(数据,'数据');/*为指定位置插入两条数据*/
insert into 表名(属性1,属性2) select (属性1,属性2) from 表2;/*把查询结果插入表中*/
update 表 set 属1='据1',属2='据2' where 属3='据3';/*更新表中数据*/
delete from 表名 where 属=据;/*删除一列数据,如果没有where则删除所有数据*/
数据类型
整型:tinyint(1)、smallint(2)、mediumint(3)、int(4)、integer(4)、bigint(8)P51
浮点型:float(4)、double(8)、decimal(M,D)/dec(M,D)(M+2个字节)超出四舍五入
日期时间:year(1)、time(3)、date(4)、datetime(8)、timestamp(4)P54
字符串:char与varchar、tinytext,text,mediumtext,longtext、enum、setP63
二进制:binary、varbinary、bit(M)、tinyblob、blob、mediumblod、longblobP64
课本
完整型约束条件例如:
Primary key、foreign key、not null、unique、auto_increment、defaultP80
父表要先比子表建,之后才能对父表设置外键
索引115
Unique、fulltext、spatial、index和key、ASC升序与desc降序、创建单列多列索引P113
约束
创造表时创造约束P116
已存在的表上创造约束P124
触发器:P160
模糊查询:isnullP177 groupbyP187 with rollup前面数据总和 外连接P197
集合函数:count()、sum()、avg()、max()、min()、
正则表达式、$、·、【】、【】、S1|S2|S3、*、+、{M,N}P211
detatime与timestramp区别:前者范围大,后者使用current_timestamp时分时区
char与varchar区别:varchar可以自动调整占用空间大小
enum枚举与set可设置表格的默认值P63区别:set可以选择多个P66
更改密码
//更改数据库密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;
update user set password=old_password('123456') where user='root';
flush privileges;
正则表达式
id.matches("^[2]+\\d{10}$") //对学号控制其首数字为2,共11位数,不能为字母
password.matches("^\\d{6,8}$") //对密码控制其6到8位数,可以为字母
u.getName().matches("^[\\u4e00-\\u9fa5]{2,4}") //只能输入2到4个汉字