mysql数据库(二)

数据库二

约束条件

  1. 默认值

    在没有设置的情况下,默认值为 NULL

    指定默认值的关键字是:

    CREATE TABLE t_default (
    default_value CHARDEFAULT ‘a’
    );

CREATE TABLE default_test(
  id INT(5),
  number INT(10) DEFAULT 8
);
INSERT INTO default_test(id) VALUES(1);
INSERT INTO default_test VALUES(2, 10);

效果图:

在这里插入图片描述

//如果默认值给定了,就会覆盖原来的默认值

2.非空

要限制一个列的值不能为空的关键字是:

CREATE TABLE t_notnull (

notnull_value INT NOT NULL

);

CREATE TABLE not_null(
  id INT(5),
  number INT(10) NOT NULL
);
INSERT INTO not_null(id) VALUES(1); #也就是说如果不给id值的话就会报错
INSERT INTO not_null VALUES(1, 11);

效果图:

在这里插入图片描述
在这里插入图片描述

3.唯一键

如果希望某列的值不能重复,可是使用关键字:

CREATE TABLE t_unique (

unique_value INT,

other_value INT,

UNIQUE KEY (unique_value)

);

CREATE TABLE unique_key(
  id INT(5),
  number INT(10),
  UNIQUE KEY(id)
);
INSERT INTO unique_key VALUES(001, 100);#此处001和1在int类型下是等价的,如果换成char类型则不同
INSERT INTO unique_key VALUES(002, 102);
INSERT INTO unique_key VALUES(001, 103);#该语句无法插入,因为id的值只能有一个

效果图:

在这里插入图片描述
在这里插入图片描述

4.主键 (主键等于 非空+唯一)

通常,每张表都需要一个主键来体现唯一性:

CREATE TABLE t_primarykey (

primarykey_value INT,

PRIMARY KEY (primarykey_value)

);

CREATE TABLE primary_key(
  id INT(5),
  number INT(10),
  PRIMARY KEY(id)
);

INSERT INTO primary_key VALUES(1, 10);
INSERT INTO primary_key VALUES(2, 12);
INSERT INTO primary_key VALUES(1, 11);#唯一键不可重复
INSERT INTO primary_key(number) VALUES(10);#唯一键必须非空

在这里插入图片描述
效果图:

在这里插入图片描述在这里插入图片描述

5.自增长(AUTO_INCREMENT 要求用在主键上 )

如果希望某整数列的值,默认+1填充:

CREATE TABLE t_auto (

auto_value INT AUTO_INCREMENT,

PRIMARY KEY (auto_value)

);

CREATE TABLE auto_increment(
  id INT(5) AUTO_INCREMENT,
  number INT(10),
  PRIMARY KEY(id)
);

INSERT INTO auto_increment VALUES(NULL, 99);
INSERT INTO auto_increment VALUES(NULL, 99);
INSERT INTO auto_increment VALUES(NULL, 99);
INSERT INTO auto_increment VALUES(8, 99);
INSERT INTO auto_increment VALUES(NULL, 99);#默认+1

效果图:

在这里插入图片描述 -----------------> 在这里插入图片描述

6.外键 (外键有,主键必须得有)

我(外键)有的你一定有,你没有的,我(外键)绝对没有: (我属于你)

CREATE TABLE c ( CREATE TABLE d (

c_col INT, d_col INT, C

PRIMARY KEY (c_col) FOREIGN KEY (d_col) REFERENCES c(c_col)

); );

CREATE TABLE a(
  id INT(5),
  PRIMARY KEY(id)
);
CREATE TABLE b(
  id INT(5),
  FOREIGN KEY(id) REFERENCES a(id)
);
INSERT INTO a VALUES(1);
INSERT INTO a VALUES(2);
SELECT * FROM a;
INSERT INTO b VALUES(1);
INSERT INTO b VALUES(2);

INSERT INTO b VALUES(3);#插入失败,因为主键a没有3,则外键b不能有3
INSERT INTO a VALUES(3);
INSERT INTO b VALUES(3);#插入成功,此时主键a有3

效果图:

在这里插入图片描述在这里插入图片描述

事务及编码(mysql支持事务)

事务的特点:在这里插入图片描述

表的修改

在这里插入图片描述
在这里插入图片描述

1.表述:

在这里插入图片描述

2.添加列:如果是char 默认为1字节
ALTER TABLE students 
ADD adress CHAR;

在这里插入图片描述

把列加到第一列:
ALTER TABLE students 
ADD address CHAR FIRST;

[外链图片转存失败(img-AnDrJ4TL-1563683623234)(E:\python vip\进阶班\02-0522-MySQL数据库(二)]\截图\19.png)

把列插到任意一列的后面:
ALTER TABLE students 
ADD addressS CHAR AFTER age;#插到age的后面

[外链图片转存失败(img-WeeOlG8e-1563683623234)(E:\python vip\进阶班\02-0522-MySQL数据库(二)]\截图\20.png)

3.删除列:
ALTER TABLE students 
DROP adress;
4.修改字段类型:
ALTER TABLE students
MODIFY number INT(10);
5.修改字段名称:
ALTER TABLE students 
CHANGE addressS addresss CHAR(12); #將addressS改名成address 注意新的字段要定义清楚
6.修改字段默认值:
ALTER TABLE students
ALTER addressS SET DEFAULT 'xiaos';

在这里插入图片描述

7.修改表名:
ALTER TABLE students 
RENAME TO new_students;

子查询

示例:

CREATE TABLE students (
  number CHAR(9),   # 学号
  name VARCHAR(20),  # 姓名
  age INT,   # 年龄
  birth DATE,   # 生日
  PRIMARY KEY(number)
);
INSERT INTO students VALUES ('201804001', '刘一', 16, '2002-01-01');
INSERT INTO students VALUES ('201804002', '陈二', 17, '2001-01-02');
INSERT INTO students VALUES ('201804003', '张三', 18, '2000-01-03');
INSERT INTO students VALUES ('201804004', '李四', 19, '2001-01-04');
INSERT INTO students VALUES ('201804005', '王五', 20, '2000-01-05');
INSERT INTO students VALUES ('201804006', '赵六', 21, '1999-01-06');
INSERT INTO students VALUES ('201804007', '孙七', 22, '1999-01-07');
INSERT INTO students VALUES ('201804008', '周八', 23, '1999-01-08');
INSERT INTO students VALUES ('201804009', '吴九', 24, '1999-01-09');
INSERT INTO students VALUES ('201804010', '郑十', 25, '1999-01-10');

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

问题:如何查找张三的成绩?

第一步 先在student表里找到张三的学号,再根据学号,在grade表里找成绩。

# 获取张三学号
SELECT number FROM students WHERE name='张三';
# 根据学号获取成绩
SELECT grade FROM grades
WHERE student_number=201804003;
#一步完成
SELECT student_number,subject_number,grade FROM grades
WHERE student_number=(SELECT number FROM students WHERE name='张三');

结果:

连续查询:

在这里插入图片描述
问题:如何在展示成绩的同时展示出其他成绩?

如何将多张表交叉到一起?
SELECT * FROM students JOIN subjects;

效果:
[外链图片转存失败(img-IkXm3e9f-1563683623237)(E:\python vip\进阶班\02-0522-MySQL数据库(二)]\截图\26.png)就是student有十个数据,subject有5个数据,交叉在一起有50个数据。

内连接:

但是现在我们只想要学号和其对应科目的成绩,怎么办。就需要内连接

左表 join 右表 on 左表.字段 = 右表.字段;

on表示连接条件

条件字段就是代表相同的业务含义(如my_student.c_id和my_class.id)

SELECT student_number,title,grade FROM subjects

JOIN grades ON subjects.number=grades.subject_number;

SELECT student_number,title,grade FROM subjects
JOIN grades ON subjects.number=grades.subject_number;

效果:

在这里插入图片描述

如果再加上姓名怎么办?
SELECT name,title,grade FROM subjects
JOIN grades ON subjects.number=grades.subject_number
JOIN students ON students.number = grades.student_number;

效果图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值