原创:实验楼
1.1 数据库和 SQL 概念
通俗的说数据库就是一个数据仓库。这没什么好说的,详细的概念百度以下就好了。话不多说马上上手。
1.2Ubuntu下安装MySQL
- 在线安装
- sudo apt-get install mysql-server
- 若出现无发定位软件源,一般是源的问题,更换源为国内源就行了
– https://blog.csdn.net/qq_35451572/article/details/79516563
– 安装过程中它会提示你输入密码,确定后再次确认密码即可 - 安装客户端:sudo apt-get install mysql-client
- 验证是否已安装
– sudo netstat -tap | grep mysql , 出现以下现象则为安装成功
– 若找不到命令netstat, sudo apt-get install net-tools即可
1.3 启动MySQL服务
- sudo service mysql start
- 登陆mysql
– mysql -u root -p [你的密码] - 查看数据库
– show databases; # 分号作为语句的结束符 - 查看数据库中的表
– 首先,use <数据库的名字>,如我们use mysql 这里可以不用分号
– show tables; 查看表
2.1 创建数据库并插入数据
- 启动服务并打开mysql
– - 创建数据库
– create database [数据库名字]; 如:create database mysql_shiyan;
– show databases; 检查是否创建成功 - 先连接数据库,use mysql_shiyan
- 新建表
– create table 表名
(
列名a 数据类型(数据长度),
列名b 数据类型(数据长度),
列名c 数据类型(数据长度)
);
– 如我们新建一个学生信息表
create table student
(
id int(10),
name char(4),
phone int(12)
); - 认识一些数据类型
INT 4 整数
FLOAT 4 单精度浮点数
DOUBLE 8 双精度浮点数
ENUM – 单选,比如性别 ENUM(‘a’,‘b’,‘c’)
SET – 多选 SET(‘1’,‘2’,‘3’)
DATE 3 日期 YYYY-MM-DD
TIME 3 时间点或持续时间 HH:MM:SS
YEAR 1 年份值 YYYY
CHAR 0~255 定长字符串
VARCHAR 0~255 变长字符串
TEXT 0~65535 长文本数据 - 接着上面,我们往新建表中插入数据(三种不同插入方式)
– insert into student(id,name,phone) values(01,‘tom’,1101011);
– insert into student vaules(02,‘cobe’,12020120);
– insert into student(id,name) vaules(03,‘james’);
– select * from student; 查询表中所有信息
3.1约束
约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。
在MySQL中,通常有这几种约束:
3.2建立含有约束的表
- 准备实验教材
-1.使用命令git clone https://github,com/shiyanlou/SQL3.git
– 若没有安装git,sudo apt install git即可 - 2.有可能会报proxy的错误,详情百度(每个人情况不同),或者直接登录https://github,com/shiyanlou/SQL3.git下载压缩包(推荐)省时省力
-
- 已经下载完成后,直接右键文件夹然后提取到你想放的地方,cd 进入到解压好的目录下即可,这里我在home目录下
- 4.接着,我们要加载好SQL_3目录下的MySQL-03-01.sql
–mysql -u root -p 密码
– 进入mysql控制台输入命令,然后查看下这个数据库(如图)
3.3主键
- 主键 (PRIMARY KEY)是用于约束表中的一行,作为这一行的唯一标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要,主键不能有重复记录且不能为空。
- 作用:
1)保证实体的完整性;
2)加快数据库的操作速度
3)在表中添加新记录时,DBMS会自动检查新记录的主建值,不允许该值与其他记录的主键值重复。
- DBMS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。
3.4默认值约束
-默认值约束 (DEFAULT) 规定,当有 DEFAULT 约束的列,插入数据为空时,将使用默认值。
例如代码
phone int(10)default '110110' # 说明phone有default约束,默认值为110110
3.5 外键
- 如果公共关键字(如图两张表都含有)在一个关系(一张二维表实际上就是一个关系)中是主关键字,那么这个公共关键字(公司代号)被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。
下面通过一个例子理解这几个约束
学生信息表student
sid | sname | gender |
---|---|---|
1 | Cobe | 男 |
2 | Jame | 男 |
3 | Rose | 女 |
课程信息表course
cid | cname |
---|---|
1 | math |
2 | chinese |
3 | english |
成绩表mark
mid | sid | cid | score |
---|---|---|---|
1 | 1 | 1 | 80 |
2 | 2 | 1 | 85 |
3 | 3 | 1 | 90 |
4 | 1 | 2 | 60 |
5 | 2 | 2 | 90 |
6 | 3 | 2 | 75 |
7 | 1 | 3 | 95 |
8 | 2 | 3 | 76 |
9 | 3 | 3 | 85 |
- 1.创建一个数据库grade_system
create database grade_system;
- 2.分别创建三个表student, course, mark
use grade_system # 新建表之前必须连接这个数据库
# 新建学生信息表
create table student(
sid int not null auto_increment; # 这里int()并没有给它固定的长度,而是指定非空并采用自增方式(自增详解见代码尾处)
sname varchar(20) not null, # 名字非空
gender varchar(10) not null, # 性别非空
primary key(sid) # 指定学生id为表student的主键
);
# 新建课程表
create table course(
cid int not null auto_increment,
cname varchar(20) not null,
primary key(cid)
);
# 新建成绩表
create table mark(
mid int not null auto_increment,
sid int not null,
cid int not null,
score int not null,
primary key(mid),
foreign key(sid) references student(sid),# 指定外键
foreign key(cid) references course(cid) # 指定外键
);
# 指定外键的语法是foreign key(外键名) references 表名(外键名);
# 每张表的主键都用了auto_incremen修饰符,auto_increment修饰符
只适用于INT字段,表明MySQL应该自动为该字段生成一个数(每次在上一次生成的数值上面加1)。
4.0 select 语句的语法基础
- 首先,还是同3.2节一样到https://github.com/shiyanlou/SQL4.git把资源下载,方法同3.2
- 进入mysql控制台,将上节的mysql_shiyan数据删除
- 然后做如下操作
- 开始
5.数据库及表的修改与删除
- https://github.com/shiyanlou/SQL5.git
- 重命名一张表
- 删除一张表
drop table 表名;
- 对列修改
- 修改表中的值
– 很多时候我们都不会修改整个数据库或整个表,而是某些值
– update 表名 set 列1=值1,列2=值2 where 条件;
- mysql> # 删除一行的记录
– delete from 表名 where 条件;
– 把Jack的数据删除
delete from employee where name='Jack';