MySQL数据库-笔记02【创建数据库与数据表、数据类型与类型选择、增删改查、6种约束概念与举例(主键约束、自增约束、唯一约束、非空约束、默认约束、外键约束)】

学习地址:一天学会 MySQL 数据库https://www.bilibili.com/video/BV1Vt411z7wy】 

目   录

04-如何创建 数据库、数据表?

0、MySQL注释的3种写法(-- ...、#...、/*...*/)

1、如何在数据库服务器中创建自己的数据库?  (create database 数据库名;)

2、选中某一数据库(use 数据库名;)

3、查看数据库中的所有数据表(show tables;)

4、如何创建一个数据表?(create TABLE xxx...)

5、查看数据表是否创建成功?(show tables;)

6、查看创建好的数据表的结构(describe 数据表名;)

05-INSERT增加数据记录

1、查看数据表中的记录(select * from 数据表名;)

2、往数据表中添加数据记录(insert xxx)

2.1、INSERT方式①【VALUES(值1, 值2, ...)】

2.2、INSERT方式②【数据表名(数据表字段1, 字段2, ...)】

06-MySQL数据类型与类型选择

1、MySQL常用数据类型

1.1、数值类

1.2、日期和时间类型

1.3、字符串类型

2、注意

3、数据类型如何选择

07-数据记录增删改查操作

1、插入数据(INSERT)

2、查看数据(SELECT)

3、删除数据(DELETE)

4、修改数据(UPDATE)

5、总结

08-约束-主键约束primary_key

1、MySQL建表约束

1.1、主键约束

09-约束-主键约束-联合主键

1、联合主键

10-约束-自增约束-auto_increment

1、自增约束

11-约束-主键约束-建表后添加与删除

1、修改表结构,添加主键约束

2、删除主键约束

3、使用modify修改字段,添加主键约束

12-约束-唯一约束-unique

1、添加唯一约束的方式

1.1、添加“唯一约束”方式①【add unique(字段名)】

1.2、添加“唯一约束”方式②【建表时,添加-unique(name)】

1.3、添加“唯一约束”方式③【建表时,添加-name varchar(20) unique】

1.4、添加“唯一约束”方式④【建表时,添加-unique(id, name)】

1.5、添加“唯一约束”方式⑤【建表时,添加-unique(id, name)】

2、删除唯一约束(drop)

3、总结

4、业务需求(用户注册表---综合实例)

13-约束-非空约束-not_null

14-约束-默认约束-default

15-约束-外键约束-foreign_key

1、创建2个表(班级表、学生表)

1.1、班级表(主表)(classes)

1.2、学生表(副表)(students)

2、插入数据

2.1、在班级表(主表)中插入数据!

2.2、在学生表(副表)中插入数据!

3、删除数据


04-如何创建 数据库、数据表?

0、MySQL注释的3种写法(-- ...、#...、/*...*/)

“-- ”   这种注释后面,要加一个空格!!!

1、如何在数据库服务器中创建自己的数据库?  (create database 数据库名;)

create database 数据库名;

2、选中某一数据库(use 数据库名;)

use 数据库名;

3、查看数据库中的所有数据表(show tables;)

show tables;

刚创建的数据库(test)中,没有任何数据表!

4、如何创建一个数据表?(create TABLE xxx...)

create TABLE pet( #pet 数据表名
    name VARCHAR(20), #name 数据字段,varchar 字符串数据类型
    owner VARCHAR(20),
    specise VARCHAR(20),
    sex CHAR(1), #字符类型
    brith DATE, #日期类型
    death DATE
);

注意事项

1:var()与varchar()的区别在于var()是定常的,哪怕存储的字符串没有达到"()"中数字的上限,var()依然会占用空格来填充空间.而varchar()则是不定长的,没有达到"()"中的上限则会自动去掉后面的空格;

2:性别不要用:sex 要用:gender  一个是性 一个是性别;

3:定义最后一个字段的时候不要加",";

4:上面的"VAR","VARCHAR","DATE"可以用小写.不过最好用大写来表示区分关键字,若不然也许写到后面你自己都不知道这个词是数据库中的关键字还是你自己自定义的一些数据,同时一定要用英文的标点符号也必须半角输入。 

5、查看数据表是否创建成功?(show tables;)

show tables;

6、查看创建好的数据表的结构(describe 数据表名;)

describe 数据表名;

 

Field:字段的名称;

Type:字段的类型,int、var、varchar;

Key:是否是关键字,如可以定义为:  primary key 或者 unique key   ...

Default:若是该字段没有主动设置值的时候,该字段的默认值。

05-INSERT增加数据记录

1、查看数据表中的记录(select * from 数据表名;)

select * from 数据表名;

2、往数据表中添加数据记录(insert xxx)

2.1、INSERT方式①【VALUES(值1, 值2, ...)】

INSERT INTO pet VALUES('名字','主人名','品种','1','2000-01-01',null);

 

NULL:代表的是空,表示该字段还没有数据.

千万不要主动填写'NULL',这代表字段有一个值叫做'null'.

2.2、INSERT方式②【数据表名(数据表字段1, 字段2, ...)】

INSERT INTO pet(name, owner) VALUES ('xx', 'cc');

INSERT INTO pet(name,owner) VALUES ('xx','cc');

06-MySQL数据类型与类型选择

菜鸟教程 :https://www.runoob.com/mysql/mysql-data-types.html

1、MySQL常用数据类型

MySQL支持多种类型,大致可以分为三类数值、日期/时间字符串(字符)类型。

1.1、数值类

MySQL支持所有标准SQL数值数据类型。

这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),

以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。

作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。

下面的表显示了需要的每个整数类型的存储和范围。

create table testType(number TINYINT);

show tables;

describe testType;

SELECT * FROM testType;

INSERT INTO testType VALUES(128);

 

1.2、日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

TIMESTAMP类型有专有的自动更新特性,将在后面描述。

注意:金钱最好用int/bigint(整数,单位用分,拿出来进行*100换成元),千万不要直接用浮点,会有精度损失。

1.3、字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

该节描述了这些类型如何工作以及如何在查询中使用这些类型。

2、注意

char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。

CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。

3、数据类型如何选择

日期:按照 格式 !

数值、字符串:按照 大小 !

07-数据记录增删改查操作

1、插入数据(INSERT)

INSERT INTO pet VALUES('kk1','cc1','dog1','1','1998-1-1',null);
INSERT INTO pet VALUES('kk2','cc2','dog2','2','1998-2-2',null);
INSERT INTO pet VALUES('kk3','cc3','dog3','1','1998-3-3','1998-12-2');
INSERT INTO pet VALUES('kk4','cc4','dog4','2','1998-4-4',null);

2、查看数据(SELECT)

select * from pet;

3、删除数据(DELETE)

DELETE FROM tablesName WHRER 条件;

delete from pet where name='名字';

4、修改数据(UPDATE)

UPDATE tableName SET 字段1=值1,字段2=值2 ... WHERE 条件;

update pet set name='旺旺财' where owner='保安李大爷';

5、总结

数据记录常见操作:

1、增加(INSERT)   2、删除(DELETE)   3、修改(UPDATE)   4、查询(SELECT)

08-约束-主键约束primary_key

1、MySQL建表约束

1.1、主键约束

1、主键约束;2、自增约束;3、外键约束;

4、唯一约束;5、非空约束;6、默认约束

它能够唯一确定一张表中的一条记录,通过给某个字段添加约束,可以使得该字段不重复而且不为空

create table user(
    id int PRIMARY KEY,
    name VARCHAR(20)
);

 

describe user;   ----->   id是不可以为null,且 key的值变为PRI(primary) !

INSERT INTO user VALUES (1, '张三');

主键不能

09-约束-主键约束-联合主键

1、联合主键

CREATE TABLE user2(
    id INT,
    name VARCHAR(20),
    password VARCHAR(20),
    PRIMARY key(id,name)
);

INSERT INTO user2 VALUES (1,'老王','123456');

联合主键只要所有的字段都不是相同的情况下,可以允许其中的字段重复。

10-约束-自增约束-auto_increment

1、自增约束

CREATE TABLE user3(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20)
);
INSERT INTO user3(name) VALUES('霸刀宋壹');
INSERT INTO user3(name) VALUES('哒哒子前辈');
INSERT INTO user3(name) VALUES('天帝子前辈');

没有 定义id值,但是自动生成了id。

11-约束-主键约束-建表后添加与删除

忘记 给表 添加 主键约束!-->修改表结构,添加主键!

删除表的主键约束!!!

CREATE TABLE user4(
    id int,
    name VARCHAR(20)
);

1、修改表结构,添加主键约束

alter table user4 add primary key(id);

2、删除主键约束

alter table user4 drop primary key;

3、使用modify修改字段,添加主键约束

alter table user4 modify id int primary key;

12-约束-唯一约束-unique

约束修饰的字段的值不可以重复!

create table user5(
    id int,
    name varchar(20)
);

1、添加唯一约束的方式

1.1、添加“唯一约束”方式①【add unique(字段名)】

alter table user5 add unique(name);
insert into user5 values(1, '张三');

  

1.2、添加“唯一约束”方式②【建表时,添加-unique(name)】

create table user6(
    id int,
    name varchar(20),
    unique(name)
);

 

1.3、添加“唯一约束”方式③【建表时,添加-name varchar(20) unique】

create table user7(
    id int,
    name varchar(20) unique
);

1.4、添加“唯一约束”方式④【建表时,添加-unique(id, name)】

unique(id, name):2个键在一起不重复,就可以 插入数据!

create table user8(
    id int,
    name varchar(20),
    unique(id, name)
);
insert into user8 values(1, '张三');

 

1.5、添加“唯一约束”方式⑤【建表时,添加-unique(id, name)】

alter table user7 modify name varchar(20) unique;

2、删除唯一约束(drop)

alter table user7 drop index name; /*name 是 字段名*/

3、总结

1、建表的时候,添加约束;

2、可以 使用 alter、add

3、alter、modify

4、删除(alter、drop)

4、业务需求(用户注册表---综合实例)

CREATE TABLE user_test(
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT'主键id',
    name VARCHAR(20) NOT NULL COMMENT'用户姓名,不能为空',
    phone_number VARCHAR(20) UNIQUE NOT NULL COMMENT'用户手机,不能重复且不能为空'
);

主键约束(primary key)中 包含了 唯一约束.
场景:业务需求(设计一张用户注册表,用户姓名必须要用手机号来注册,而且手机号和用户名称都不能为空。)

 

这样的话就达到了,每一个手机号都只能出现一次,达到了每个手机号只能被注册一次,
用户姓名可以重复,但是手机号码却不能重复,符合正常的逻辑需求。

 

非空约束(NOT NULL)

13-约束-非空约束-not_null

修饰的字段,不能为空。NULL

create table user9(
    id int,
    name varchar(20) not null
);
insert into user9 (id) values(1);

 

14-约束-默认约束-default

当插入字段值的时候,如果没有传值,就会使用默认值。

create table user10(
    id int,
    name varchar(20),
    age int default 10
);
insert into user10 (id, name) values(1, '张三');

insert into user10 values(1, '张三', 19);

 

15-约束-外键约束-foreign_key

设计到2个表:【父表、子表】(主表、副表)

副表要参照主表!

 

在副表中添加的数据,必须同样存在于主表。

 

1、主表(父表)中没有的数据值,在副表(子表)中,是不可以使用的。

2、主表中的记录被副表引用时,是不可以被删除的。

1、创建2个表(班级表、学生表)

1.1、班级表(主表)(classes)

-- 班级表
create table classes(
    id int primary key,
    name varchar(20)
);

1.2、学生表(副表)(students)

-- 学生表
create table students(
    id int primary key,
    name varchar(20),
    class_id int ,-- 关联班级表id,字段的数据类型需要相同
    foreign key(class_id) references classes(id)-- 绑定:指明class_id来自哪个表
    -- class_id必须来自classes表的id字段
);

 

2、插入数据

2.1、在班级表(主表)中插入数据!

-- 在班级表中插入数据!
insert into classes values(1, '1班');
insert into classes values(2, '2班');
insert into classes values(3, '3班');
insert into classes values(4, '4班');
insert into classes values(5, '5班');
insert into classes values(6, '6班');
select * from classes;

2.2、在学生表(副表)中插入数据!

-- 在学生表中插入数据!
insert into students values(1001, '张三', 1);
insert into students values(1002, '张三', 2);
insert into students values(1003, '张三', 3);
insert into students values(1004, '张三', 4);
select * from students;

3、删除数据

1、主表(父表)中没有的数据值,在副表(子表)中,是不可以使用的。

2、主表中的记录被副表引用时,是不可以被删除的。

delete from classes where id=4;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章