欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql教程看这一篇就足够了

程序员文章站 2022-11-21 09:46:04
数据库的基本操作查看数据库:show database 数据库名字;创建数据库:CREATE DATABASE <数据库名>修改数据库:ALTER DATABASE [数据库名]删除数据库:DROP DATABASE <数据库名>使用数据库:use 数据库名字数据库注释'# '单行注释‘-- 空格’多行注释/**/多行注释数据表的操作创建表create table 表名字 (字段名字 字段类型,长度 约束条件…);实例CREATE TABLE e...

数据库的基本操作

查看数据库: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教程看这一篇就足够了

mysql教程看这一篇就足够了
mysql教程看这一篇就足够了

mysql教程看这一篇就足够了
mysql教程看这一篇就足够了

mysql教程看这一篇就足够了

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