MySQL数据库基本知识
⼀、数据库表的相关操作
1、什么是SQL语⾔
SQL是⽤于访问和处理数据的标准的计算机语⾔
SQL语句不区分⼤⼩写,但是字符串区分,语句必须以分号结尾
空⽩和换⾏没有限制,但是不能破坏语法
注释有两种:#或/*xxxxxxxxxxxx*/
(1)创建逻辑库
SHOW DATABASES;  查看所有逻辑库
CREATE DATABASE demo; 创建demo逻辑库
DROP DATABASE demo; 删除demo逻辑库
(2)创建数据表
创建数据表
CREATE TABLE 数据库(
列名1 数据类型[约束] [COMMENT 注释],
列名1 数据类型[约束] [COMMENT 注释],
......
)[COMMENT = 注释];
# 创建⼀个逻辑库并且使⽤它
CREATE DATABASE test;
USE test;
CREATE TABLE student(
id INT UNSIGNED PRIMARY KEY,
name VARCHAR(20) NOT NULL,
sex CHAR(1) NOT NULL,
birthday DATE NOT NULL,
tel CHAR(11) NOT NULL,
remark VARCHAR(200)
);
INSERT INTO student VALUES(1,"李强","男","1995-09-18","12345678912","体育⽣")
(3)数据表的其他操作
SHOW tables; //打印出逻辑空间数据表的名字
DESC student; //查看数据表内的字段
SHOW CREATE TABLE student; //打印创建数据表时的SQL语句
DROP TABLE student; //删除数据表
2、不同的数据类型
(1)数字
注意:
float double 会存在丢失精度
decimal 的数据类型是数字串(10,2) 10表⽰⼀共有⼏个字符,2表⽰精确到⼩数点后⾯⼏位【优先使⽤decimal保存精确的浮点数】(2)字符串
(3)⽇期类型
3、修改数据表结构
(1)添加字段
ALTER TABLE 表名
ADD 列1 数据类型[约束] [COMMENT 注释],
ADD 列2 数据类型[约束] [COMMENT 注释],
......;
(2)修改字段类型和约束
ALTER Table 表名称
MODIFY 列1 数据类型[约束] [COMMENT 注释],
MODIFY 列1 数据类型[约束] [COMMENT 注释],......;
(3)修改字段的名称
ALTER TABLE 表名称
CHANGE 列1 新列名1 数据类型[约束] [COMMENT 注释],CHANGE 列1 新列名1 数据类型[约束] [COMMENT 注释],......;
(4)删除字段
format快速格式化命令ALTER TABLE 表名称
DROP 列1,
DROP 列2,
......;
4、数据库表字段约束
(1)数据库的范式
(2)字段约束
主键约束:
a、主键约束要求字段的值在全表必须唯⼀,⽽且不能为NULL值
b、建议主键⼀定要使⽤数字类型,因为数字的检索速度会⾮常快
c、如果主键是数字类型,还可以设置⾃动⽣成⾃动增长
create table t_teacher(
id int primary key auto_increment,
.
....
);
⾮空约束:
a、⾮空约束要求字段的值不能为null值
b、null值为没有值,⽽不是“”空字符串
create table t_teacher(
id int primary key auto_increment,
name varchar(200) not null,
married boolean note null default false
.....
);
default 表⽰默认值
数据库中没有boolean数据类型,会转化成tinyint型,True⽤1表⽰,False⽤0表⽰
唯⼀约束:
唯⼀约束要求字段值如果不为null,那么在全表必须唯⼀
create table t_teacher(
.....
tel char(11) not null unique
.....
);
外键约束:
外键约束⽤来保证关联数据的逻辑关系
mysql语句分类外键约束的定义是写在⼦表上的
create table t_dept(
deptno int unsigned primary key,
dname varchar(20) not null unique,
tel char(4) unique
);
create table t_temp(
empno int unsigned primary key,
ename varchar(20) not null,
sex enum('男','⼥') not null,
deptno int unsigned,
hiredate date not null,
foreign key (deptno) references t_dept(deptno)
);
enum枚举值,选择枚举内容填写
建表时先建主表,后建从表
删数据时,先删从表,在删主表
外键约束的闭环问题:
如果形成外键闭环,我们将⽆法删除任何⼀张表的记录
5、数据库的索引机制
(1)创建索引
CREATE TABLE 表名称(
…,
INDEX [索引名称] (字段),
……
);
(2)添加索引
CREATE INDEX 索引名称 ON 表名称(字段);
ALTER TALBE 表名称 ADD INDEX [索引名](字段)
(3)查看数据表的所有索引:
SHOW INDEX FROM 表名称;
(4)删除索引:css添加边框线
DROP INDEX 索引名称 ON 表名;
(5)举例
CREATE TABLE t_message(
id INT UNSIGNED PRIMARY KEY ,
content VARCHAR(200) NOT NULL,
type ENUM("公告","通报","个⼈通知") NOT NULL,
create_time TIMESTAMP NOT NULL,
INDEX idx_type (type)
);
DROP INDEX idx_type ON t_message;
CREATE INDEX idx_type ON t_message(type);
SHOW INDEX FROM t_message;
DROP INDEX idx_type ON t_message;
ALTER TABLE t_message ADD INDEX idx_type(type);
⼆、数据库的基本查询
1、数据表的基本查询
(1)记录查询
基本的查询语句是由SELECT和FROM关键字组成的
SELECT*FROM t_emp;
SELECT empno,ename,sal FROM t_emp;
SELECT 语句屏蔽了物理层的操作,⽤户不必关⼼数据的真实存储,交由数据库⾼效的查数据
使⽤列别名:通常情况下,SELECT ⼦句中使⽤了表达式,那么这列的名字就默认为表达式,因此需要⼀种对列名重命名的机制
SELECT
empno,
sal*12AS "income"
FROM t_emp;
查询语句的⼦句执⾏顺序:1. 词法分析与优化(读取SQL语句)2.FROM 选择数据来源 3. SELECT 选择输出内容(FROM 优先级⾼于SELECT)2、如何让数据分页显⽰
如果结果集的记录很多,则可以使⽤LIMIT关键字限定结果集数量
语法:SELECT ...... FROM ...... LIMIT 起始位置,偏移量;
例如:
SELECT empno, ename FROM t_emp LIMIT 0,20;
数据分页的简写⽤法
如果LIMIT⼦句只有⼀个参数,它表⽰的是偏移值,起始值默认为0,以下两条查询语句是相等的
SELECT empno,ename FROM t_emp LIMIT 10;
SELECT empno,ename FROM t_emp LIMIT 0,10;
执⾏顺序
FROM -> SELECT -> LIMIT
3、如何对查询结果集进⾏排序
如果没有设置,查询语句不会对结果进⾏排序。也就是说,如果想让结果集按照某种排序排列,就必须使⽤ORDER BY⼦句
SELECT ...... FROM ...... ORDER BY 列名[ASC|DESC];
【ASC 代表升序(默认),DESC代表降序,默认使⽤升序】
如果排序列是数字类型,数据库就按照数字⼤⼩排列,如果是⽇期类型就按照⽇期⼤⼩排序,如果是字符串就按照字符集序号排序
注意:默认情况下,如果两条数据排序字段内容相同,那么排序是什么样⼦?-----------按照主键⼤⼩排序
多个排序字段:使⽤ORDER BY规定⾸要排序条件和次要排序条件。数据库会先按照⾸要排序条件排序,如果遇到⾸要排序内容相同的记录,那么就会启⽤次要排序条件接着排序
SELECT empno, ename, sal, hiredate
FROM t_emp
ORDER BY sal DESC, hiredate ASC;
排序+分页
ORDER BY ⼦句书写的时候放在LIMIT⼦句的前⾯
FROM -> SELECT -> ORDER BY -> LIMIT
4、如果去除结果集中的重复记录
如果我们需要去除重复的记录,可以使⽤DISTINCT关键字来实现
语法: SELECT DISTINCT 字段 FROM ……;
例⼦:
SELECT DISTINCT job FROM t_emp;fist
注意事项
使⽤DISITINCT的SELECT⼦句中只能查询⼀列数据,如果查询多列,去除重复记录就会失效。
SELECT DISTINCT job,ename FROM t_emp; # 错误
underwent
DISTINCT关键字只能在SELECT⼦句中使⽤⼀次,⽽且必须写在第⼀个字段的前⾯
SELECT DISTINCT job, DISTINCT ename FROM t_emp; # 错误
SELECT ename,DISTINCT job FROM t_emp; # 错误
5、条件查询语句
(1)WHEREE⼦句实现数据的筛选
SELECT ...... FROM ...... WHERE 条件[AND| OR] 条件 ......;
matlab横纵坐标比例SELECT empno,ename,sal FROM t_emp WHERE deptno=10AND sal >=2000;
SELECT empno,ename,sal FROM t_emp WHERE (deptno=10OR deptno=20) AND sal >=2000;
(2)四类运算符
算数运算符
ifnull语句
SELECT 10*null;若结果为0可⽤ifnull语句
如果想让null值参与运算:SELECT 10*IFNULL(字段名,0);## 遇到null值就⽤0代替
计算两⽇期差DateDiff语句
DATEDIFF(⽇期1,⽇期2)
NOW语句
⽤NOW()可以获取当前⽇期与时间
SELECT empno,ename,sal,hiredate
FROM t_emp
WHERE deptno=10AND (sal+IFNULL(comm,0))*12>=15000
AND DATEDIFF(NOW(),hiredate)/365>=20;
⽐较运算符
注:LIKE 模糊查询如ename LIKE "A%"(名字以A开头),%A 名字以A结尾,%A% 名字中含有A,_A第第⼆个字母为A
举例1:
SELECT empno,ename,sal,hiredate
FROM t_emp
WHERE deptno IN(10,20,30)AND job!="SALEMAN"
AND hiredate<"1985-01-01";
举例2:
SELECT ename, comm,sal
FROM t_emp WHERE comm IS NOT NULL
AND sal BETWEEN2000AND3000
AND ename LIKE "%A%";
举例3:
SELECT ename, comm,sal
FROM t_emp WHERE comm IS NOT NULL
AND sal BETWEEN1000AND3000
AND ename REGEXP "^[\\u4e00-\\u9fa5]{2,4}$";
逻辑运算符
注意:
逻辑运算符的特殊:XOR异或关系例如:age > 18 XOR sex = '男'  # 多个条件判断结果相同,结果为FALSE;判断结果不同,结果为TRUE SELECT ename,deptno
FROM t_emp
WHERE NOT deptno IN(10,20) XOR sal>=1000;
按位运算符
6、WHERE⼦句中条件执⾏的顺序
筛选的过程,where条件排序 1 有索引的条件放在前⾯,2 查询数据多的 3 普通查询条件

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。