欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL正則表達(dá)式和約束使用詳解

 更新時間:2024年04月28日 10:02:09   作者:K要努力  
這篇文章主要給大家介紹了關(guān)于SQL正則表達(dá)式和約束的相關(guān)資料,SQL正則表達(dá)式是一種功能強大的工具,能夠在文本數(shù)據(jù)中實現(xiàn)高效的模式匹配和數(shù)據(jù)提取,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

主要內(nèi)容

  • 正則表達(dá)式
  • 約束

一.正則表達(dá)式

正則表達(dá)式是一種用來描述字符串模式的工具,它可以用于匹配、查找、替換等操作。正則表達(dá)式由字符和特殊字符組成,可以使用這些字符來定義匹配規(guī)則。

常用的正則表達(dá)式字符和特殊字符有:

  • 普通字符:表示匹配該字符本身,如a表示匹配字母"a"。
  • 元字符:具有特殊含義的字符,如.表示匹配除換行符以外的任意字符。
  • 字符類:用[]表示,表示匹配括號內(nèi)的任意一個字符,如[abc]表示匹配字符"a"、“b"或"c”。
  • 反義字符類:用[^]表示,表示匹配除括號內(nèi)字符以外的任意字符,如[^abc]表示匹配除"a"、“b”、"c"以外的任意字符。
  • 重復(fù)字符:用*、+、?表示,分別表示匹配前一個字符0次或多次、1次或多次、0次或1次。
  • 邊界匹配:用^、$表示,分別表示匹配字符串的開頭和結(jié)尾。
  • 分組:用()表示,可以將多個字符組合為一個整體,如(ab)+表示匹配"ab"、“abab”、"ababab"等。
  • 轉(zhuǎn)義字符:用\表示,可以將特殊字符轉(zhuǎn)義為普通字符,如\.表示匹配字符"."。

正則表達(dá)式的用法有:

  • 匹配:使用match()函數(shù)可以在字符串中查找匹配正則表達(dá)式的部分,并返回一個包含匹配結(jié)果的數(shù)組。
  • 查找:使用search()函數(shù)可以在字符串中查找匹配正則表達(dá)式的部分,并返回第一個匹配的位置。
  • 替換:使用replace()函數(shù)可以將字符串中匹配正則表達(dá)式的部分替換為指定的內(nèi)容。
  • 分割:使用split()函數(shù)可以根據(jù)正則表達(dá)式將字符串分割為多個部分,并返回一個數(shù)組。

其他用法

  • 量詞:用來指定前面的字符或字符類的重復(fù)次數(shù)。常用的量詞有:

    • *:匹配前一個字符0次或多次。
    • +:匹配前一個字符1次或多次。
    • ?:匹配前一個字符0次或1次。
    • {n}:匹配前一個字符恰好n次。
    • {n,}:匹配前一個字符至少n次。
    • {n,m}:匹配前一個字符至少n次,最多m次。
  • 特殊字符:

    • .:匹配除換行符以外的任意字符。
    • \d:匹配數(shù)字字符。
    • \D:匹配非數(shù)字字符。
    • \w:匹配字母、數(shù)字、下劃線字符。
    • \W:匹配非字母、數(shù)字、下劃線字符。
    • \s:匹配空白字符(空格、制表符、換行符等)。
    • \S:匹配非空白字符。
    • \b:匹配單詞邊界。
    • \B:匹配非單詞邊界。
  • 分組和引用:

    • ():將多個字符組合為一個整體。
    • (?:):非捕獲分組,用于只匹配但不捕獲。
    • \1、\2、…:引用前面的分組,用于匹配相同的內(nèi)容。
  • 斷言:

    • (?=...):正向肯定前瞻,用于匹配滿足某個條件的位置。
    • (?!...):正向否定前瞻,用于匹配不滿足某個條件的位置。
    • (?<=...):反向肯定后顧,用于匹配位于某個條件之后的位置。
    • (?<!...):反向否定后顧,用于匹配不位于某個條件之后的位置。

正則表達(dá)式的用法非常靈活,可以根據(jù)具體的需求來選擇合適的字符、特殊字符、量詞、分組等來構(gòu)建匹配規(guī)則。同時,正則表達(dá)式還支持一些高級的特性,如貪婪模式、非貪婪模式、修飾符等,可以進一步擴展正則表達(dá)式的功能。

正則表達(dá)式的詳細(xì)用法還有很多,可以根據(jù)具體的需求來選擇合適的正則表達(dá)式和相應(yīng)的函數(shù)來進行操作。

1.操作1

代碼如下(示例):

-- ^ 在字符串開始處進行匹配
SELECT 'abc' REGEXP '^a';
-- $ 在字符串末尾開始匹配
SELECT 'abc' REGEXP 'a$';
SELECT 'abc' REGEXP 'c$';
-- . 匹配任意字符
SELECT 'abc' REGEXP '.b';
SELECT 'abc' REGEXP '.c';
SELECT 'abc' REGEXP 'a.';
-- [...] 匹配括號內(nèi)的任意單個字符
SELECT 'abc' REGEXP '[xyz]';
SELECT 'abc' REGEXP '[xaz]';

2.操作2

代碼如下(示例):

-- [^...] 注意 ^ 符合只有在 [] 內(nèi)才是取反的意思,在別的地方都是表示開始處匹配
SELECT 'a' REGEXP '[^abc]';
SELECT 'x' REGEXP '[^abc]';
SELECT 'abc' REGEXP '[^a]';
-- a* 匹配 0 個或多個 a, 包括空字符串。 可以作為占位符使用 . 有沒有指定字符都可以匹配
到數(shù)據(jù)
SELECT 'stab' REGEXP '.ta*b';
SELECT 'stb' REGEXP '.ta*b';
SELECT '' REGEXP 'a*';
-- a+ 匹配 1 個或者多個 a, 但是不包括空字符
SELECT 'stab' REGEXP '.ta+b';
SELECT 'stb' REGEXP '.ta+b';

3.操作3

代碼如下(示例):

-- [^...] 注意 ^ 符合只有在 [] 內(nèi)才是取反的意思,在別的地方都是表示開始處匹配
SELECT 'a' REGEXP '[^abc]';
SELECT 'x' REGEXP '[^abc]';
SELECT 'abc' REGEXP '[^a]';
-- a* 匹配 0 個或多個 a, 包括空字符串。 可以作為占位符使用 . 有沒有指定字符都可以匹配
到數(shù)據(jù)
SELECT 'stab' REGEXP '.ta*b';
SELECT 'stb' REGEXP '.ta*b';
SELECT '' REGEXP 'a*';
-- a+ 匹配 1 個或者多個 a, 但是不包括空字符
SELECT 'stab' REGEXP '.ta+b';
SELECT 'stb' REGEXP '.ta+b';

4.操作4

代碼如下(示例):

-- a{m,n} 匹配 m 到 n 個 a, 包含 m 和 n
SELECT 'auuuuc' REGEXP 'au{3,5}c';
SELECT 'auuuuc' REGEXP 'au{4,5}c';
SELECT 'auuuuc' REGEXP 'au{5,10}c';
-- (abc) abc 作為一個序列匹配,不用括號括起來都是用單個字符去匹配,如果要把多個字符
作為一個整體去匹配就需要用到括號,所以括號適合上面的所有情況。
SELECT 'xababy' REGEXP 'x(abab)y';
SELECT 'xababy' REGEXP 'x(ab)*y';
SELECT 'xababy' REGEXP 'x(ab){1,2}y';

二.約束

SQL約束是用于限制數(shù)據(jù)庫表中數(shù)據(jù)的完整性和一致性的規(guī)則。它們定義了對表中數(shù)據(jù)的操作所允許的條件和限制。約束可以應(yīng)用于表的列或整個表。

約束的分類:

  • 主鍵約束(Primary Key Constraint):用于標(biāo)識表中的唯一記錄。主鍵約束要求列中的值是唯一的且不為空。
  • 外鍵約束(Foreign Key Constraint):用于建立表之間的關(guān)系。外鍵約束要求一個表的列的值必須是另一個表的主鍵值。
  • 唯一約束(Unique Constraint):用于確保列中的值是唯一的。唯一約束要求列中的值不能重復(fù)。
  • 非空約束(Not Null Constraint):用于確保列中的值不為空。非空約束要求列中的值不能為NULL。
  • 檢查約束(Check Constraint):用于定義列中值的范圍或條件。檢查約束要求列中的值必須滿足指定的條件。

約束的作用:

  • 數(shù)據(jù)完整性:約束可以確保表中的數(shù)據(jù)滿足特定的條件和規(guī)則,防止無效或不一致的數(shù)據(jù)進入數(shù)據(jù)庫。
  • 數(shù)據(jù)一致性:約束可以確保表之間的關(guān)系是正確的,避免了數(shù)據(jù)冗余和不一致。
  • 數(shù)據(jù)安全性:約束可以防止對表中數(shù)據(jù)的非法操作,保護數(shù)據(jù)的安全性。

約束的用法:

  • 創(chuàng)建約束:在創(chuàng)建表時,可以使用CREATE TABLE語句來定義約束。例如,可以使用PRIMARY KEY關(guān)鍵字定義主鍵約束,使用UNIQUE關(guān)鍵字定義唯一約束,使用FOREIGN KEY關(guān)鍵字定義外鍵約束等。
  • 修改約束:可以使用ALTER TABLE語句來修改表的約束。例如,可以使用ADD CONSTRAINT關(guān)鍵字來添加新的約束,使用DROP CONSTRAINT關(guān)鍵字來刪除約束等。
  • 禁用約束:可以使用ALTER TABLE語句來禁用約束。例如,可以使用DISABLE CONSTRAINT關(guān)鍵字來禁用約束,以便在需要時可以繞過約束進行操作。
  • 啟用約束:可以使用ALTER TABLE語句來啟用約束。例如,可以使用ENABLE CONSTRAINT關(guān)鍵字來啟用約束,以便在禁用后重新啟用約束。

總結(jié)起來,SQL約束是用于限制數(shù)據(jù)庫表中數(shù)據(jù)的完整性和一致性的規(guī)則。它們可以應(yīng)用于表的列或整個表,通過定義特定的條件和規(guī)則來確保數(shù)據(jù)的有效性和安全性。

1.主鍵約束

添加單列主鍵

方法1:
--在create table語句時,通過primary key
-- 在定義字段的同時指定主鍵,語法格式如下:
create table 表名 (
	...
	< 字段名 > < 數(shù)據(jù)類型 > primary key
	...
)

方式 1- 實現(xiàn):
create table emp1(
	eid int primay key,
	name VARCHAR(20),
	deptId int,
	salary double
);

方法2:
-- 在定義字段之后再指定主鍵,語法格式如下:
create table 表名 (
	...
	[constraint < 約束名 >] primary key [ 字段名]
);

方式 2- 實現(xiàn):
create table emp2(
	eid INT,
	name VARCHAR(20),
	deptId INT,
	salary double,
	constraint pk1 primary key(id)
);

添加多列主鍵(聯(lián)合主鍵)

語法:
create table 表名(
	...
	primary key (字段1,字段2,...,字段n)
);

實現(xiàn):
create table emp3(
	name varchar(20),
	deptId int,
	salary double,
	primary key(name,deptId)
);

通過修改表結(jié)構(gòu)添加主鍵

主鍵約束不僅可以在創(chuàng)建表的同時創(chuàng)建,也可以在修改表時添加。

語法;
create table 表名 (
	...
);
alter table < 表名 > add primary key (字段列表 );

實現(xiàn):
-- 添加單列主鍵
create table emp4(
	eid int,
	name varchar(20),
	deptId int,
	salary double,
);
alter table emp4 add primary key ( eid);

刪除主鍵約束

格式:
alter table <數(shù)據(jù)表名> drop primary key;

實現(xiàn):
-- 刪除單列主鍵
alter table emp1 drop primary key;
-- 刪除聯(lián)合主鍵
alter table emp5 drop primary key;

2.自增長約束

在 MySQL中,當(dāng)主鍵定義為自增長后,這個主鍵的值就不再需要用戶輸入數(shù)據(jù)了,而由數(shù)據(jù)庫系統(tǒng)根據(jù)定義自動賦值。每增加一條記錄,主鍵會自動以相同的步長進行增長。
通過給字段添加 auto_increment 屬性來實現(xiàn)主鍵自增長

語法:
字段名 數(shù)據(jù)類型 auto_increment

實現(xiàn):
create table t_user1(
	id int primary key auto_increment,
	name varchar(20)
);

特點:

  • 默認(rèn)情況下, auto_increment 的初始值是 1 ,每新增一條記錄,字段值自動加 1 。
  • 一個表中只能有一個字段使用auto_increment 約束,且該字段必須有唯一索引,以避免序號重復(fù)(即為主鍵或 主鍵的一部分)。
  • auto_increment約束的字段必須具備 NOT NULL 屬性。 auto_increment 約束的字段只能是整數(shù)類型( TINYINT 、SMALLINT 、 INT 、 BIGINT 等。
  • auto_increment 約束字段的最大值受該字段的數(shù)據(jù)類型約束,如果達(dá)到上限, auto_increment 就會失效。

指定自增字段初始值

-- 方式 1 ,創(chuàng)建表時指定
create table t_user2 (
	id int primary key auto_increment,
	name varchar(20)
)auto_increment=100;

--方式2,創(chuàng)建表之后指定
create table t_user3 (
	id int primary key auto_increment,
	name varchar(20)
);
alter table t_user2 auto_increment=100;

delete 和 truncate 在刪除后自增列的變化:
delete:數(shù)據(jù)之后自動增長從斷點開始
truncate:數(shù)據(jù)之后自動增長從默認(rèn)起始值開始

3.非空約束

語法:
方式 1 : < 字段名 >< 數(shù)據(jù)類型 > not null;
方式 2 : alter table 表名 modify 字段 類型 not null;

添加非空約束
--方法1,創(chuàng)建表時指定
create table t_user6 (
	id int ,
	name varchar(20) not null,
	address varchar(20) not null
);

--方法2,之后指定
create table t_user7 (
	id int ,
	name varchar(20) , -- 指定非空約束
	address varchar(20) -- 指定非空約束
);
alter table t_user7 modify name varchar(20) not null;
alter table t_user7 modify address varchar(20) not null;

刪除非空約束:
-- alter table 表名 modify 字段 類型
alter table t_user7 modify name varchar(20) ;
alter table t_user7 modify address varchar(20) ;

4.唯一約束

代碼如下(示例):

語法:
方式 1 : < 字段名 > < 數(shù)據(jù)類型 > unique
方式 2 : alter table 表名 add constraint 約束名 unique( 列 );

添加唯一約束 - 方式 1
-- 創(chuàng)建表時指定
create table t_user8 (
	id int ,
	name varchar(20) ,
	phone_number varchar(20) unique -- 指定唯一約束
);

添加唯一約束 - 方式 2
create table t_user9 (
	id int ,
	name varchar(20) ,
	phone_number varchar(20) -- 指定唯一約束
);
alter table t_user9 add constraint unique_ph unique(phone_number);

刪除唯一約束
-- alter table < 表名 > drop index < 唯一約束名 >;
alter table t_user9 drop index unique_ph;

5.默認(rèn)約束

語法
方式 1 : < 字段名 > < 數(shù)據(jù)類型 > default < 默認(rèn)值 >;
方式 2: alter table 表名 modify 列名 類型 default 默認(rèn)值 ;

添加默認(rèn)約束 - 方式 1

create table t_user10 (
id int ,
name varchar(20) ,
address varchar(20) default ‘ 北京' -- 指定默認(rèn)約束
);

添加默認(rèn)約束 - 方式 2
--alter table 表名 modify 列名 類型 default 默認(rèn)值
create table t_user11 (
	id int ,
	name varchar(20) ,
	address varchar(20)
);
alter table t_user11 modify address varchar(20) default ‘ 北京' ;

刪除默認(rèn)約束
-- alter table < 表名 > modify column < 字段名 > < 類型 > default null;
alter table t_user11 modify column address varchar(20) default null;

6.零填充約束

  • 插入數(shù)據(jù)時,當(dāng)該字段的值的長度小于定義的長度時,會在該值的前面補上相應(yīng)的 0
  • zerofill 默認(rèn)為 int(10)
  • 當(dāng)使用 zerofill 時,默認(rèn)會自動加 unsigned (無符號)屬性,使用 unsigned 屬性后,數(shù)值范圍 是原值的 2 倍,例如,有符號為 -128~+127 ,無符號為 0~256 。

代碼如下(示例):

create table t_user12 (
	id int zerofill , -- 零填充約束
	name varchar(20)
);

刪除
alter table t_user12 modify id int;

總結(jié)

以上是今天要講的內(nèi)容,學(xué)到了正則表達(dá)式和約束,包括正則表達(dá)式的字符和特殊字符,約束的分類,約束的作用,約束的用法。

到此這篇關(guān)于SQL正則表達(dá)式和約束使用的文章就介紹到這了,更多相關(guān)SQL正則表達(dá)式和約束內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論