首页 > c潭州课堂25班:Ph201805201 MySQL第二课 (课堂笔记)

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;

 

转载于:https://www.cnblogs.com/gdwz922/p/9241551.html

更多相关:

  •     先吐为敬!   最近心血来潮研究nodejs如何完成微信支付功能,结果网上一搜索,一大堆“代码拷贝党”、“留一手”、“缺斤少两”、“不说人话”、“自己都没跑通还出来发blog”、“各种缺少依赖包”、“各种注释都没有”、“自己都不知道在写什么”的程序大神纷纷为了增加自己博客一个帖子的名额而发布了各种千奇百�...

  • 阅读ceph源码过程中需要明确当前操作是由哪个线程发出,此时需要根据线程id来确认线程名称 C++获取线程id是通过系统调用来直接获取 函数描述 头文件: 函数名称:syscall(SYS_gettid) 该函数直接返回了一个pid_t int类型的数字,即为当前线程id 此外函数pthread_s...

  • 面试题 分库分表之后,id 主键如何处理? 面试官心理分析 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定不对啊,需要一个全局唯一的 id 来支持。所以这都是你实际生产环境中必须考虑的问题。 面试题剖析 基于数据库的实现方案 数据库自增 id 这个就是说你的...

  • ORM操作    单表、一对多表操作 1 from django.db import models 2 3 4 class UserGroup(models.Model): 5 title = models.CharField(max_length=32) 6 7 8 class UserInfo(m...

  • 建立如下表: 建表语句: class表创建语句 create table class(cid int not null auto_increment primary key, caption varchar(32) not null)engine=innodb default charset=utf8;student表创建语句 c...

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 这是第三部分,完成效果如下 图1 建图和导航 三、使用RTAB-Map进行建图和导航 1. rtab...

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 由于之前的虚拟机性能限制,我在这个项目中使用了新的ubantu 16.04环境,虚拟机配置 内存 8GCPU...

  • [{name:1},{name:2}].forEach((v,i,ar) => {console.log(v,i,ar)});//基础遍历[{name:1},{name:2}].map((v) => v.name);//[1,2]返回对象数组中指定字段值的一位数组(不改变原始数组)[{name:1},{name:2},{name:3}...

  • 体验内容 使用gmapping方法利用turtlebot底盘移动信息和激光雷达数据进行建图。 1. 安装一些依赖包 sudo apt-get install ros-melodic-move-base* sudo apt-get install ros-melodic-map-server* sudo apt-get insta...

  • 前言 我们知道Java/Python这种语言能够很好得 支持反射。反射机制 就是一种用户输入的字符串到对应实现方法的映射,比如http接口中 用户传入了url,我们需要调用该url对应的方法/函数对象 从而做出对应的操作。 而C++ 并没有友好得支持这样的操作,而最近工作中需要通过C++实现http接口,这个过程想要代码实现得优雅...

  • Spec: TS36.211 - Table 5.7.1-2...

  • 阿里云介绍: 1. 下载安装包。作为阿里主要的数据传输工具Datax,阿里已经完全开源到github上面了。下载地址(https://github.com/alibaba/DataX)。 2. 安装环境: JDK(1.6以上,推荐1.6)Python(推荐Python2.6.X)Apache Maven 3.x (Compile D...

  • xmlns xml namespaces 参考 http://www.w3school.com.cn/tags/tag_prop_xmlns.asp http://www.w3school.com.cn/xml/xml_namespaces.asp

    这是一行
  • 1.创建数据库:create database database-name 2.删除数据库:delete database database-name 3.选择:select * from table where ... 4.插入:insert into table(field1,field2) values(value1,value...