初识MySql

配置mysql服务器

1.端口设置

2.默认字符集设置

3.将bin目录配置成环境变量

4.root账号密码设置

5.允许远程登录: Enable root access from remote machines

操作数据库相关命令

1.启动服务器


net start mysql


2.连接mysql数据库


mysql -h 192.168.*.* -u root - p ****


3.创建数据库


create database myschool;


4.展示数据库


show databases;


5.使用数据库


use myschool;


6.删除数据库


drop database myschool;


SQL语言四大类

DML

data manipulation language 数据库操作语言

DDL

data definition language 数据可定义语言

DQL

data query language 数据库查询语言

DCL

data control language 数据库控制语言

数据类型

数值类型

int smallint mediumint int bigint folat duble decimal

unsigned属性 拥有该属性只有正数

zerofill属性 拥有该属性如果是4位输入1就是0001

字符串类型

char varchar tinytext test

char 表示定长,长度固定,varchar表示变长,即长度可变。char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,还是按实际长度存储,插入多长就存多长。

日期类型

date

datatime

time

timestamp

year

默认是timestamp 一般用datetime

操作表语句

创建表


create table if not exists student ( studentId int(11) primary key auto_increment comment '学生id', studentName varchar(10) not null comment '学生姓名' )


相关约束

not null 非空

default 默认

unique key 唯一

primary key 主键

foreign key 外键

auto_increment 自增

查看表的定义


desc student;


删除表


drop table if exists student


存储引擎

mylsan 与 innodb

区别

m没事务 查询位置 空间小

i有事务,操作丰富 安全性好

关键字 engine

mysql系统帮助


help contents; help int ;


重命名表


ALTER TABLE 旧表名 RENAME [AS] 新表名


修改字段


ALTER TABLE 表名   MODIFY 字段名   列类型 [ 属性 ]   ALTER TABLE 表名   CHANGE 旧字段名 新字段名   列类型 [ 属性 ]


添加字段


ALTER TABLE 表名   ADD 字段名   列类型 [ 属性 ]  


删除字段


ALTER TABLE 表名   DROP 字段名



 

数据管理

DML数据操作语言)

INSERT命令


INSERT INTO 表名 [ ( 字段1, 字段2, 字段3, … ) ]  VALUES (  '值1', '值2', '值3', …)


UPDATE命令


UPDATE   表名   SET   column_name = value [ , column_name2 = value2, …. ] [ WHERE   condition ];


DELETE命令


DELETE     FROM   表名 [ WHERE condition ];


TRUNCATE命令


TRUNCATE     [TABLE]   table_name


DELETE与TRUNCATE区别

相同 都能删除数据、不删除表结构,但TRUNCATE 速度更快 不同 使用TRUNCATE TABLE重新设置AUTO_INCREMENT计数器 使用TRUNCATE TABLE不会对事务有影响


查询一

DQL语言

SELECT语法


SELECT   [ALL | DISTINCT] { * | table.* | [ table.field1 [ as alias1] [, table.field2 [as alias2]][, …]] } FROM table_name [ as table_ alias ]   [ left|out|inner join table_name2 ]   #联合查询 [ WHERE … ]   #指定结果需满足的条件 [ GROUP BY …] #指定结果按照哪几个字段来分组 [ HAVING …] #过滤分组的记录必须满足的次要条件 [ ORDER BY… ] #指定查询记录按一个或者多个条件排序 [ LIMIT {   [ offset,] row_count   |   row_count OFFSET offset   }] ;


查所有


select   *   from student


查指定的结果


SELECT     StudentNo, StudentName, Phone  FROM student; SELECT student.StudentNo , StudentName, StudentResult   FROM   student , result ;


AS子句

作用

可给数据列取一个新别名 可给表取一个新别名 可把经计算或总结的结果用另外一个新名称来代替


SELECT   StudentNo   AS “学号”   FROM   student; SELECT   a.StudentNo   FROM   student AS a; SELECT   Phone+1 AS Tel   FROM   student;


DISTINCT关键字

作用

去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条


SELECT     DISTINCT   字段名1, 字段名2...     FROM   表名


在SQL语句中使用表达式


SELECT version() ,   100*3       #返回MySQL版本和计算结果 SELECT SubjectName “课程名称”, ClassHour+10 AS “新学时” FROM subject; #给返回结果中的课时都加10个课时


where条件语句

用于检索数据表中符合条件的记录 搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假 搜索条件的组成 逻辑操作符 比较操作符

逻辑操作符

操作符名称

语法

描述

AND或&&

a AND b 或 a && b

逻辑与,同时为真,结果才为真

OR或||

a OR b 或 a||b

逻辑或,只要一个为真,则结果为真

NOT或!

NOT a 或 !a

逻辑非,若操作数为假,结果则为真

比较操作符

操作符名称

语法

描述

IS NULL

a IS NULL

若操作符为NULL,则结果为真

IS NOT NULL

a IS NOT NULL

若操作符不为NULL,则结果为真

BETWEEN

a BETWEEN b AND c

若a范围在b与c之间则结果为真

LIKE

a LIKE b

SQL模式匹配,若a匹配b,则结果为真

IN

a IN (a1,a2,a3,….)

若a等于a1,a2…中的某一个,则结果为真

BETWEEN AND范围查询


SELECT 字段列1,字段2 ,…FROM 表名 WHERE   字段x  BETWEEN 值1 AND 值2


LIKE模糊查询

在WHERE子句中,使用LIKE关键字进行模糊查询 与“%”一起使用,表示匹配0或任意多个字符 与“_”一起使用,表示匹配单个字符


#查询包含“数学”的所有课程 SELECT   *  FROM subject WHERE SubjectName  LIKE  "%数学%"; #查询所有姓名为“李**”三个字的学生信息 SELECT StudentNo,StudentName FROM student    WHERE StudentName LIKE "李__";


使用IN进行范围查询


SELECT 字段列1,字段2 ,…FROM 表名 WHERE   字段x  IN ( 值1,值2,值3…)


SELECT *  FROM subject  where   ClassHour = 100  OR ClassHour =110 OR ClassHour = 120; #普通处理方式 SELECT *  FROM subject  where ClassHour  IN ( 100, 110,120 ); #使用IN进行查询方式,更为简洁,效率更高


连接查询

如需要多张数据表的数据进行查询,则可通过连接运算符实现多个查询 分类包括 内连接 ( inner join) 等值和非等值的连接查询 自身连接查询 外连接 ( out join ) 左连接(LEFT JOIN) 右连接 ( RIGHT JOIN)

内连接查询

INNER JOIN内连接

在表中至少一个匹配时,则返回记录


SELECT   字段1,字段2,… FROM table_1 INNER JOIN   table_2   ON table_1.字段x   = table_2.字段y; # INNER JOIN 与 JOIN 是相同的; # 如table_1中的行在table_2中没有匹配,则不返回


等值和非等值的连接查询 与单表查询类似,都是SELECT语句 把多个表放到FROM后,并用逗号隔开 可使用AS关键字取别名,便于引用 如无重名查询字段则可省略数据表的指定


#要求:从subject和grade数据表查询课程名称和所属年级名称 #非等值连接查询 SELECT SubjectName, GradeName FROM subject, grade;   #等值查询 SELECT SubjectName, GradeName FROM subject, grade WHERE subject.GradeID = grade.GradeID;  


左外连接(LEFT JOIN)

从左表(table_1)中返回所有的记录,即便在右(table_2)中没有匹配的行


SELECT   字段1,字段2,… FROM table_1 LEFT [ OUTER ]   JOIN   table_2   ON table_1.字段x   = table_2.字段y;


右外连接(RIGHT JOIN)

从右表(table_2)中返回所有的记录,即便在左(table_1)中没有匹配的行


SELECT   字段1,字段2,… FROM table_1 RIGHT   [ OUTER ]   JOIN   table_2   ON table_1.字段x   = table_2.字段y;


三个join对比

操作符名称

描述

INNER JOIN( JOIN)

如果表中有至少一个匹配,则返回行

LEFT JOIN

不论右表是否有匹配,都会返回左表的所有行

RIGHT JOIN

不论左表是否有匹配,都会返回右表的所有行

自连接查询

自连接查询 自连接就是一个表和它自身进行连接,是多表连接的特殊情况。 在自连接查询中,要先在FROM字句中为表分别定义两个不同的别名, 然后使用这两个别名写出一个连接条件。


SELECT DISTINCT c1.CouNo 课程编号, c1.CouName 课程名称,                 c1.Kind 课程类别, c1.DepartNo 系部编号 FROM Course c1 JOIN Course c2 ON c1.Kind=c2.Kind AND c1.DepartNo!=c2.DepartNo ORDER BY c1.CouNo;