1. 程式人生 > 其它 >DML語句、DQL語句、完整性以及約束

DML語句、DQL語句、完整性以及約束

技術標籤:資料庫MySQLmysql

文章目錄

一、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 = 23SELECT * 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','男');

結果展示
在這裡插入圖片描述