数据库(2)

Python高级

约束(Constraint)

对插入数据库的数据进行合法性校验,保障数据的完整性

5中类型的约束:

1.非空 (NOT NULL):字段值不能为NULL

2.唯一(UNIQUE): 字段值不能重复,虽然唯一 但可以为NULL

3.主键(PRIMARY KEY):非空并且唯一

  1. 外键(FOREIGN KEY):字段的值只能为另外一张表中的某个字段的值

  2. 检查约束(CHECK):限制字段的取值范围

 

多表联合查询

笛卡尔集:

查询结果集

表名太长可以使用别名简化写法

where子句用于设置查询条件

order by子句用于排序

多级排序

TOP N问题:MySQL数据库中可以使用limit关键字实现(注意:这个语法不是SQL标准指定的)

 

 

扩展

 

两张表查询

select * from student,course,

select * from student st,score where st.sno = score.sno;

select st.sno, name, sex, phone ,cno from student st,score where st.sno = score.sno;

三张表查询

select * from student st, course c, score sc where st.name="张三" and c.name="python程序设计" and score<60 and st.sno=sc.cno and order by score desc

 

order by排序 加desc降序

 

MySQL还是会把我们的数据放到文件中,当我们给他一个数据

在djdb下创建一个名为student的表

create table djdb.student(

sno int(8) unsigned primary key,

name varchar(20) no null,

sex char(1) no null default "男",

sight float(2, 1),

phone char(11) not null);

 

显示最近的警告信息

show warnings;

 

MariaDB是MySQL的衍生产品,两个东西是一模一样的,是MySQL的创始人做出来的,

 

 

物理内存超过4G就要装64位系统

不然超过4G的内存空间就会白白的浪费

32位系统最大访问的内存空间就是4G,所拥有的编号为2的32次方减1,用完就不能再编号,64位系统就是2的64次方减1,为何要用64位,因为硬件的发展,配置的提高,32位系统的编号已经快满足不了硬件的需求,所以硬件商就要操作系统商往64位发展,以满足它们的需求。。

硬件电路设计层面为软件加速会让用户体验得到非常大的提高

硬件软件是相互携程向前发展的

操作系统是软硬件的主宰

 

list和tuple里面存放的都是地址,只不过tuple里的地址不能动,list里的可以动

深拷贝本质就是递归进行浅拷贝 ,深拷贝浅拷贝对于不可变对象没有影响

浅拷贝只拷贝第一层,深拷贝会拷贝多层

d = c[:] # 切片操作实现的拷贝也是浅拷贝

d = copy.copy(c) # 浅拷贝

d = copy.deepcopy(c) # 深拷贝

 

python解析器垃圾回收机制 gc机制,对于无用对象,垃圾回收机制会清理掉它,将其释放,供其他数据使用

开机按f8进安全模式,开机只会运行系统所必须的程序

 

所谓的效率往往从两个方面去考虑:时间和空间

 

 

完整的创建如下(以三张表为例,插入处可插入多条数据):

create table student(

sno int(6) unsigned primary key,

name varchar(20) not null,

sex char not null,

birth data not null,

sight float(2, 1),

phone char(11) unique,

check (sight > 2 and sight < 6));

 

insert into student values(1001, "张三", "男",“1957-4-23”,“132134234”);

 

create table score(

sno int(6) unsigned,

cno int(6) not null,

score tinyint unsigned not null

foreign key(sno) references student(sno)

)

 

insert into score values(1001, 2001, 98)

#课程信息

create table course(

cno int(6) unsigned,

name varchar(50) not null,

teacher varchar(20) not null,

primary key(cno)

)

 

insert into course values(2001, 'Python程序设计', ’azhe‘)

insert into course values(2002, 'JAVA程序设计', ’老王‘)

insert into course values(2003, 'C++程序设计', ’李四‘)

 

 

1.查询出所有有挂科的学生的信息

select * from student st, score where st.sno=score.sno and score < 60 and st.sno= sc.sno;

2.查询出出班上所有女生Python程序设计这门课的前两名

select * from student st,course c,score sc where st.sex="女" and c.name="Python程序设计" limit 2;

 

3.查询出班上所有使用联通手机号并且Python程序设计排名前三的学生信息

select distinct * from student st, course c, score sc where st.phone regexp"^131[0-9]{8}" and c.name="Python程序设计" limit 3;

4.查询出班上平均分最高的学生信息

select avg(score) from score,student st group by name

select * from student, score where score=(select max( from score);

 

 

上一篇:(4)初级SQL(数据查询功能①主干)


下一篇:数据库的右连接 RIGHT JOIN