(一)
0、关系型数据库核心元素有哪些?
数据库分为关系型数据库和非关系型数据库,我们学的是关系型数据库,关系型数据库的核心元素有字段(列)、记录(行)。
==数据行(记录)、数据列(字段)、数据表(数据行的集合)、数据库(数据表的集合)。
1、使用命令行连接数据库服务器的命令是什么?
mysql -uroot -p
==mysql -u用户名 -p密码
或者mysql -u用户名 -p
回车后输入密码
2、列出数据库的命令
* 查看所有数据库
show databases;
* 查看数据库
查看所有数据库和查看数据库的区别是?use?
==题目错误,应该是使用数据库:use 数据库名;
* 查看当前使用的数据库
select database();
* 创建数据库
create database classes;
==create database 数据库名 charset=utf8;
* 删除数据库
drop database classes;
==drop database 数据库名;
创建数据库python
create database python;
==注意:创建的时候可以注上编码:create database python=utf8;
3、列出表的命令
* 查看当前数据库的所有表
show tables;
* 查看指定表的结构
desc table_name;
设计班级表结构为id、name、isdelete,编写创建表的语句
create table class(
id int(20),
name varchar(20) not null,
isdelete bit);
注意:varchar 类型一定要记得指定 长度。
create table classes(
id int unsigned auto_increment primary key not null,
name varchar(10),
isdelete bit default 0
);
学习对ID的约束以及给isdelete设置默认值为0 。
4、列出数据操作语句的语法
curd(create-update-r-drop)
* 增加
insert into class values(1,'mary',0);
* 修改
== update class set gender='男' where id=1;
* 删除
==delete from class where id=2;
* 基本查询(select)
==select * from 表名;
向班级表中插入数据python1、python2、python3
insert into class values(2,'python1',0);
insert into class values(3,'python2',0);
insert into class values(3,'python3',0);
==
如果id 是自增的,可以写成:
insert into classes(name) values('python1'),('python2'),('python2');
总结:
- 数据的增删改查不够熟练。
- 学习是输入,要有输出。
- 一直在说的SQL的CRUD,可以对应如下:
create-->insert
retrieve-->select
update-->update
delete-->delete
(二)
1、学生表结构设计为:姓名、生日、性别、家乡,并且学生表与班级表为多对一的关系,
写出创建学生表的语句
create table students(
id int auto_increment primary key,
name varchar(20),
birthday datetime,
sex varchar(20),
hometown varchar(20));
create table students(
id int unsigned auto_increment primary key not null,
name varchar(10) not null,
birthday date,
gender bit default 1,
hometown varchar(20),
clsid int unsigned,
isdelete bit default 0
);
对比:
多了class_id和isdelete两个字段。
日期的类型:
补充:mySql中日期类型
DATE()
日期。格式:YYYY-MM-DD
注释:支持的范围是从 '1000-01-01' 到 '9999-12-31
DATETIME()
*日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS
注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
TIMESTAMP()
时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS
注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
2、向学生表中插入数据:
* python1班有郭靖、黄蓉,要求:使用全列插入,一次一值
insert into students(name) values('郭靖');
insert into students(name) values('黄蓉');
insert into students values(0,'test',0,0,0);
%用全列插入输入了一个name为test的记录,
存在疑问:
(1)name之外的其余字段应该怎么输入值?
自增的字段可以自动填充,那非自增字段呢?
答案:自己随便写值上去。
(2)这里给的大条件是给学生表中插入记录,但为什么小条件要说明班级?
答案:确实是都插入到了students表里了。
* 未分班的学生有黄药师、洪七公、洪七婆,要求:使用指定列插入,一次多值
insert into students(name) values('黄药师'),('洪七公'),('洪七婆');
注意:给一个字段插入多条记录的写法。
3、查询学生的姓名、生日,如果没有生日则显示无
select name,ifnull(birthday,'无') from students;
注意:不同关系型数据库产品的语法对于null值的处理并不一直,简单罗列如下:
| 数据库产品名称 | 语法 |
|---|---|
| SQL Server / MS Access | 使用 ISNULL( 字段,指定的替换NULL的值 ); |
| Oracle | 使用 NVL() |
| MySQL | 使用 IFNULL() 函数 或者 COALESCE() 函数 |
4、查询学生的姓名、年龄
%这里是查询年龄???是的,查询年龄
select name,year(birthday)-year(now()) as age from students;
5、逻辑删除洪七婆
%数据插入的要求需要确认下
update students set isdelete=1 where name='洪七婆';
6、修改洪七公的性别为男
update students set sex='男' where name='洪七公';
(三)
1、设计科目表subjects,包括科目名称
create table subjects(
name varchar(20));
==
create table subjects(
id int unsigned auto_increment primary key not null,
name varchar(20),
isdelete bit default 0);
2、向表中插入数据,科目名有:python、数据库、前端
insert into subjects(name) values('python'),('数据库'),('前端');
3、设计成绩表,字段包括:学生id、科目id、成绩
create table grades(
name_id int auto_increment primary key,
grade_id int,
grade int);
==
create table grades(
id int unsigned auto_increment primary key not null,
name_id int unsigned ,
grade_id int unsigned,
grade int);
4、向成绩表中添加一些示例数据
insert into grades values(1,22,123),(0,23,99),(0,24,88);
==
insert into grades(name_id,grade_id,grade int) values
(100,1,1),(98,1,2),(90,1,3),
(95,2,1),(100,2,2),(98,2,3);










网友评论