c潭州课堂25班:Ph201805201 MySQL第二课 (课堂笔记)
mysql> create table tb_2(
-> id int,
-> name varchar(10) not null
-> );
插入数据 insert into tb_2 value(1,'xiaobai'); 在非空时,NOT NULL 必须有值,
2,在已有的表中设置一个字段的非空约束
mysql> alter table tb_2
-> modify id int not null;
取消非空约束
mysql> alter table tb_2
-> modify id int:
mysql> create table t3
-> (id int unique key,
-> name varchar(10);
unique key 字段不可重复,否则报错,
2, 在已有的表中添加唯一约束
方法1
mysql> alter table t3
-> add unique key(name);
方法2
alter table t3
-> modify name varchar(10) unique key;
alter table t3 modify id int unique key;
删除唯一
mysql> alter table t3
-> drop key name;
主键的作用: 可以唯一标识一条数据,每张表里只能 有一个主键,
主键特性: 非空且唯一,当表里没有主键时,第一个非空且唯一的列,被当成主键,
创建定有主键的表
create table t4(
-> id int primary key,
-> name varchar(10));
在已有的表中设定主键
方法1
> alter table t4
-> add primary key(id);
方法2
> alter table t4
>modify id int primary key;
删除主键
mysql> alter table t4
-> drop primary key;
auto_increment 自动编号,要与键一起使用,一般与主键一起使用,一个表里只有一个自增长,
默认情况下起始值为 1,每次的增量为 1,
新建个有自增长的表
create table tb5(
-> id int primary key auto_increment,
-> name varchar(10)
->)auto_increment = 100; 设 auto_increment 从100开始
插入 name 的值,
insert into tb5 (name) values('a'),('b'), ('c');
这里的 ID 字段自增长,
给已有表添加自增长:
alter table tb5
-> modify id int auto_increment;
删除:
alter table tb5
-> modify id int;
default 初始值设置,插入数据时,如果没有给该字段赋值,则会给以默认值,
新建个表
create table tb6(
-> id int primary key auto_increment,
-> name varchar(10),
-> age int not null default 18
-> );
插入 name 值 ,这里 id 自增长,age 不传值则默认18
insert tb6 (name) values('a'),('b'),('c');
insert into tb6 set name='qq',age=20;
删除默认约束
alter table tb6
-> modify age int;
给已有的表添加默认约束
alter table tb6 modify age int default 20;
fofeign key 保持数据一致性完整性,实现一对一,一对多,多对多的关系,
外键必须关联到键上,一般是关联另一个表的主键,
因为一个表只存一类信息,所以用键来做参照,可以减少数据冗余,
建 a 表
create table a(
-> a_id int primary key auto_increment, 唯一性,自增长,
-> a_name varchar(20) not null 非空
-> );
insert into a values(1,'a1'),(2,'a2'); 插入数据
建个 b 表
create table b(
-> b_id int primary key,
-> b_name varchar(20) not null,
-> fy_id int not null,
-> constraint AB_id foreign key(fy_id) references a(a_id)
-> );
b 表中 fy_id 的字段只能添加 a 表中的 a_id 中已有的数据,
此时 ,a 表 a_id 的数据不能被修改和删除,
删除外键
alter table b drop foreign key AB_id;
添加外键
alter table `b`
-> add constraint AB_id foreign key(fy_id) references a(a_id);
通常一个学校可以有很多学生,而一个学生只属于一个学校,
学校与学生的关系就是一对多的关系,通过外键关联实现,
创建学院表
create table tanzhou(
-> t_id int primary key auto_increment, 学院 id
-> t_name varchar(10) not null 学院名
-> );
创建学生表
create table stu(
-> s_id int primary key auto_increment, 学生 id
-> s_name varchar(10), 学生名
-> tz_id int not null, 所属学院 id
-> foreign key(tz_id) references tanzhou(t_id)
-> );
创建学生详情表
create table stu_d(
-> id int primary key,
-> age int ,
-> address varchar(20) comment '家庭住址',
-> home_num varchar(20),
-> foreign key (id) references stu(s_id)
-> );
创建一张课程表
create table k_c_b(
-> kid int primary key not null,
-> kname varchar(10),
-> ke_shii int
-> );
创建选课表
create table x_k_b(
-> xid int primary key not null,
-> kid int unique key,
-> sid int,
->primary key(kid, sid), 这行为联合组键,意义在同一学生不能选两次一样的课程,
-> foreign key(kid) references k_c_b(kid), 引课程表
-> foreign key(sid) references stu(s_id) 引学生表
-> );
补充
数据类型
tinyint 1 字节 -128 --》》127
smallint 2字节 -12768--》12768
int 4字节 -2147483643--》2147483643
bigint 8字节
float 4字节
double 8字节
double(5,2) 表示 5位数,2位小数, 如:999.99
char
char(3) 3个字节
varchar
varchar(20) 从0到20个字节
tmestamp
创建个员工表
主键,自增
create table ygb(
id int primary key auto_increment,
age int,
sex char(5),
xin_shui DOUBLE(7,2)
);
desc ygb;
添加字段
alter table ygb ADD 入值时间 tinyint
alter table ygb ADD 入值时间2 DATE NOT NULL ; 一次多个字段
alter table ygb ADD a int,
ADD b INT ,
add c INT ; 删除字段
alter table ygb DROP a;
alter table ygb DROP b,
DROP c; 改字段 默认值为 18 放在 id 的后边
alter table ygb modify age SMALLINT DEFAULT 18 after id; 改字段名
alter table ygb change name 姓名 VARCHAR (20);
改表名
rename table ygb to 员工表;
插入数据
insert into ygb (id,name,age,sex,xin_shui)
values(1,'aa',18,'boy',17000.00) 查询
select * from ygb;
insert into ygb (name,sex,xin_shui)
values('ab','boy',17000.00);
id 自增,gae 默认值,
这样写要对应着字段写全
insert into ygb VALUES (10,'bb',20,'g',5000);
插入多组
insert into ygb (name,sex,xin_shui)
values('ac','boy',17000.00),
('ad','g',3000),
('af','b',3000); set 插入
insert into ygb set name = 'cc'
改:
update ygb set xin_shui=xin_shui+2000 where id=10;
在原有基础上加,如果不加条件,将对所有添加 删除
delete from ygb where id=11 or id=12;
删除字段 alter table 表名 drop 字段名;:
删表:留下空表,
delete from ygb ; 一条条删
truncate table ygb; 整个删除,重建 个空表
查
建一成绩表
create table c_j_b(
id int primary key auto_increment,
name varchar(20),
js DOUBLE,
django DOUBLE,
python DOUBLE );
insert into c_j_b(name,js,django,python)
values('aa',70,80,90),
('ab',78,91,81),
('ac',80,82,79),
('af',88,82,89),
('bb',78,76,79),
('cc',88,77,65);
select name from c_j_b;
select name,js from c_j_b;
重复只出现一次 distinct
select distinct js from c_j_b;
这只是显示,并没有改库,
elect name,js+10,django+10,python+10 from c_j_b;
select name as 姓名,js as js成绩,django as django成绩,
python as python成绩 from c_j_b;_j_b;
select name js from c_j_b where js>80;
查 70 到 90 内的 between
select name, js from c_j_b where js between 70 and 90;
查 in里边的是否有
select name ,js from c_j_b where js in (78,90,70);
模糊匹配 like'a%' like'a__'
select name ,js from c_j_b where name like'a%';
select name from c_j_b where js is null;\
排序
select name,JS from c_j_b ORDER BY JS;
select name,JS from c_j_b ORDER BY JS desc;
select name,JS+django+python as 总成绩 from c_j_b;
+------+-----------+
| name | 总成绩 |
+------+-----------+
| aa | 240 |
| ab | 250 |
| ac | 241 |
| af | 259 |
| bb | 233 |
| cc | 230 |
| jj | NULL |
+------+-----------+
总成绩排序,从低到高,
select name,JS+django+python as 总成绩 from c_j_b order by 总成绩 desc;
+------+-----------+
| name | 总成绩 |
+------+-----------+
| af | 259 |
| ab | 250 |
| ac | 241 |
| aa | 240 |
| bb | 233 |
| cc | 230 |
| jj | NULL |
+------+-----------+
分组 group by
select name from c_j_b group by name; 分组后
分组后 js 的和, 按名字分组
select name sum(js) from c_j_b group by name;
把分组后,js 的总分大于150的打印,group by 后不可用 where ,要用 havin,
select name sum(js) from c_j_b group by name having sum(js) >150;
group by 前用 where, 其后用 having,
说明,如果 字段中有 null,此时他与谁计算都 分得到个 null,
所以 ifnull(js,0), 如果 js 里有null 那就让他 = 0.
显示
select * from c_j_b; limit 3;
select * from c_j_b; limit 1:4;
c潭州课堂25班:Ph201805201 MySQL第二课 (课堂笔记)的更多相关文章
- 潭州课堂25班:Ph201805201 MySQL第一课 (课堂笔记)
一般说来,关系形在磁盘中,非关系表在内存中, 进入 MySQL: mysql -u用户名 -p密码 mysql -uroot -pqwe123 mysql -h127.0.1 -P3306 -uroo ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第四课 登录注册 (课堂笔记)
index.html 首页 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第三课 (课堂笔记)
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第二课 (课堂笔记)
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第一课 (课堂笔记)
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 潭州课堂25班:Ph201805201 第十课 类的定义,属性和方法 (课堂笔记)
类的定义 共同属性,特征,方法者,可分为一类,并以名命之 class Abc: # class 定义类, 后面接类名 ( 规则 首字母大写 ) cls_name = '这个类的名字是Abc' # 在类 ...
- 潭州课堂25班:Ph201805201 django 项目 第四十五课 mysql集群和负载均衡(课堂笔记)
2.使用docker安装Haproxy 一.为什么要使用数据库集群和负载均衡? 1.高可用 2.高并发 3.高性能 二.mysql数据库集群方式 三.使用docker安装PXC 1.拉取PXC镜像 d ...
- 潭州课堂25班:Ph201805201 MySQL第三课 (课堂笔记)
单表查询: select * from select sname from stu; 条件查询 select sname from stu where sid=2; select sname from ...
- 潭州课堂25班:Ph201805201 django 项目 第五课 静态页面转为模板 (课堂笔记)
一.分析静态页面 1.静态vs动态 条目 静态页面 动态页面 网站内容 固定不变 经常变动 浏览器加载速度 更快(无需向服务器发起请求) 更慢 改变网站内容 很难(修改或者创建新的html页面) ...
随机推荐
- System.Runtime.InteropServices.COMException (0x800A03EC): 无法访问文件
使用Microsoft.Office.Interop.Excel 操作 今天在服务器部署,操作程序csv文件转xsl文件的时候,遇到一下问题: System.Runtime.InteropServic ...
- 001_a记录和canme的区别
1.什么是域名解析? 域名解析就是国际域名或者国内域名以及中文域名等域名申请后做的到IP地址的转换过程.IP地址是网路上标识您站点的数字地址,为了简单好记,采用域名来代替ip地址标识站点地址.域名的解 ...
- 转载:configure生成的文件(1.5.3)《深入理解Nginx》(陶辉)
原文:https://book.2cto.com/201304/19620.html 当configure执行成功时会生成objs目录,并在该目录下产生以下目录和文件:|---ngx_auto_hea ...
- OCM_第六天课程:Section3 —》数据库可用性
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...
- C++ code:for loop designs
1 用for循环编出系列图形 该图形一共10行,每一行增加一个字符,所以应循环10次,每次输出一行.其循环模式为: :i<=;++i) { 输出第i行 换行 } 我们注意到,每一行长度的变化正 ...
- PHP 迭代器和生成器
迭代和迭代器 迭代是指反复执行一个过程,每执行一次叫做迭代一次.比如普通的遍历便是迭代: $arr = [1, 2, 3, 4, 5];foreach($arr as $key => $valu ...
- Jmeter录制浏览器并回放
确认证书 1.查看证书 进入Jmeter安装目录下的bin,找到ApacheJMeterTemporaryRootCA.crt 证书文件(如jmeter在安装目录中未找到,可尝试先执行下面的开始录制步 ...
- Redis、RabbitMQ、Memcached
知识目录: Memcached Redis RabbitMQ Memcached 回到顶部 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中 ...
- python 全栈开发,Day89(sorted面试题,Pycharm配置支持vue语法,Vue基础语法,小清单练习)
一.sorted面试题 面试题: [11, 33, 4, 2, 11, 4, 9, 2] 去重并保持原来的顺序 答案1: list1 = [11, 33, 4, 2, 11, 4, 9, 2] ret ...
- POJ 3126 Prime Path (素数+BFS)
题意:给两个四位素数a和b,求从a变换到b的最少次数,每次变换只能变换一个数字并且变换的过程必须也是素数. 思路:先打表求出四位长度的所有素数,然后利用BFS求解.从a状态入队,然后从个位往千位的顺序 ...