DML語句、DQL語句、完整性以及約束
阿新 • • 發佈:2020-12-24
文章目錄
一、DML語句
1.插入資料
insert into tablename (列名,列名,列名....) values(值,值,值....);
- 例句
insert into t (id,name,address,birth,sex) values (1,'郭靖','桃花島','1980-1-1','男');
- 省略欄位名,意味著給所有的欄位定值,可以同時新增多條資料,中間用逗號隔開。
insert into t values (1,'郭靖','桃花島','1980-1-1','男'),(2,'黃蓉','桃花島','1988-2-9','女');
** 注意 ** 如果id是自動增長的,那麼不能省略欄位
2.修改資料
update 表名 set 欄位名=值,欄位名=值, ... where 條件;
- 修改楊過的id為5
update t set id=5 where name = '楊過';
- 修改黃蓉的id為6,年齡為20
update t set id=6,age = 20 where name = '黃蓉';
3.刪除資料
delete from 表名 where 條件;
- 刪除名字是黃蓉的人
delete from t where name = 黃蓉;
二、DQL語句
1.普通查詢某列的值
select 欄位名,欄位名..... from 表名
- 顯示姓名和年齡兩列的值
SELECT age, name FROM t1;
2.帶條件查詢
select 欄位名,欄位名..... from 表名 where 欄位名 = 值
- 例子
SELECT * FROM t1 WHERE name = '小龍女';
SELECT * FROM t1 WHERE age >= 25 AND age <=30;
SELECT * FROM t1 WHERE age <= 20 OR age >=30;
SELECT * FROM t1 WHERE name <> '楊過';
3.模糊查詢
% 代表任意個字元, _ 代表任意的一個字元
採用LIKE關鍵字來寫模糊表示式
- 例子
查詢所有姓楊的人
SELECT * FROM t1 WHERE name LIKE '楊%';
查詢name含有王的人
SELECT * FROM t1 WHERE name LIKE '%王%';
查詢名字中含有王,且長度為2個字
SELECT * FROM t1 WHERE NAME LIKE '王_' OR '_王';
4.NULL的查詢
SELECT * FROM 表名 WHERE 欄位名 IS NULL;
- 例子
SELECT * FROM t1 WHERE age IS NULL;
SELECT * FROM t1 WHERE age IS NOT NULL;
SELECT * FROM t1 WHERE age IS NOT NULL AND age = '';
5.查詢關鍵字
-
distinct : 去除重複的資料,必須放在所有欄位前面
SELECT DISTINCT 欄位名 FROM 表名
-
in關鍵字 :表示在。。。。裡面
SELECT * FROM 表名 WHERE 欄位名 IN (value1,value2,...);
-
關鍵字 ORDER BY 當欄位值一樣時,預設按照ID升序排序
預設是升序(asc),(desc)降序
-
關鍵字group by 分組查詢
SELECT * FROM 表名 GROUP BY 欄位名;
-
例子
SELECT DISTINCT age FROM t1 (去除age列重複值)
SELECT * FROM t WHERE age IN (50,20,23); (查詢age = 20,age = 50,age = 23)
SELECT * FROM t ORDER BY age DESC; (age降序排列)
SELECT * FROM t ORDER BY age ,id DESC; 先按照age的升序排序,值一樣的按照降序排列
SELECT * FROM t GROUP BY sex; (按性別分組)
6.限制查詢
-
LIMIT m, n : m是開始的索引,n是擷取的長度
SELECT * FROM 表名 ORDER BY 欄位名 DESC LIMIT m,n;
-
例子
查詢年齡最大的三個人
SELECT * FROM t ORDER BY age DESC LIMIT 0,5;
SELECT * FROM t ORDER BY age DESC LIMIT 2,5;
7.聚合查詢
在MySQL中定義了5個聚合函式 分別是max() min() avg() sum() count()
- 例子
SELECT id ,NAME,MAX(age) FROM t; (查詢年齡最大的人 )
SELECT id ,NAME ,MIN(age) FROM t; (查詢年齡最小的人 )
SELECT AVG(age),SUM(age)/COUNT(id) , COUNT(*) FROM t ; (平均值)
SELECT COUNT(IFNULL (age,0)) FROM t; (年齡不為空的總數量)
SELECT COUNT(*) FROM t; (總數量)
SELECT SUM(age) FROM t; (年齡的總和)
三、完整性
完整性:用來保護非法的資料不允許進入到資料庫
完整性分類
1.域完整性:用來限定欄位的取值範圍
* 手段:資料型別
2.實體完整性:對關係中的記錄唯一性,也就是主鍵的約束
* 主鍵:用來唯一的區分每條記錄的一列或者多列的值。
* 主鍵特點:非空,唯一。
* 每一張表只能有一個主鍵
* 多列充當主鍵就成為聯合主鍵或者複合主鍵
* 手段:自增,主鍵
3.引用完整性:就是對外來鍵的約束
* 需要在子表中建立外來鍵來引用主表的主鍵(外來鍵只能引用主鍵)
* 外來鍵所在的表稱為子表或從表,主鍵所在的表稱為主表
* 在新增記錄時,必須先新增主表的記錄,然後再新增子表的記錄
* 修改主表的記錄時,不允許修改有外來鍵引用約束的主鍵
* 刪除資料的時候,必須先刪除子表的資料,然後刪除主表中的資料。
* 手段:外來鍵約束·
四、約束
約束:用來限定欄位的取值,對錶中資料進行限定,保證資料的完整性,有效性,正確性
1.約束的分類:
1.主鍵約束:
2.唯一約束:unique
3.非空約束:not null
4.預設約束:default
5.外來鍵約束:foreign key
-
演示自增以及約束
自增id
關鍵字:PRIMARY KEY(主鍵),AUTO_INCREMENT(自增)
-- 建立表
CREATE TABLE t3
(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT
)
-- 插入資料(未插入id,因為id自增從1開始)
INSERT INTO t3 (NAME,age) VALUES ('張無忌','20');
INSERT INTO t3 (NAME,age) VALUES ('郭靖','21');
INSERT INTO t3 (NAME,age) VALUES ('黃蓉','30');
INSERT INTO t3 (NAME,age) VALUES ('楊過','25');
結果展示
2.五個約束
-- 建立表
CREATE TABLE stu
(
id INT PRIMARY KEY ,
NAME VARCHAR(20) UNIQUE,
age INT NOT NULL,
sex VARCHAR(2) NOT NULL,
address VARCHAR(20) DEFAULT '北京'
);
-- 插入資料
INSERT INTO stu VALUES ('1','張無忌','20','男','明教');
INSERT INTO stu (id ,NAME ,age, sex ,address) VALUES ('2','郭靖','30','男','明教');
-- 未設定address,預設北京
INSERT INTO stu (id ,NAME ,age, sex ) VALUES ('3','黃蓉','31','男');
INSERT INTO stu (id ,NAME ,age, sex ) VALUES ('4','小龍女','31','男');
INSERT INTO stu (id ,NAME ,age, sex ) VALUES ('5','楊過','31','男');
結果展示