mysql基本理论

Posted Kali-BugChen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql基本理论相关的知识,希望对你有一定的参考价值。

第二章 mysql基础

一、数据库基础
1、在dos窗口中连接mysql服务器。

(1)普通用户进入dos窗口

​ 第一次安装mysql的时候,数据库是没有密码的,这时候使用输入win+R,然后输入cmd进入dos窗口,然后退出dos窗口,因为这样进入dos窗口是普通用户的形式进入dos窗口,mysqld install指令会失效。

第一步:使用win+R进入运行页面

第二步:输入指令mysqld install指令

第三步:查看mysqld install指令是否运行成功

注意:mysqld是mysql服务器相关的指令,mysqld install是安装mysql服务器。mysqld start是启动mysql服务器,mysqld stop是停止mysql服务器。

(2)超级管理员进入dos窗口

​ 第一步:以管理员的身份打开dos窗口

​ 第二步:使用mysqld install 安装mysql服务器

​ 注意:由于我之前已经安装了mysql服务器,所以提示信息为“The service already exists!”,如果没有安装mysql服务器的,显示的是successufly的提示信息。

​ 第三步:使用mysqld start启动MySQL服务器

​ 第四步:使用mysqld stop停止MySQL服务器即可。

2、普通用户在dos窗口连接mysql服务器

​ 进入dos窗口之后,我们可以选择两种方式连接mysql,即本机连接和远程连接

(1)本机连接:mysql -u+mysql用户名 -p+mysql用户密码

​ 一般情况下,我们使用的是mysql超级管理员的身份登录mysql,即mysql -uroot -proot登录,因为我的mysql超级管理员的密码为root,用户名也为root。出现以下的这种情况就表示连接成功了。

​ 当我连接成功本地mysql服务器之后,我们可以使用exit指令退出连接,出现Bye的提示信息之后,表示我们退出连接。

​ 注意:我们在连接的时候,可能会存在连接不上mysql服务器的情况,这时候不需要担心,可能是我们把计算机上的mysql服务器停止了了,这样的话肯定是无法连接的,这时候只需要将mysql服务器启动即可。
​ 连接失败:

​启动MySQL服务器:

启动成功:

(2)远程连接:mysql -u+mysql用户 -p+mysql用户密码 -h+远程连接的主机ip

​ 以本机为案例,本机的ip地址为127.0.0.1,-h参数填写本机地址,即可连接到本机,如果知道远程主机的ip地址,即可连接远程主机的mysql服务器。

总结:

1.我们在进行mysql服务器的连接时,必须保证mysql服务器是启动的。以管理员的身份进入dos窗口——》mysqld install 安装mysql服务器——》mysqld start启动服务器

2.mysql服务器的连接方式有两种:本地连接和远程连接

1)本地连接:mysql -u -p

其中:

-u:u指的是user,即mysql用户名,可以是普通用户,也可以是mysql的超级管理员,在练习中,我们使用的是root用户,即超级管理员,在工作中,用户是由DB(数据库管理员进行分配的),而DB就是root。

-p:指的是mysql用户对应的密码

2)远程连接:mysql -u -p -h

-u和-p和本地连接一样,-h则是用来指定需要连接mysql所在主机的ip地址,如果ip=127.0.0.1和连接本机就是一样的。

思考:如果我们连接mysql的时候,需要指定端口号怎么办?

使用mysql -h -P -u -p即可(原理和上面一样的)

3、数据库语句的分类(以下列举的是常用的sql语句)

(1)数据库定义语句(DDL ):

​ 数据库定义语言,负责数据结构定义与数据库对象的定义,由create、alter、drop三个语法组成。

1.1数据库的创建

创建一个test数据库:

-- 默认字符集创建数据库
CREATE DATABASE test;

​ 使用这种方式创建的数据库,它采用字符集编码是ltain1,因此我们需要在创建数据库的时候,指定数据库的字符编码集,这样的话,防止出现乱码的现象。

-- 指定字符集创建数据库
CREATE DATABASE test CHARACTER SET utf8;

​ 使用character set utf8来指定数据库的编码方式。

使用test数据库:

-- 使用数据库
USE test;

删除test数据库:

-- 删除数据库
DROP DATABASE test;

1.2 数据表的创建

创建一个student表:

-- 默认字符集创建表
CREATE TABLE student(sname CHAR(50),sclass VARCHAR(50),sid INT(11));

​ 使用这种方式创建的数据表,它采用字符集编码是ltain1,因此我们需要在创建数据库的时候,指定数据库的字符编码集,这样的话,防止出现乱码的现象。

-- 指定字符集创建表
CREATE TABLE student(sname CHAR(50),sclass VARCHAR(50),sid INT(11)) CHARACTER SET utf8;

​ 使用character set utf8来指定数据库的编码方式。

注意:是utf8,而不是utf-8.

修改表student的名称:

-- 将student表的名称改成student1
ALTER TABLE student RENAME TO student1;

在student表指定的位置插入新的字段:

-- 在student1表指定的位置插入新的字段sage,默认是在student1的最后一个字段后加入新字段
ALTER TABLE student1 ADD COLUMN sage INT(11) ;
-- 在student1表指定的位置插入新的字段sdress,在sname之后插入
ALTER TABLE student1 ADD COLUMN sdress VARCHAR(50) AFTER sname;

删除student1中的sage这一列:

-- 删除student1中的sage这一列
ALTER TABLE student1 DROP COLUMN sage;

将student1中的sdress修改成sage:

-- 将student1中的sdress修改为sage
ALTER TABLE student1 CHANGE sdress sage INT(11);

将student1中的sid修改成varchar类型的数据:

-- 将student1中的sid修改成varchar类型的数据
ALTER TABLE student1 MODIFY sid VARCHAR(50);

数据库定义语言DDL总结:

1.操作数据库

​ 1.1 默认创建数据库(采用的是ltain1的字符集编码)

​ create database 数据库名称;

​ 1.2 指定字符集编码创建数据库

​ create database 数据库名称 character set utf8;

​ 1.3 使用数据库

​ use 数据库名称

​ 1.4 删除数据库

​ drop database 数据库名称

2.操作表

1)创建表:

​ 1.1 默认字符集创建表格

​ create table 表名称(字段名称 数据类型(数据类型长度),…);

​ 1.2 指定字符集创建表格

​ create table 表名称(字段名称 数据类型(数据类型长度),…)character set utf8;

​ 1.3 指定存储引擎创建表格

​ create table 表名称(字段名称 数据类型(数据类型长度),…)engine = InnoDB;

​ 1.4 在创建表格的时候,同时指定表格的相关属性

​ create table 表名称(字段名称 数据类型(数据类型长度),…)engine= InnoDB default charset=utf8 comment=‘学生信息表’;comment是表的注释。

2)删除表:

​ 2.1 删除表

​ drop table 表名称;

3)修改表:

​ 3.1 修改表的名称

​ alter table 表名称(旧) rename to 表名称(新);

​ 3.2 修改表的注释

​ alter table 表名称 comment ‘新注释’;

​ 3.3 在指定位置插入新字段

​ alter table 表名称 add column 字段名称 字段数据类型(长度) 是否为空 comment ’注释‘ after 指定字段名称;

注意:如果没有after之后的语句,默认在表的最后一个字段之后插入。atler table表示选中表。存储引擎作用在表上,并步作用在数据库上。

​ 3.4 删除指定名称的字段

​ alter table 表名称 drop column 字段名称;

​ 3.5 修改字段类型(字段类型、注释、默认值等)

​ alter table 表名称 modify column 字段名称 新数据类型 (长度) 新默认值 新注释;

(2)数据库操作语句(DML):

​ 数据库操纵语言,负责对数据库对象进行访问和修改等相关操作,由insert、update、delete组成。

2.1 插入数据(insert)

单条数据插入(全部字段的插入):

-- 单条数据的插入(全部字段)
INSERT INTO student1 VALUES('陈文财',25,'三班','s001');

单条数据的插入(部分字段的插入):

-- 单条字段的插入(部分字段的插入)
INSERT INTO student1(sname,sage,sclass) VALUES('张三',18,'一班');
INSERT INTO student1(sage,sclass,sid) VALUES(20,'二班','s002');

多条数据的插入:

-- 多条数据的插入
INSERT INTO student1(sname,sage,sclass,sid) VALUES('李四',20,'一班','s001'),('王五',21,'二班','s002'),('麻子',22,'3班','s001');
INSERT INTO student1(sname,sage,sclass) VALUES('李四1',20,'一班'),('王五1',21,'二班'),('麻子1',22,'3班');

2.2 更新数据(update)

更改单个字段的数据:

-- 将姓名为空的设置为未知
UPDATE student1 SET sname='未知' WHERE sname IS NULL;
-- 没有条件,全部改变
UPDATE student1 SET sname='亚力士多长';

更改多个字段的数据:

UPDATE student1 SET sname='先王';
-- 将姓名为孙晓晓的数据修改
UPDATE student1 SET sclass ='三班',sid='s003' WHERE sname='孙晓晓';
-- 将姓名为麻子的数据修改
UPDATE student1 SET sname='赵信',sage=26 WHERE sname='麻子';

2.3 删除数据

删除所有数据:

-- 删除单条数据
DELETE FROM student1 WHERE sname = '陈德发';

删除所有数据:

DELETE FROM student1 WHERE sname = '陈德发';
-- 删除所有数据
DELETE FROM student1 ;

数据库操纵语句总结(DML):

1、新增数据(insert)

​ 1.1单条完整数据的新增

​ insert into 表名称(列名称,列名称,列名称,列名称)values(数据,数据,数据,数据);

​ 1.2 单条不完整数据的新增(第四列不添加,mysql用null来补充)

​ insert into 表名称(列名称,列名称,列名称) values(数据,数据,数据);

注意:当插入的是完整的数据的时候,表名称后面的每一列不用写:insert into 表名称 values(数据,数据,数据,数据);

​ 1.3 新增多条完整的数据

​ insert into 表名称(列名称,列名称,列名称,列名称)values(数据,数据,数据,数据),values(数据,数据,数据,数据),values(数据,数据,数据,数据),values(数据,数据,数据,数据)…;

​ 1.4 新增多条不完整的数据(第四列不添加,mysql用null来补充)

​ insert into 表名称(列名称,列名称,列名称) values(数据,数据,数据),(数据,数据,数据),(数据,数据,数据)…;

2、更新数据(update)

​ 2.1 更新所有数据单个字段的值(没有条件就更新表中指定字段的所有值)

​ update 表名称 set 字段名称=数据;

​ 2.2 更新所有数据多个字段的值(没有条件就更新表中指定字段的所有值)

​ update 表名称 set 字段名称=数据,字段名称=数据,字段名称=数据,字段名称=数据…;

注意:需要更新多个字段的值的时候,只需要用逗号隔开即可。

​ 2.3 更新指定条件下的某个字段的值

​ update 表名称 set 字段名称=数据 where 条件;

3、删除数据(delete)

​ 3.1 删除所有数据

​ delete from 表名称;

​ 3.2 删除某条数据

​ delete from 表名称 where 条件;

备注:在实际的工作中,我们很少对数据进行删除的,因为数据对于公司来说是一笔价值,一般是通过删除标识符来标识,对于用户来说,他删除数据就是改变了该数据的删除标识状态,并未真正地删除数据。

(3)数据库查询语句(DQL Data Query Language):

​ 数据库查询语言,只负责数据的查询操作而不会对数据库的数据进行修改或者删除,它是数据库的基本语句。关键词为select,通常配合where、group by等使用。说明:为了提升数据库的查询效率,在查询哪一列数据,是要全部标识出来的,本文在演示的过程中将查询所有列的情况用*来替代。

​ 3.1 查询student1所有数据

-- 查询student1中的所有数据
SELECT * FROM student1;

​ 3.2 查询单个或者多个字段的信息

-- 查询student1中的所有姓名
SELECT sname FROM student1;
-- 查询student1中所有sclass
SELECT sclass FROM student1;
-- 查询student1中的姓名和年龄
SELECT sname,sage FROM student1;

​ 3.2 指定条件下查询某条数据

-- 查询student1中年龄为21的姓名
SELECT sname FROM student1 WHERE sage=21;

​ 3.3 模糊查询

-- 查询姓王的所有数据
SELECT * FROM student1 WHERE sname LIKE '王%';

数据库查询语言总结(DQL):

1.数据库中常用的关键词(条件)

关键词说明
or
and
between a and b介于a和b之间([a,b])
having分组之后附加的条件
group by分组
oder by排序查询 (asc升序;desc降序)
in存在于某个值中
not in不存在于某个值中
inner join … on多表连接
left join … on左外连接
right jion … on右外连接
left(right,inner)out jion … on去重
distinct:(放在某个字段的前面即可)去重
like ”关键词%“ , like ”like % 关键词“,like “%关键词%”提取含有关键词的数据
where 1=1全选
where 1=2全不选
limit a to b查询从a+1行开始的b条数据(分页查询)
top a(用在select后面):select top a from 表名称显示前a条数据
as:select * from student1 as s1;select count(列名) as '总数’ from student1;给表或者字段起别名

2、数据库中常用的内置函数

函数说明案列
count(字段名称)计算某个字段的总数– 统计表student1中所有的姓名
SELECT COUNT(sname) AS ‘总数’ FROM student1 AS s1;
avg(字段名称)计算某个字段的平均值– 计算所有学生的平均年龄
SELECT AVG(sage) AS ‘平均年龄’ FROM student1;
sum(字段名称)对某个字段进行求和– 计算所有学生的年龄综合
SELECT SUM(sage) AS ‘年龄综合’ FROM student1;
max(字段名称)找出某个字段中的最大值– 找出student1中的最大年龄
SELECT MAX(sage) AS ‘最大年龄’ FROM student1;
min(字段名称)找出某个字段中的最小值– 找出student1中的最小年龄
SELECT MIN(sage) AS ‘最大年龄’ FROM student1;

注意:以上的函数可以作为查询的条件,也可以作为单独查询的一列。

1.选择查询:

select * from 表名 where 范围;

2.完全查询:select * from 表名;

3.模糊查询:select * from 表名 where 列名 like ‘%value%’(查询包含value的值);

4.排序查询(倒序,默认为正序):select * from 表名 order by 列名 desc;

5.计数查询:select count as 别名 from 表名;

6.求和查询:select sum(field) as 别名 from 表名;

7.平均值查询:select avg(filed) as 别名 from 表名;

8.最大值查询:select max(filed) as 别名 from 表名;

9.最小值查询:select min(filed) as 别名 from 表名;

10.四舍五入查询:select round(min(filed),要保留的小数位数) as 别名 from 表名;

11.去重查询:select distinct 列名 from 表名;

12.分组查询:select * from 表名 group by 列名;

13.多条件查询:select * from 表名 where 列名=‘范围’ and 列名=‘范围’;

14.不确定条件查询:select * from 表名 where 列名=‘范围’ or 列名=‘范围’;

15.多条件分组求值查询:select 列名,min(filed)from 表名 where 列名=‘范围’ group by 列名 having sum(列名);

16.子查询(子查询的结果作为主查询的条件):select * from 表名 where=(select id from 表名 where 列名=‘范围’);

17.连表查询(内连接):select * from 表名 inner join 表名 on 主键=外键(必须有主外键);

18.连表查询(内连接)(去重):select * from 表名 inner out join 表名 on 主键=外键(必须有主外键);注:内连接只显示相关联的数据

19.连表查询(左外连接)(显示左表的全部信息和右表相关联的信息):select * from 表名 left join 表名 on 主键=外键(必须有主外键);

20.连表查询(右外连接)(显示右表的全部信息和左表相关联的信息):select * from 表名 right join 表名 on 主键=外键(必须有主外键);

21.连表查询(全外连接)(显示两个表中的所有记录):select * from 表名 full/cross join 表名 on 主键=外键(必须有主外键);

22.说明:几个高级查询运算词\\nA:union(结合两个结果表并消除其中的重复行而派生出另一个表);

例:select name from 表名1 union select name from 表名2(去除name的重复行);

B:except(通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表;

C:intersect(通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表);注:当这三个运算符与all一起使用时不消重复的行。

(4)数据库权限控制语句(DCL):

​ 数据库控制语言,对数据库访问权限进行控制的一种sql语言,主要是对访问数据的用户进行授权操作。

(5)事务处理语句(TPL):

​ 它的语句能确保DML语句影响的表所有行及时得到更新,主要由begin、transtaction、commit、rollbock组成。

4、查看当前的数据库和表

(1)查看当前数据库

show databases;

(2)查看当前数据库中的表的数量

use 数据库名称;

show tables;

5、数据库的导入与导出

(1)数据库的导出(>)大于符号

mysqldump -u用户名 -p密码 数据库 表1 表2 … 表n > d:\\\\文件名.sql;

(2)数据库的导入(<)小于符号

mysql -u用户名 -p密码 数据库 < d:\\\\文件名.sql;

6、内连接(自链接)

​ 自连接是指同一张表的连接查询【将同一张表看作两张表】。

-- 多表查询的 自连接

-- 思考题: 显示公司员工名字和他的上级的名字

-- 老韩分析: 员工名字 在emp, 上级的名字的名字 emp
-- 员工和上级是通过 emp表的 mgr 列关联
-- 这里老师小结:
-- 自连接的特点 1. 把同一张表当做两张表使用
--               2. 需要给表取别名 表名  表别名 
--		 3. 列名不明确,可以指定列的别名 列名 as 列的别名		
SELECT worker.ename AS '职员名' ,  boss.ename AS '上级名'
	FROM emp worker, emp boss
	WHERE worker.mgr = boss.empno;
SELECT * FROM emp;
7、外连接

(1)问题的提出

(2)左外连接和右外连接



-- 外连接
-- 比如:列出部门名称和这些部门的员工名称和工作,
-- 同时要求 显示出那些没有员工的部门。
-- 使用我们学习过的多表查询的SQL, 看看效果如何?

SELECT dname, ename, job 
	FROM emp, dept
	WHERE emp.deptno = dept.deptno
	ORDER BY dname
SELECT * FROM dept;
SELECT * FROM emp;
-- 创建 stu
/*
id  name   
1   Jack
2   Tom
3   Kity
4   nono
*/
CREATE TABLE stu (
	id INT,
	`name` VARCHAR(32));
INSERT INTO stu VALUES(1, 'jack'),(2,'tom'),(3, 'kity'),(4, 'nono');
SELECT * FROM stu;
-- 创建 exam
/*
id   grade
1    56
2    76
11   8
*/
CREATE TABLE exam(
	id INT,
	grade INT);
INSERT INTO exam VALUES(1, 56),(2,76),(11, 8);
SELECT * FROM exam;
-- 使用左连接
-- (显示所有人的成绩,如果没有成绩,也要显示该人的姓名和id号,成绩显示为空)
SELECT `name`, stu.id, grade
	FROM stu, exam
	WHERE stu.id = exam.id;
-- 改成左外连接
SELECT `name`, stu.id, grade
	FROM stu LEFT JOIN exam
	ON stu.id = exam.id;
	
-- 使用右外连接(显示所有成绩,如果没有名字匹配,显示空)
-- 即:右边的表(exam) 和左表没有匹配的记录,也会把右表的记录显示出来
SELECT `name`, stu.id, grade
	FROM stu RIGHT JOIN exam
	ON stu.id = exam.id;
-- 列出部门名称和这些部门的员工信息(名字和工作),
-- 同时列出那些没有员工的部门名。5min
-- 使用左外连接实现
SELECT dname, ename, job
	FROM dept LEFT JOIN emp
	ON dept.deptno = emp.deptno
-- 使用右外连接实现
SELECT dname, ename, job
	FROM emp RIGHT JOIN dept
	ON dept.deptno = emp.deptno
-- 
二、约束
1、mysql中的关系模式

(1)一对一

(2)一对多

(3)多对多

注意:对于多对的情况需要建立第三张表来维护两张表之间的关系。

1、表1和表2称为表3的主表,表3是表1和表2的从表。

2、表3的主键是主键是表1和表2的主键的组合。

3、在插入数据的时候,先出入主表数据,在插入从表数据。

4、在从表(表3)建立联合组建的时候,必须依赖于表1和表2,并且数据类型和长度与主表保持一致。

2、约束含义

​ 约束是用于确保数据库的数据满足特定的商业规则。在mysql中主要有五种约束:

非空约束(not null)、唯一约束(unique)、primary key(主键约束),foreign key(外键约束)和check约束。

(1)主键约束(primary key):用于唯一标识一行数据的。基本使用为 字段名 字段类型 primary key。

使用细节:

  • primary key不能重复而且不能为null。
  • 一张表最多只能有一个主键,但是该主键可以是复合主键。
  • 主键的指定方式有两种:(1)直接在字段后指定:字段名 primary key(2)在表定义最后写primary key(字段名)。
  • 使用desc 表名可以看到primary key的情况。
  • 在实际开发种,每张表都有一个主键。

案例:

-- 主键使用
-- id	name 	email
CREATE TABLE t1
	(id INT PRIMARY KEY, -- 表示id列是主键 
	`name` VARCHAR(32),
	email VARCHAR(32));
-- 主键列的值是不可以重复
INSERT INTO t1
	VALUES(1, 'jack', 'jack@sohu.com');
INSERT INTO t1
	VALUES(2, 'tom', 'tom@sohu.com');
INSERT INTO t1
	VALUES(1, 'hsp', 'hsp@sohu.com');
SELECT * FROM t1;
-- 主键使用的细节讨论
-- primary key不能重复而且不能为 null。
INSERT INTO t1
	VALUES(NULL, 'hsp', 'hsp@sohu.com');
-- 一张表最多只能有一个主键, 但可以是复合主键(比如 id+name)
CREATE TABLE t2
	(id INT PRIMARY KEY, -- 表示id列是主键 
	`name` VARCHAR(32), PRIMARY KEY -- 错误的
	email VARCHAR(32));
-- 演示复合主键 (id 和 name 做成复合主键)
CREATE TABLE t2
	(id INT , 
	`name` VARCHAR(32), 
	email VARCHAR(32),
	PRIMARY KEY (id, `name`) -- 这里就是复合主键
	);
INSERT INTO t2
	VALUES(1, 'tom', 'tom@sohu.com');
INSERT INTO t2
	VALUES(1, 'jack', 'jack@sohu.com');
INSERT INTO t2
	VALUES(1, 'tom', 'xx@sohu.com'); -- 这里就违反了复合主键
SELECT * FROM t2;

-- 主键的指定方式 有两种 
-- 1. 直接在字段名后指定:字段名  primakry key
-- 2. 在表定义最后写 primary key(列名); 
CREATE TABLE t3
	(id INT , 
	`name` VARCHAR(32) PRIMARY KEY, 
	email VARCHAR(32)
	);
CREATE TABLE t4
	(id INT , 
	`name` VARCHAR(32) , 
	email VARCHAR(32),
	PRIMARY KEY(`name`) -- 在表定义最后写 primary key(列名)
	);
-- 使用desc 表名,可以看到primary key的情况
DESC t4 -- 查看 t4表的结果,显示约束的情况
DESC t1

(2)非空约束(not null)和唯一约束(unique)

  • 非空约束:如果在列上定义了not null,那么在插入数据的时候,就必须提供该列的数据。约束:字段名 字段类型 not null;

  • 唯一约束:当定义了唯一约束之后,该列的值就不能重复。约束:字段名 字段类型 unique。

  • 唯一约束细节:

    1)如果唯一约束没有指定not null,则unique字段可以有多个null。

    2)一张表可以有多个unique字段。

-- unique的使用

CREATE TABLE t5
	(id INT UNIQUE ,  -- 表示 id 列是不可以重复的.
	`name` VARCHAR(32) , 
	email VARCHAR(32)
	);
	
INSERT INTO t5
	VALUES(1, 'jack', 'jack@sohu.com');

INSERT INTO t5
	VALUES(1, 'tom', 'tom@sohu.com');
	
-- unqiue使用细节
-- 1. 如果没有指定 not null , 则 unique 字段可以有多个null
-- 如果一个列(字段), 是 unique not null 使用效果类似 primary key
INSERT INTO t5
	VALUES(NULL, 'tom', 'tom@sohu.com');
SELECT * FROM t5;
-- 2. 一张表可以有多个unique字段

CREATE TABLE t6
	(id INT UNIQUE ,  
一台数据库服务器中会创建很多数据库(一个项目,会创建一个数据库)。
在数据库中会创建很多张表(一个实体会创建一个表)。
在表中会有很多记录(一个对象的实例会添加一条新的记录)
 
表和表时间会有一些约束
主键约束:primary key 主键约束默认就是唯一 非空的()auto-increment实现自增长
唯一约束:unique
非空约束:not null
 
SQL数据库的结构化查询语句
     DDL 数据定义语言  create(创建)/drop(放弃)/alert(改变)
     DML 数据操纵语音  insert(插入)/update(更新)/delete(删除)
     DCL 数据控制语言  grant/if
     DQL 数据查询语言  select(查看)
 
数据库的增删改查
     show    dataabases             展示所有的数据库
     create database 数据库名 [character 字符集 collate 校对规则]  创建新的数据库
     use 数据库名称     某一个数据库
     drop database 数据库名          删除数据库
     select database()        查看正在使用的数据库
     show create database 数据库名称    查看指定的数据库
     alert database chatater set 字符集 collate 校对规则
 
表的增删改查
            创建表:create tabe 表名
                字段名称  字段类型(长度)  约束,
                字段名称  字段类型(长度)  约束,
            添加字段:Altle table 表名 add 字段名  类型(长度) 约束
   修改列:altle table 表名 modify 列名 类型 (长度) 约束
   删除字段:altle table 表名 drop 字段名
   修改字段:altle table 表名 change 旧字段名 新字段名 类型(长度) 约束
   查看建表结构:desc  表名;
   查看所有的表字段:show  tables;
   查看建表语句 show create table 表名
   删除表 drop table表名
   修改表名:rename table 表名 to 新表名
   修改表的字符集:altle table 表名 character set 字符集(默认的是utf8 的)
建表常见的约束
    主键约束:primary key   一般实现自增 auto-increment
    非空约束:notnull
    唯一约束:unique
     
     
当数据表中有自增长主键时,当用SQL插入语句中插入语句带有ID列值记录的时候; 
如果指定了该列的值,则新插入的值不能和已有的值重复,而且必须大于其中最大的一个值;
也可以不指定该列的值,只将其他列的值插入,让ID还是按照MySQL自增自己填;
这种情况在进行插入的时候,两种解决方法:
①可以把id的值设置为null或者0,这样子mysql都会自己做处理
②手动指定需要插入的列,不插入这一个字段的数据!

以上是关于mysql基本理论的主要内容,如果未能解决你的问题,请参考以下文章

MySQL高可用之MHA理论章节

初步了解MySQL数据库(理论知识)

初步了解MySQL数据库(理论知识)

Mysql数据库理论基础一

mysql=====理论(索引,视图,存储过程,事务)

Mysql数据库理论基础之四 --- 表和索引的管理