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;

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