正则表达式是一种用来描述字符串模式的工具,它可以用于匹配、查找、替换等操作。正则表达式由字符和特殊字符组成,可以使用这些字符来定义匹配规则。
常用的正则表达式字符和特殊字符有:
a
表示匹配字母"a"。.
表示匹配除换行符以外的任意字符。[]
表示,表示匹配括号内的任意一个字符,如[abc]
表示匹配字符"a"、“b"或"c”。[^]
表示,表示匹配除括号内字符以外的任意字符,如[^abc]
表示匹配除"a"、“b”、"c"以外的任意字符。*
、+
、?
表示,分别表示匹配前一个字符0次或多次、1次或多次、0次或1次。^
、$
表示,分别表示匹配字符串的开头和结尾。()
表示,可以将多个字符组合为一个整体,如(ab)+
表示匹配"ab"、“abab”、"ababab"等。\
表示,可以将特殊字符转义为普通字符,如\.
表示匹配字符"."。正则表达式的用法有:
match()
函数可以在字符串中查找匹配正则表达式的部分,并返回一个包含匹配结果的数组。search()
函数可以在字符串中查找匹配正则表达式的部分,并返回第一个匹配的位置。replace()
函数可以将字符串中匹配正则表达式的部分替换为指定的内容。split()
函数可以根据正则表达式将字符串分割为多个部分,并返回一个数组。其他用法
量词:用来指定前面的字符或字符类的重复次数。常用的量词有:
*
:匹配前一个字符0次或多次。+
:匹配前一个字符1次或多次。?
:匹配前一个字符0次或1次。{n}
:匹配前一个字符恰好n次。{n,}
:匹配前一个字符至少n次。{n,m}
:匹配前一个字符至少n次,最多m次。特殊字符:
.
:匹配除换行符以外的任意字符。\d
:匹配数字字符。\D
:匹配非数字字符。\w
:匹配字母、数字、下划线字符。\W
:匹配非字母、数字、下划线字符。\s
:匹配空白字符(空格、制表符、换行符等)。\S
:匹配非空白字符。\b
:匹配单词边界。\B
:匹配非单词边界。分组和引用:
()
:将多个字符组合为一个整体。(?:)
:非捕获分组,用于只匹配但不捕获。\1
、\2
、…:引用前面的分组,用于匹配相同的内容。断言:
(?=...)
:正向肯定前瞻,用于匹配满足某个条件的位置。(?!...)
:正向否定前瞻,用于匹配不满足某个条件的位置。(?<=...)
:反向肯定后顾,用于匹配位于某个条件之后的位置。(?:反向否定后顾,用于匹配不位于某个条件之后的位置。
正则表达式的用法非常灵活,可以根据具体的需求来选择合适的字符、特殊字符、量词、分组等来构建匹配规则。同时,正则表达式还支持一些高级的特性,如贪婪模式、非贪婪模式、修饰符等,可以进一步扩展正则表达式的功能。
正则表达式的详细用法还有很多,可以根据具体的需求来选择合适的正则表达式和相应的函数来进行操作。
-- ^ 在字符串开始处进行匹配
SELECT 'abc' REGEXP '^a';
-- $ 在字符串末尾开始匹配
SELECT 'abc' REGEXP 'a$';
SELECT 'abc' REGEXP 'c$’;
-- . 匹配任意字符
SELECT 'abc' REGEXP '.b';
SELECT 'abc' REGEXP '.c';
SELECT 'abc' REGEXP 'a.';
-- [...] 匹配括号内的任意单个字符
SELECT 'abc' REGEXP '[xyz]';
SELECT 'abc' REGEXP '[xaz]';
-- [^...] 注意 ^ 符合只有在 [] 内才是取反的意思,在别的地方都是表示开始处匹配
SELECT 'a' REGEXP '[^abc]';
SELECT 'x' REGEXP '[^abc]';
SELECT 'abc' REGEXP '[^a]';
-- a* 匹配 0 个或多个 a, 包括空字符串。 可以作为占位符使用 . 有没有指定字符都可以匹配
到数据
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';
-- [^...] 注意 ^ 符合只有在 [] 内才是取反的意思,在别的地方都是表示开始处匹配
SELECT 'a' REGEXP '[^abc]';
SELECT 'x' REGEXP '[^abc]';
SELECT 'abc' REGEXP '[^a]';
-- a* 匹配 0 个或多个 a, 包括空字符串。 可以作为占位符使用 . 有没有指定字符都可以匹配
到数据
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';
-- 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约束是用于限制数据库表中数据的完整性和一致性的规则。它们定义了对表中数据的操作所允许的条件和限制。约束可以应用于表的列或整个表。
约束的分类:
约束的作用:
约束的用法:
总结起来,SQL约束是用于限制数据库表中数据的完整性和一致性的规则。它们可以应用于表的列或整个表,通过定义特定的条件和规则来确保数据的有效性和安全性。
添加单列主键
方法1:
--在create table语句时,通过primary key
-- 在定义字段的同时指定主键,语法格式如下:
create table 表名 (
...
< 字段名 > < 数据类型 > primary key
...
)
方式 1- 实现:
create table emp1(
eid int primay key,
name VARCHAR(20),
deptId int,
salary double
);
方法2:
-- 在定义字段之后再指定主键,语法格式如下:
create table 表名 (
...
[constraint < 约束名 >] primary key [ 字段名]
);
方式 2- 实现:
create table emp2(
eid INT,
name VARCHAR(20),
deptId INT,
salary double,
constraint pk1 primary key(id)
);
添加多列主键(联合主键)
语法:
create table 表名(
...
primary key (字段1,字段2,...,字段n)
);
实现:
create table emp3(
name varchar(20),
deptId int,
salary double,
primary key(name,deptId)
);
通过修改表结构添加主键
主键约束不仅可以在创建表的同时创建,也可以在修改表时添加。
语法;
create table 表名 (
...
);
alter table < 表名 > add primary key (字段列表 );
实现:
-- 添加单列主键
create table emp4(
eid int,
name varchar(20),
deptId int,
salary double,
);
alter table emp4 add primary key ( eid);
删除主键约束
格式:
alter table <数据表名> drop primary key;
实现:
-- 删除单列主键
alter table emp1 drop primary key;
-- 删除联合主键
alter table emp5 drop primary key;
在 MySQL中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。
通过给字段添加 auto_increment 属性来实现主键自增长
语法:
字段名 数据类型 auto_increment
实现:
create table t_user1(
id int primary key auto_increment,
name varchar(20)
);
特点:
指定自增字段初始值
-- 方式 1 ,创建表时指定
create table t_user2 (
id int primary key auto_increment,
name varchar(20)
)auto_increment=100;
--方式2,创建表之后指定
create table t_user3 (
id int primary key auto_increment,
name varchar(20)
);
alter table t_user2 auto_increment=100;
delete 和 truncate 在删除后自增列的变化:
delete:数据之后自动增长从断点开始
truncate:数据之后自动增长从默认起始值开始
语法:
方式 1 : < 字段名 >< 数据类型 > not null;
方式 2 : alter table 表名 modify 字段 类型 not null;
添加非空约束
--方法1,创建表时指定
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) ;
语法:
方式 1 : < 字段名 > < 数据类型 > unique
方式 2 : alter table 表名 add constraint 约束名 unique( 列 );
添加唯一约束 - 方式 1
-- 创建表时指定
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;
语法
方式 1 : < 字段名 > < 数据类型 > default < 默认值 >;
方式 2: alter table 表名 modify 列名 类型 default 默认值 ;
添加默认约束 - 方式 1
create table t_user10 (
id int ,
name varchar(20) ,
address varchar(20) default ‘ 北京’ -- 指定默认约束
);
添加默认约束 - 方式 2
--alter table 表名 modify 列名 类型 default 默认值
create table t_user11 (
id int ,
name varchar(20) ,
address varchar(20)
);
alter table t_user11 modify address varchar(20) default ‘ 北京’ ;
删除默认约束
-- alter table < 表名 > modify column < 字段名 > < 类型 > default null;
alter table t_user11 modify column address varchar(20) default null;
create table t_user12 (
id int zerofill , -- 零填充约束
name varchar(20)
);
删除
alter table t_user12 modify id int;
MySQL的视图
以上是今天要讲的内容,学到了正则表达式和约束,包括正则表达式的字符和特殊字符,约束的分类,约束的作用,约束的用法。