學習地址:一天學會 MySQL 數據庫【https://www.bilibili.com/video/BV1Vt411z7wy】
目 錄
0、MySQL註釋的3種寫法(-- ...、#...、/*...*/)
1、如何在數據庫服務器中創建自己的數據庫? (create database 數據庫名;)
4、如何創建一個數據表?(create TABLE xxx...)
6、查看創建好的數據表的結構(describe 數據表名;)
1、查看數據表中的記錄(select * from 數據表名;)
2.1、INSERT方式①【VALUES(值1, 值2, ...)】
2.2、INSERT方式②【數據表名(數據表字段1, 字段2, ...)】
1.1、添加“唯一約束”方式①【add unique(字段名)】
1.2、添加“唯一約束”方式②【建表時,添加-unique(name)】
1.3、添加“唯一約束”方式③【建表時,添加-name varchar(20) unique】
1.4、添加“唯一約束”方式④【建表時,添加-unique(id, name)】
1.5、添加“唯一約束”方式⑤【建表時,添加-unique(id, name)】
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
);
5、查看數據表是否創建成功?(show tables;)
show tables;
6、查看創建好的數據表的結構(describe 數據表名;)
describe 數據表名;
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);
2.2、INSERT方式②【數據表名(數據表字段1, 字段2, ...)】
INSERT INTO pet(name, owner) VALUES ('xx', 'cc');
06-MySQL數據類型與類型選擇
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類型有專有的自動更新特性,將在後面描述。
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;