数据库基础——01

数据库基本数据类型

INT 整型

image-20240628103300663

BIGINT

image-20240628104254063

DOUBLE

image-20240628104752368

CHAR

image-20240628105546609

VARCHAR

image-20240628105755376

时间类型

image-20240628110238951

DATETIME可以保存年月日时分秒

  • 可以以字符串形式插入,该字符串格式’yyyy-MM-dd hh:mm:ss’。
  • DATETIME类型插入数据时,可以忽略时分秒,忽略后默认值为0
  • DATATIME累哦行插入数据时,不可以忽略年月日

参考代码

#判断数据库是否存在
DROP DATABASE IF EXISTS mydb;

# 创建数据库
CREATE DATABASE  mydb;

#使用数据库
USE mydb;


#创建表
CREATE TABLE person(
    name VARCHAR(24),
    age INT
);

#查看表结构
-- DESC person;

#插入数据
INSERT INTO person VALUES
    ('张三',19),
    ('李四',20),
    ('王五',21),
    ('赵六',22),
    ('钱七',23),
    ('孙八',24);


#将person表中的年龄全部换为40
-- UPDATE person SET age = 40;


# 将person表中的张三的年龄换为40
UPDATE person SET age = 10 WHERE name = '张三';
#修改'李四'的名字为'李老四',年龄为66
UPDATE person SET name = '李老四',age = 66 WHERE name = '李四';

#查看person表
SELECT * FROM person;

#为person表创建自增主键,并将其放在第一位
ALTER TABLE person ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;

#删除主键列
ALTER TABLE person DROP id;

#添加别的字段
ALTER TABLE person ADD gender INT DEFAULT 1;

#删除字段
ALTER TABLE person DROP gender;

#删除年龄大于60的数据
DELETE FROM person WHERE age > 60 AND name = '李三';

CREATE TABLE person1(
    id INT,
    age INT UNSIGNED
);

# INT插入数据为小数时,会自动截取小数点前面的数字
# 插入数据为负数时,会报错
INSERT INTO person1 VALUES
                        (1,2.3),
                        (2,3.4);
INSERT INTO person1 VALUES
                        (3,12);
SELECT * FROM person1;

CREATE TABLE person2(
                        age INT(3), # 最大值999
    # 宽度7,2小数,即3位数带两小数
                        salary DOUBLE(7,2) #最大值99999.99 超范围报错
);
# 整数超过范围会报错
INSERT INTO person2(salary) VALUE(99999.99);
# 当精度超过范围的时候会发生四舍五入进位
INSERT INTO person2(salary) VALUE(1234.567);
# 但是如果四舍五入后超过了范围也是会报错的
INSERT INTO person2(salary) VALUE(99999.997);
SELECT * FROM person2;




CREATE TABLE userinfo(
    id INT,
    name VARCHAR(30),
    gender CHAR(1),
    birthday DATETIME,
    salary DOUBLE(7,2)
);
/*
DATETIME可以保存年月日时分秒
可以以字符串形式插入,该字符串格式'yyyy-MM-dd hh:mm:ss'。
DATETIME类型插入数据时,可以忽略时分秒,忽略后默认值为0
DATETIME类型插入数据时,不可以忽略年月日
 */
INSERT INTO userinfo VALUES
                        (1,'张三','男','2000-01-01 12:12:12',10000.23),
                        (2,'李四','女','2011-02-02 12:12:12',20000.42),
                        (3,'王五','男','2012-03-03 12:12',30000.65),
                        (4,'赵六','女','2023-04-04',40000.78);
SELECT * FROM userinfo WHERE salary > 30000;

数据库约束分类

1、主键约束

image-20240628114747569

注意:
  1. 主键字段不可以插入重复的值
  2. 主键字段不可以插入NULL值,但是如果使用了自增,那就可以使用NULL
  3. 插入记录时不可以忽略主键字段,除非关键字有默认的生成方式(比如自增)
  4. 更新数据时,不可以将重复的值更新到主键字段上
  5. 不可以将NULL值更新到主键字段上
自增(AUTO_INCREMENT)
  1. 主键字段的值不会更新,通常插入如数据时应有系统生成
  2. 最常见的方式就是使用自增:AUTO_INCREMENT
  3. 用于自动生成唯一的递增数值的特性,它通常用于定义表的主键列,以确认在每次插入新行时,都会自动为该列生成一个唯一的递增值。
自增注意
  1. id列被定义为主键,并且使用 AUTO_INCREMENT 关键字。在每次插入新行时MariaDB会自动为id列分配一个唯一的递增值。
  2. 修改表时,也可以为字段添加自增
  3. 主键具有自增后,那么插入数据可以忽略主键字段
  4. 插入时可以显示插入的NULL,此时还是会使用自增,并非将NULL值插入
2、非空约束

image-20240628140939116

注意:
  • 向具有非空约束字段插入数据时,不可以将NULL值插入
  • 插入数据时也不可以忽略具有非空约束的字段
  • 不能将NULL值更新到具有非空约束的字段上
3、唯一性约束

image-20240628142439839

注意:
  • 修改表时可以为字段添加唯一性约束
  • 如果该字段具有非空约束,若仅指定唯一性约束时,会将非空约束取,如果需要保留非空约束,需要一并指定。
  • 插入数据时不能将重复的值插入到具有唯一性约束的字段上
  • NULL值可以插入到具有唯一性的约束的字段上,并且多条记录都可以是NULL
  • 更新数据也不能将重复的值更新到具有唯一性约束的字段上,NULL除外
4、检查约束

image-20240628143258618

注意:

插入数据时,值不能违背CHECK约束要求

更新数据时也不能违背CHECK约束要求

5、外键约束(开发中不常用)

image-20240628143938998

注意:

后续介绍

代码示例

# 主键约束 PRIMARY KEY
# 自增 AUTO_INCREMENT
 CREATE TABLE userinfo1(
     id INT PRIMARY KEY,
     name VARCHAR(30),
     gender CHAR(1),
     birthday DATETIME,
     salary DOUBLE(7,2)
 );
INSERT INTO userinfo1 VALUES
      (1,'张三','男','2000-01-01 12:12:12',10000.23),
      (2,'李四','女','2011-02-02 12:12:12',20000.42),
      (3,'王五','男','2012-03-03 12:12',30000.65),
      (4,'赵六','女','2023-04-04',40000.78);

#当主键字段没有指明默认的方式生成时,不可以忽略主键字段
INSERT INTO userinfo1(name,gender,birthday,salary)
VALUES( '张三','男','2000-01-01 12:12:12',10000.23);

#更新也是不可以的,id不可以更新重复的值
UPDATE userinfo1 SET id = 2 WHERE name = '张三';

# 自增练习
# 虽然可以使用NULL,但是不建议,因为如果你在多个表中插入数据使用NULL,那么如果第一个表的最后一条数据的id是5,
# 那么第二个表插入数据会继承上面的id排序,这个表的第一条数据的id是6,而不是从1开始,所以不建议使用NULL
CREATE TABLE userinfo2(
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(30),
    gender CHAR(1),
    birthday DATETIME,
    salary DOUBLE(7,2)
);

INSERT INTO userinfo2 VALUES
      (NULL,'张三','男','2000-01-01 12:12:12',10000.23),
      (NULL,'李四','女','2011-02-02 12:12:12',20000.42),
      (NULL,'王五','男','2012-03-03 12:12',30000.65),
      (NULL,'赵六','女','2023-04-04',40000.78);
SELECT * FROM userinfo2;

ALTER TABLE userinfo1 CHANGE id id INT AUTO_INCREMENT;

# 非空约束 NOT NULL
CREATE TABLE userinfo3(
    id     INT AUTO_INCREMENT PRIMARY KEY,
    name   VARCHAR(30) NOT NULL,
    gender CHAR(1)     NOT NULL
);
INSERT INTO userinfo3 VALUES
      (NULL,'张三','男'),
      (NULL,'李四','女'),
      (NULL,'王五','男');
      -- (NULL,'赵六',NULL); -- 报错,非空字段不能为空

SELECT *  FROM userinfo3;

# 唯一约束 UNIQUE
CREATE TABLE userinfo4(
    id     INT AUTO_INCREMENT PRIMARY KEY,
    name   VARCHAR(30) NOT NULL,
    gender CHAR(1)     NOT NULL,
    email  VARCHAR(30) UNIQUE
);
INSERT INTO userinfo4(name, gender, email) VALUES
      ('张三','男','zhangsan@163.com'),
      ('李四','女','lisi@163.com'),
      ('王五','男','wangwu@163.com');
     --  (NULL,'赵六','女','wangwu@163.com'); -- 报错,不满足唯一性

# drop table userinfo4;

# 虽然唯一,但是NULL除外
INSERT INTO userinfo4(name, gender, email) VALUES
      ('JOBS','男',NULL),
      ('STEVE','男',NULL);
# 修改表时,为字段之前有非空约束,那么若仅指定唯一约束时,会自动取消非空约束
ALTER TABLE userinfo4 CHANGE email email VARCHAR(30) UNIQUE;
# 此时要将两个约束一起使用
ALTER TABLE userinfo4 CHANGE email email VARCHAR(30) UNIQUE NOT NULL;

SELECT *  FROM userinfo4;

#检查约束  CHECK
CREATE TABLE userinfo5(
    id     INT AUTO_INCREMENT PRIMARY KEY,
    name   VARCHAR(30) NOT NULL,
    gender CHAR(1)     NOT NULL,
    email  VARCHAR(30) UNIQUE,
    salary DOUBLE(7,2) CHECK(salary > 0) -- 薪水不能小于0
);
INSERT INTO userinfo5(name, gender, email, salary) VALUES
      ('张三','男','zhangsan@163.com',10000.23),
      ('李四','女','lisi@163.com',20000.42),
      ('王五','男','wangwu@163.com',30000.65);
      -- ('赵六','女','zhaoliu@163.com',-10000.78); -- 报错,检查后不满足约定条件
# drop table userinfo5;
SELECT *  FROM userinfo5;
  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值