Linux云計算訓練營筆記day08(MySQL數據庫)
目錄
- Linux云計算訓練營筆記day08(MySQL數據庫)
- 數據準備
- 修改更新update
- 刪除delete
- 數據類型
- 1.整數類型
- 2.浮點數類型(小數)
- 3.字符類型
- 4.日期
- 5.枚舉: 表頭的值必須在列舉的值里選擇
- 拷貝表
- 復制表頭和數據
- 只復制表頭不復制數據
- 約束條件
- 約束種類
- 主鍵
- 自增
- 非空約束
- 唯一約束
- 檢查約束
數據準備
– Active: 1747188627686@@127.0.0.1@3306@gongli
CREATE DATABASE gongli CHARSET=utf8;
use gongli;
CREATE Table user(id int,name VARCHAR(15),age int
);
INSERT INTO user VALUES(1,"張三",18);
INSERT INTO user VALUES(2,"李四",30);
INSERT INTO user VALUES(3,"王五",40);
修改更新update
update 表名 set 字段=值 where 條件
where中常用的基礎條件= > >= < <= <>(不等于)
-- 1.把張三的名字修改為韓立 ctrl + /
UPDATE user set name="韓立" where name="張三";
-- 2.把id為2的名字修改為王林
UPDATE user set name="王林" where id=2;
-- 3.同時修改多個值
UPDATE user set name="蕭炎", age=25 where id=3;
刪除delete
刪除 delete 用于刪除表中的記錄
delete from 表名 where 條件
-- 刪除id大于等于3的數據
DELETE from user where id>=3;
DELETE from user where name="王林";
-- 把表中所有的數據都刪除, 表還存在
DELETE from user;
-- 顯示當前庫中的所有表
SHOW TABLES;
-- 刪除user表 把表中所有的數據都刪除, 表也不存在
DROP TABLE user;
-- 查詢所有數據
SELECT * from user;
總結:
insert 向表中插入數據
update 修改表中的數據
delete 刪除表中的數據
-- 1)創建數據庫nsd,字符集使用utf8
CREATE DATABASE nsd CHARSET=utf8;
-- 2)創建表userinfo,字段有id(整數類型,長度為3) name字段(字符串類型)
-- money(整數類型,長度為6) age字段(整數類型,長度為3)
use nsd;
CREATE TABLE userinfo(id int(3),name VARCHAR(18),money int(6),age int(3)
);
-- 3)修改表名為user
RENAME TABLE userinfo to user;
-- 4)向表中插入數據 1 元瑤 8000 28 2 李木婉 10000 30
INSERT INTO user VALUES(1,"元瑤",8000,28),(2,"李木婉",10000,30);
-- 5)修改元瑤的年齡為35歲
UPDATE user set age=35 where name="元瑤";
-- 6)修改年齡小于35歲的價格為5000
UPDATE user set money=5000 where age<35;
SELECT * from user;
-- 7)刪除價格為5000的信息
DELETE from user where money=5000;
-- 8)刪除表
DROP TABLE user;
-- 9)刪除數據庫
DROP DATABASE nsd;
show DATABASEs;
數據類型
在數據庫中每一張表的每一個字段都要指定數據類型以確保可以正確的保存對應的數據
1.整數類型
TINYINT (-128,127)
SMALLINT (-32 768,32 767)
INT (-2 147 483 648,2 147 483 647) 13049306482
BIGINT (-9,223,372,036,854,775,808,9 223 372 036 854 775 807)
CREATE Table test1(id int,phone bigint
);
INSERT into test1 VALUES(1, 13049306482);
2.浮點數類型(小數)
FLOAT 單精度
DOUBLE 雙精度
DOUBLE(m,n): m和n都是一個整數,m用于表示數字的總位數,n表示小數的位數,m包含n
double(7,4): 一共有7位數字,其中4位是小數,最大值是999.9999
create table person(age TINYINT(3), salary DOUBLE(7,2)
);
desc person;
-- TINYINT的范圍是-128 ~~ 127, 取值不能超過,超范圍會報錯
INSERT into person VALUES(99,500.00);
-- 總共是7位.小數點保留2位,最大值是99999.99
INSERT into person VALUES(99,99999.99);
-- 插入小數時,如果精度超多了最大范圍,會四舍五入
INSERT into person VALUES(99, 99999.678);
-- INSERT into person VALUES(99, 99999.996); 四舍五入后超過了范圍也會報錯
select * from person;
CREATE Table t1(id INT,age TINYINT
);
desc t1;
3.字符類型
char(n) 定長字符串,無論實際保存的字符是多少,該字段一定占用字段指定長度的字符兩,不足部分補充空格
n是一個數字,最大長度是255
缺點:磁盤空間有所浪費 優點:磁盤空間占用長度是固定的,查詢效率高
varchar(n)變成字符串,磁盤占用量由實際保存的數據決定(用多少占多少)
n是一個數字,最大長度是65535
缺點:查詢效率慢一點 優點:磁盤空間沒有浪費
如果超出字符的個數會報錯
CREATE DATABASE tedu1 CHARSET=utf8;
use tedu1;
CREATE Table user(id int,name VARCHAR(3),email VARCHAR(15),city char(10)
);
-- 如果超出字符的個數會報錯
INSERT INTO user VALUES(1, "唐三", "59361882@qq.com");
INSERT INTO user VALUES(12, "唐小舞", "59361882@qq.com");
SELECT * from user;
drop table user;
4.日期
DATE(僅日期,格式YYYY-MM-DD) 年月日 19991117
TIME(時間或時間間隔,格式HH:MM:SS) 時分秒
DATETIME(日期+時間,范圍1000-9999年) 年月日時分秒
YEAR(1字節,存儲年份) 年
CREATE TABLE s1(姓名 CHAR(10),生日 DATE,出生年份 YEAR,家庭聚會 DATETIME,聚會地點 VARCHAR(10),上班時間 TIME
);
INSERT INTO s1 VALUES("秦塵",19991117,1999,20250514180000,"東門大橋",090000);
INSERT INTO s1 VALUES("林楓","2000-11-17","2000","2025-05-14 19:00:00","春熙路","10:00:00");
SELECT * from s1;
5.枚舉: 表頭的值必須在列舉的值里選擇
enum(“男”,“女”) 只能選一個
set(“吃”,“喝”,“玩”) 可以選多個
CREATE Table s2(id int,name CHAR(5),sex ENUM("男","女","人妖"),love SET("美杜莎","古薰兒","小醫仙","云韻","納蘭嫣然")
);
INSERT INTO s2 VALUES(1,"蕭炎","男","美杜莎,古薰兒");
INSERT INTO s2 VALUES(2,"蕭蕭","女","美杜莎");
INSERT INTO s2 VALUES(NULL,"蕭蕭","女","美杜莎");
SELECT * from s2;
desc s2;
show TABLES;
拷貝表
CREATE Table s3 select * from s2; 復制表頭和數據
復制表頭和數據
CREATE Table s3 select * from s2;
SELECT * from s3;
只復制表頭不復制數據
CREATE TABLE s4 like s2; 只復制表頭不復制數據
CREATE TABLE s4 like s2;
SELECT * from s4;
約束條件
給表添加特點的約束條件,只有滿足該約束添加的操作才可以進行,否則數據庫直接拒絕
約束種類
1)主鍵約束
2)非空約束
3)唯一約束
4)外鍵約束
5)檢查約束
主鍵
主鍵: 主鍵字段的值用來唯一表示該表中的一條記錄
主鍵必須是 非空 且 唯一
非空: 表中的每條記錄都要有值
唯一: 表中的每條記錄的值不可以重復
PRIMARY KEY
通常主鍵字段的名為ID
CREATE Table t3(id INT PRIMARY KEY,name VARCHAR(10),age INT(3)
);
-- 主鍵 PRIMARY KEY 非空 唯一
INSERT INTO t3 VALUES(1,"張三",18),(2,"李四",20);
INSERT INTO t3 VALUES(NULL,"王五",18); --主鍵不能插入空值, 也不能插入重復的id
-- INSERT INTO t3(name,age) VALUES("小醫仙",18); 插入數據時不能忽略主鍵字段, 除非自增
-- UPDATE t3 set id=1 where name="李四"; 修改的時候,不可以把重復的值更新到主鍵上
-- UPDATE t3 SET id=NULL WHERE name="李四"; 修改的時候,不可以把NULL更新到主鍵上
SELECT * from t3;
自增
具有主鍵約束的字段都會為其添加自增,自增是數據庫為字段生成值的一種機制
AUTO_INCREMENT 自增
id INT PRIMARY KEY AUTO_INCREMENT
CREATE Table t4(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(10),age INT(3)
);INSERT INTO t4(name,age) VALUES("蕭炎",30);
INSERT INTO t4(name,age) VALUES("王林",25);SELECT * from t4;desc t4;desc t3;
-- 給已有的主鍵字段添加 自增
ALTER Table t3 CHANGE id id int AUTO_INCREMENT;
desc s2;
-- 給已有的字段添加 主鍵 和 自增
ALTER Table s2 CHANGE id id int PRIMARY KEY AUTO_INCREMENT;
非空約束
NOT NULL,當字段添加非空約束后,字段的值不能為NULL
一張表可以有多個字段為非空約束
CREATE TABLE t5(id int PRIMARY KEY AUTO_INCREMENT,name VARCHAR(10) NOT NULL,age INT(3)
);INSERT INTO t5 VALUES(1,"王林",28);
-- INSERT INTO t5(age) VALUES(30); 插入值的時候NULL 不能為空
INSERT INTO t5(name) VALUES("李倩梅");
INSERT INTO t5(name,年齡) VALUES("王林",35);desc t5;
SELECT * from t5;DELETE FROM t5 WHERE id=2; --刪除id為2的數據
-- 在已經存在的表中添加非空約束
ALTER Table t5 CHANGE age age int(3) NOT NULL;
ALTER Table t5 CHANGE age 年齡 INT(3) NOT NULL; -- 修改字段名
唯一約束
UNIQUE 要求對應字段在整張表中的值是不可以重復的,一張表可以有多個字段添加唯一約束
CREATE Table t6(id int PRIMARY KEY AUTO_INCREMENT,name VARCHAR(10) UNIQUE,age INT(3) NOT NULL
);INSERT INTO t6(name,age) VALUES("蕭炎",25);
-- UNIQUE 唯一約束 可以插入NULL值
INSERT INTO t6(name,age) VALUES(NULL,30);
-- NULL是不不存在的值,所以不存在重復的意思
INSERT INTO t6(name,age) VALUES(null,30);SELECT * from t6;
desc t6;
-- 修改字段不能為空 并且 唯一
ALTER Table t6 CHANGE name name VARCHAR(10) NOT NULL UNIQUE;
DELETE FROM t6 WHERE id>=3;
-- 若指定唯一約束時,會將非空約束取消
ALTER Table t6 CHANGE age age INT(3) UNIQUE;
檢查約束
CHECK 該約束允許我們自定義約束條件,只有滿足該條件的操作才可以進行
CREATE Table t7(id int PRIMARY KEY AUTO_INCREMENT,name VARCHAR(10),age int(3) CHECK(age>0 and age<110)
);
INSERT INTO t7 VALUES(1,"元瑤",101);
INSERT INTO t7 VALUES(2,"韓立",3);
INSERT INTO t7(age) VALUES(7);
INSERT INTO t7(age) VALUES(8);
INSERT INTO t7(age) VALUES(9);SELECT * from t7;