常见数据库:
MySQL(中小型,3306),Oracle(中大型,1521),sql server,Access
各数据库与网页编程语言的搭配常见的搭配(大概率这么配,可能更新也适配其他的):
ASP和.NET:MicrosoftSQL Server
PHP:MySQL、PostgresQL
Java: Oracle、MySQL
JDBC: java连接数据库的包 java和不同数据库要有不同的jar包
数据库连接工具: Navicat
数据类型
date YYYY-MM-DD 2023-10-31 time HH:MM:SS 14:54:10 year YYYY 2023 datetime YYYY-MM-DD HH:MM:SS
时间
主键,外键:
主键:唯一,不能为空
外键:
操作(操作大小写没区别)
分为三组
1.数据定义(Create、Drop)
创建数据库:create database database_name;
删除数据库:drop database database_name;
创建数据表(创建mysql数据表需要以下信息:表名、表字段名、定义每个表字段)
create table 表名 (属性名 数据类型 完整性约束条件,
属性名 数据类型 完整性约束条件,
属性名 数据类型 );
create table tea( //tips:表名后不要空格直接加括号
class int primary key,
speciality varchar(10),
teacher varchar(10),
institute varchar(10)
);
删除数据库表:DROP TABLE table_name ;
2.数据控制(Grant、Revoke)
3. 数据操纵(Select、Insert、Update、Delete) 这个最重点
and 和 or 中 and的优先级更高
插入语句
insert into table_name(field1, field2,...fieldN)
Values
(value1, value2,...valueN);
insert into tea values
(1,'网络工程','张与','计算机学院'),
(2,'习思想','李华','马克思学院'),
(3,'自动化','吴用','物电院')
Select 属性列表
from 表名
[where 条件表达式1]
[group by 属性名1 [having 条件表达式2]]
[order by 属性名2 [asc | desc]]
* 可以表示所有字段
查看数据库中的表结构 : desc 表名;
去除重复数值: select distinct 字段名 from 表名;
Like匹配查询: [not]like ‘字符串’; 例如 ......where name like "张三";
like匹配可含通配符% 或者 _ :例如........where name like "李%" ........where name like "李_梦" 下划线只匹配单个字符 %多个字符 李世民
AND多条件查询: 条件表达式1 AND 条件表达式2
OR多条件查询: 条件表达式1 OR 条件表达式2
limit 记录数 :limit n,m
n:开始位置 m:要检索的行数
行0 :检索出来的第一行为行0,而不是行1,
因此,limit 1,1将检索出第二行而不是第一行
排序: order by 列名 [ASC | DESC] 列名或者第几个列 根据列名(第几个列)来排序
ASC:升序(默认升序)
DESC:降序
分组查询 group by 将查询结果按某个字段或多个字段进行分组。字段中的值相等的为一组。
group by 属性名 [having 条件表达式] having只能在Group by子句后使用,不能单独使用,只能对分组计算的结果进行筛选
in关键字查询(如果字段的值在集合中,则满足查询条件):[not]in (元素1,元素2....元素n)
Between查询范围: [not] between 取值1 and 取值2
集合函数:
count()用来统计记录的条数; 例子: select count(*) from chengji
sum()用来计算字段的值的总和;
avg()用来计算字段的值的平均值:
max() 用来查询字段的最大值;
min()用来查询字段的最小值。
命令行连接数据库:mysql -h (主机地址)-u (账号)-p
操作什么数据库:use 数据库名
展示数据库有那些:show databases;
显示指定数据库的所有表:show tables;
查看表的信息:show columns from table_name;
正则表达式
是用某种模式去匹配一类字符串的一个方式 正则表达式的查询能力比通配字符的查询能
力更强大,而且更加的灵活。正则表达式可以应用于非常复杂查询
使用regexp关键字来匹配查询正则表达式: 属性名 regexp '匹配方式’
“^”查询以特定字符或者字符串开头的记录: ......where name regexp ' ^王' (找姓王的)
"$"查询以特定字符或者字符串结尾的记录: .......where name regexp'五$'(找什么五)
“.”匹配字符串中的任意一个字符:......where name regexp ' 王.'(找名字里有王的)
[..]字符集合 匹配所包含的任意一个字符:...where name regexp '["王""李"]; 可以指定的集合[a-z],[1-9] 或者 ....where name regexp '王|李'
“[^字符集合]” 匹配指定字符以外的字符: .....where phone regexp '[^1-8]'(找含9的电话)
匹配多个字符,* 和 + 都可以匹配多个该符号之前的字符。
“+”:至少表示一个字符 一次或多次
“*”:可以表示0个字符 ab*c
匹配 "ac"、"abc"、"abbc" 等,因为 b*
允许 b
字符重复零次或多次
‘{m}’或者’{m,n}’来指定字符串连续出现的次数: {m}
表示前一个字符或子模式必须精确重复 m
次 select * from table where column regexp 'a{3}'
会匹配包含 "aaa" 的字符串 {m,n}
表示前一个字符或子模式必须重复至少 m
次,最多 n
次
运算符:
算术运算符 比较运算符 逻辑运算符
查询函数:
联合查询 : union 并操作 union、交操作 intersect、差操作 except
union查询默认不返回重复记录
union查询的表的字段必须一样
union查询的数据类型必须能兼融
如果你希望保留所有行,包括重复的行,可以使用 union ALL
,它不去重
UNION用于合并具有相同字段结构的两个表的内容,主要用在一个结果中集中显示不同表的内容 你学校数据库,查老师和学生的ID,姓名 老师的表和学生的表 内容和起来了
select id,name from teachers union select id,name from students;
系统用户名:system_user() select sytem_user();
用户名:user() select user();
当前用户名:current_user() select current_user();
连接数据库用户名:session_user() select system_user();
数据库版本:version() select version(); 数据库名:database() select database();
数据库读取路径:@@basedir show variables like '%basedir%'; MYSQL安装路径:@@char show variables like"%char%";
查看当前系统版本:@@version_compile_os select @@version_compile_os;
其它相关函数:
left(s,n) #返回字符串s最左边的字符 n是个数
right(s,n) #返回字符串s最右边的字符
substr(s,n,len) #截取字符串s的第n个字符,且截取长度为len
判断当前用户的第一字符: 查询语句:select left(user(),1)=’r’; 判断当前用户的最后一个字符: 查询语句: select right(user(),1)=’r’; #正确返回1,错误返回0
截取当前数据第二个字符是否为r 查询语句: select substr(database(),2,1)=’r’;