当前位置: 移动技术网 > IT编程>数据库>Mysql > mysql教程看这一篇就足够了

mysql教程看这一篇就足够了

2020年07月14日  | 移动技术网IT编程  | 我要评论

数据库的基本操作

查看数据库:show database 数据库名字;
创建数据库:CREATE DATABASE <数据库名>
修改数据库:ALTER DATABASE [数据库名]
删除数据库:DROP DATABASE <数据库名>
使用数据库:use 数据库名字

数据库注释
'# '单行注释
‘-- 空格’多行注释
/**/多行注释

数据表的操作

创建表

create table 表名字 (
字段名字 字段类型,长度 约束条件

);

实例
CREATE TABLE emp
     (
     id INT(11),
    name VARCHAR(25),
     deptId INT(11),
     salary FLOAT
     );

查看表 desc 表的名字;

修改表名字

ALTER TABLE <旧表名> RENAME [TO] <新表名>;

实例
ALTER TABLE student RENAME TO students;

修改字符集

ALTER TABLE 表名 [DEFAULT] CHARACTER SET <字符集名> [DEFAULT] COLLATE <校对规则名>;

ALTER TABLE tb_students_info CHARACTER SET gb2312  DEFAULT COLLATE gb2312_chinese_ci;

修改字段名

ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;

ALTER TABLE tb_emp1 CHANGE col1 col3 CHAR(30);

修改字段类型

ALTER TABLE <表名> MODIFY <字段名> <数据类型>

ALTER TABLE tb_emp1 MODIFY name VARCHAR(30);

删除字段

ALTER TABLE <表名> DROP <字段名>;

ALTER TABLE tb_emp DROP id;

删除数据表

DROP TABLE 表名字;

drop table student;

数据库的约束

主键约束 (PRIMARY KEY)

表示该字段是唯一的。
每个表只能由一个主键,并且该字段不能为空,一个字段只能在联合主键出现一次,联合主键不能包含多余的字段。
定义单字段主键
在字段的后面加 primary key,或者字段定义完成的时候在后面加。

create table ss (
id int primary key
);

create table ss1(
id int,
primary key(id)
);

创建表的时候创建联合主键

create table s (
id int,
name varchar(50),
primark key(id,name)
);

在修改表的时候创建主键
ALTER TABLE <数据表名> ADD PRIMARY KEY(<字段名>);

alter table student add primary key(id);

删除主键
ALTER TABLE <数据表名> DROP PRIMARY KEY;

alter table student drop primary key;

主键自增长

create table (
id int primary key AUTO_INCREMENT
)

外键(FOREIGN KEY)

规则
主表必须已经存在或者是当前的表。
主键不能包含空值,但允许在外键中出现空值。
在主表的表名后面指定列名或列名的组合。
外键中列的数目必须和主表的主键中列的数目相同。
外键中列的数据类型必须和主表主键中对应列的数据类型相同。

在创建表的时候创建外键
语法:[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]REFERENCES <主表名> 主键列1 [,主键列2,…]

 CREATE TABLE tb_dept1
     (
     id INT(11) PRIMARY KEY,
     name VARCHAR(22) NOT NULL,
    -location VARCHAR(50)
     );

在修改表的时候创建外键
ALTER TABLE <数据表名> ADD CONSTRAINT <外键名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);

ALTER table student add CONSTRAINT fk_s_t
FOREIGN key (id) REFERENCES teacher (t_id);

删除外键
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;

ALTER table student drop FOREIGN key fk_s_t;

唯一约束(unique)

语法:<字段名> <数据类型> UNIQUE

在创建表的时候创建唯一性约束

create table s (
id int unique
);

在修改表的时候创建唯一性约束
ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>);

ALTER TABLE tb_dept1 ADD CONSTRAINT unique_name UNIQUE(name);

删除唯一性约束
ALTER TABLE <表名> DROP INDEX <唯一约束名>;

ALTER TABLE tb_dept1 DROP INDEX unique_name;

检查性约束(check)

创建表的时候创建检查性约束

create table ss (
int price,
-- 约束字段值大于 0 且小于 10000
check(price >0 and price <1000)
);

在修改表时创建检查约束
ALTER TABLE tb_emp7 ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)

ALTER TABLE tb_emp7 ADD CONSTRAINT check_id CHECK(id>0);

删除检查性约束
ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;

ALTER TABLE tb_emp7 DROP CONSTRAINT check_id;

默认值约束

在创建表的时候创建默认值约束
<字段名> <数据类型> DEFAULT <默认值>;

create table ss (
id int default 1
);

在修改表的时候创建,默认值约束
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <数据类型> DEFAULT <默认值>;

 ALTER TABLE tb_dept3 CHANGE COLUMN id in DEFAULT 2;

删除默认值约束
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> DEFAULT NULL;

LTER TABLE tb_dept3CHANGE COLUMN id int DEFAULT NULL;

非空约束

字段值不能为空
在创建表的时候创建非空约束

create table ss (
id int not null
);

在修改表的时候创建非空约束
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名>
<字段名> <数据类型> NOT NULL;

ALTER TABLE tb_dept4 CHANGE COLUMN id id int  NOT NULL;

删除非空约束
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> NULL;

ALTER TABLE tb_dept4 CHANGE COLUMN id id int  NULL;



查看表的约束
SHOW CREATE TABLE <数据表名>;

运算符

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

MySQL 中的 IN 运算符用来判断表达式的值是否位于给出的列表中;如果是,返回值为 1,否则返回值为 0。

NOT IN 的作用和 IN 恰好相反,NOT IN 用来判断表达式的值是否不存在于给出的列表中;如果不是,返回值为 1,否则返回值为 0。

数据表增删改查

insert(增加)

-- 向表中所有的数据添加数据,多条数据逗号隔开
语法: insert into 表名 values (value1,value2....insert into student values (1,'sd'),(2,'sd').....;

-- 向表中添加指定的数据
语法:insert into 表名 (字段1,字段2....values (value1,value2...)
insert into student (id,name)values (1,'sd'),(2,'sd').....;

-- 复制表数据
语法:INSERT INTOSELECTFROM
insert into newstudent (id,name) select id,name from student 

delete(删除)

删除单个数据

DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]

删除表全部数据

DELETE FROM tb_courses_new;

删除满足条件的数据

select * from studet where 条件;
select name from studet where id = 2;

修改数据(update)

语法:UPDATE <表名> SET 字段 1=1 [,字段 2=2] [WHERE 子句 ]
[ORDER BY 子句] [LIMIT 子句]
-- 把id为1的id修改成2
update student set id=2 where id=1; 



查询(select)

1、查询全部数据

语法:SELECT * FROM 表名;

select * from student;

2、查询指定字段数据

语法 :select 字段 from 表名;

select name from student;

3、查询字段不重复的值

语法:SELECT DISTINCT <字段名> FROM <表名>;

select distinct name from student;

4、查询指定条数的数据

LIMIT 关键字可以指定查询结果从哪条记录开始显示,显示多少条记录。
不指定初始行数

-- 查询四条数据
SELECT * FROM student LIMIT 4;

指定行数

查询
第 4 条记录开始的行数为 5 的记录
SELECT * FROM tb_students_info LIMIT 3,5;

5、对查询结果进行排序

语法:ORDER BY <字段名> [ASC|DESC]
默认升序:asc
降序:desc

-- id进行降序排序
 SELECT * FROM student ORDER BY id desc;

6、条件查询

AND:记录满足所有查询条件时,才会被查询出来。

OR:记录满足任意一个查询条件时,才会被查询出来。
XOR:记录满足其中一个条件,并且不满足另一个条件时,才会被查询出来。
带 BETWEEN AND 关键字的查询条件,查询什么在什么之间的数据。

-- 查询 age 大于 21,并且 height 大于等于 175 的学生信息
SELECT name,age,height FROM tb_students_info  WHERE age>21 AND height>=175;

 SELECT name,age,height FROM tb_students_info  WHERE age>21 OR height>=175;

SELECT name,age,height FROM tb_students_info  WHERE age>21 XOR height>=175;

-- 查询年龄18在25之间的数据
SELECT age FROM tb_students_info  age between 18 and
25 

7、like 模糊查询

带有“%通配符的查询
%前面的字符表示匹配以什么开头,%后面的字符表示匹配以什么字符结尾,%字符%表示匹配以什么字符包含。

-- 查询以a开头的数据
select * from student where name like 'a%';

带有“”通配符的查询
”只能代表单个字符,字符的长度不能为 0。

-- 查询名字包含五个字符的人
select * from student where name like '_____';

8、空值查询

is not null --不为空
is null --为空

-- 查询id不为空
select * from student where id is not null;

9、聚合函数查询

聚合函数包括 COUNT(),SUM(),AVG(),MAX() 和 MIN()。其中,COUNT() 用来统计记录的条数;SUM() 用来计算字段值的总和;AVG() 用来计算字段值的平均值;MAX() 用来查询字段的最大值;MIN() 用来查询字段的最小值。

select count(name) from student; 
select max(price) from student; 
select min(price) from student; 
select avg(price) from student; 
select sum(price) from student; 

10、分组查询

语法:GROUP BY <字段名>

-- 按照sex进行分组
SELECT name`,sex FROM tb_students_info  GROUP BY sex;

过滤分组HAVING <查询条件>
HAVING 关键字和 WHERE 关键字都可以用来过滤数据,且 HAVING 支持 WHERE 关键字中所有的操作符和语法。

但是 WHERE 和 HAVING 关键字也存在以下几点差异:
一般情况下,WHERE 用于过滤数据行,而 HAVING 用于过滤分组。
WHERE 查询条件中不可以使用聚合函数,而 HAVING 查询条件中可以使用聚合函数。
WHERE在数据分组前进行过滤,而 HAVING 在数据分组后进行过滤 。
WHERE 针对数据库文件进行过滤,而 HAVING 针对查询结果进行过滤。也就是说,WHERE 根据数据表中的字段直接进行过滤,而 HAVING 是根据前面已经查询出的字段进行过滤。
WHERE 查询条件中不可以使用字段别名,而 HAVING 查询条件中可以使用字段别名。

SELECT GROUP_CONCAT(name),sex,height FROM tb_students_info  GROUP BY height HAVING AVG(height)>170;

11、内连接查询

内连接(INNER JOIN)主要通过设置连接条件的方式,来移除查询结果中某些数据行的交叉连接。简单来说,就是利用条件表达式来消除交叉连接的某些数据行。
没有连接条件,INNER JOIN 和 CROSS JOIN 在语法上是等同的。

-- 使用内连接查询学生对应的老师
SELECT s.name,t.t_name from student s INNER JOIN teacher t
on s.id=t.t_id;
-- 在这里的查询语句中,两个表之间的关系通过 INNER JOIN 指定,连接的条件使用 ON 子句给出。

12、外连接查询

内连接的查询结果都是符合连接条件的记录,而外连接会先将连接的表分为基表和参考表,再以基表为依据返回满足和不满足条件的记录。
外连接可以分为左连接(left join)和right join右连接。
左连接(left join)
语法:SELECT <字段名> FROM <表1> LEFT OUTER JOIN <表2> <ON子句>。
可以省略 outer子句。

-- 使用内连接查询学生对应的老师包括没有老师的学生
SELECT s.name,t.t_name from student s left JOIN teacher t
on s.id=t.t_id;

右连接(right join)
右外连接又称为右连接,右连接是左连接的反向连接。使用 RIGHT OUTER JOIN 关键字连接两个表,并使用 ON 子句来设置连接条件。
可以省略 outer

-- 使用内连接查询学生对应的老师包括没有学生的老师
SELECT s.name,t.t_name from student s right JOIN teacher t
on s.id=t.t_id;

13、交叉查询

交叉连接(CROSS JOIN)一般用来返回连接表的笛卡尔积。
语法:SELECT <字段名> FROM <表1> CROSS JOIN <表2> [WHERE子句]
或者SELECT <字段名> FROM <表1>, <表2> [WHERE子句]

-- 查询两个表的笛卡尔积
SELECT * from student CROSS JOIN teacher;

--查询两个表id相等的内容
SELECT * FROM student s CROSS JOIN teacher t
where s.id=t.t_id;

14、子查询

注意:单列子查询不要取别名,多列子查询需要取别名。
子查询指将一个查询语句嵌套在另一个查询语句中。
语法:WHERE <表达式> <操作符> (子查询)
1)IN | NOT IN
当表达式与子查询返回的结果集中的某个值相等时,返回 TRUE,否则返回 FALSE;若使用关键字 NOT,则返回值正好相反。
2)EXISTS | NOT EXISTS
用于判断子查询的结果集是否为空,若子查询的结果集不为空,返回 TRUE,否则返回 FALSE;若使用关键字 NOT,则返回的值正好相反。

-- 查询张老师教的学生
-- 首先查询出来张老师然后根据张老师得出对应的学生
SELECT id,name FROM student where t_id in 
(SELECT t_id FROM teacher where t_name ='张老师');

本文地址:https://blog.csdn.net/qq_44982298/article/details/107307423

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网